git.git
16 years agotest-lib: do not remove trash_directory if called with --debug
Johannes Schindelin [Thu, 21 Aug 2008 07:49:12 +0000 (09:49 +0200)]
test-lib: do not remove trash_directory if called with --debug

Sometimes you want to keep the trash directory, even if all tests
passed.  For example, when extending tests, it comes it quite handy.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoprovide more errors for the "merge into empty head" case
Paolo Bonzini [Thu, 21 Aug 2008 12:14:18 +0000 (14:14 +0200)]
provide more errors for the "merge into empty head" case

A squash merge into an unborn branch could be implemented by building the
index from the merged-from branch, and doing a single commit, but this is
not supported yet.

A non-fast-forward merge into an unborn branch does not make any sense,
because you cannot make a merge commit if you don't have a commit to use
as the parent.

Signed-off-by: Paolo Bonzini <bonzini@gnu.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake reflog query '@{1219188291}' act as '@{2008.8.19.16:24:51.-0700}'
Shawn O. Pearce [Thu, 21 Aug 2008 15:40:44 +0000 (08:40 -0700)]
Make reflog query '@{1219188291}' act as '@{2008.8.19.16:24:51.-0700}'

As we support seconds-since-epoch in $GIT_COMMITTER_TIME we should
also support it in a reflog @{...} style notation.  We can easily
tell this part from @{nth} style notation by looking to see if the
value is unreasonably large for an @{nth} style notation.

The value 100000000 was chosen as it is already used by date.c to
disambiguate yyyymmdd format from a seconds-since-epoch time value.

A reflog with 100,000,000 record entries is also simply not valid.
Such a reflog would require at least 7.7 GB to store just the old
and new SHA-1 values.  So our randomly chosen upper limit for @{nth}
notation is "big enough".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoconfig.mak.in: Pass on LDFLAGS from configure
Neil Roberts [Thu, 21 Aug 2008 19:38:23 +0000 (20:38 +0100)]
config.mak.in: Pass on LDFLAGS from configure

The configure script allows you to specify flags to pass to the linker
step in the LDFLAGS environment variable but this was being ignored in
the Makefile. Now a make variable gets set to the value passed down
from the configure script.

Signed-off-by: Neil Roberts <bpeeluk@yahoo.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Thu, 21 Aug 2008 08:54:49 +0000 (01:54 -0700)]
Merge branch 'maint'

* maint:
  compat/snprintf.c: handle snprintf's that always return the # chars transmitted
  git-svn: fix dcommit to urls with embedded usernames
  revision.h: make show_early_output an extern which is defined in revision.c

16 years agocompat/snprintf.c: handle snprintf's that always return the # chars transmitted
Brandon Casey [Thu, 21 Aug 2008 01:53:50 +0000 (20:53 -0500)]
compat/snprintf.c: handle snprintf's that always return the # chars transmitted

Some platforms provide a horribly broken snprintf. More broken than the
platforms that return -1 when there is too little space in the target buffer
for the formatted string. Some platforms provide an snprintf which _always_
returns the number of characters transmitted to the buffer, regardless of
whether there was enough space or not.

IRIX 6.5 is such a platform. IRIX does have a working snprintf(), but it
is only provided when _NO_XOPEN5 evaluates to zero, and this only happens
if _XOPEN_SOURCE is defined, but definition of _XOPEN_SOURCE prevents
inclusion of many other common functions and defines. So it must be avoided.

Work around these horribly broken snprintf implementations by detecting an
snprintf call which results in the number of transmitted characters exactly
equal to the length of our buffer and retrying with a larger buffer just to
be safe.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTeach "git diff -p" HTML funcname patterns
Johan Herland [Wed, 20 Aug 2008 17:49:15 +0000 (19:49 +0200)]
Teach "git diff -p" HTML funcname patterns

Find lines with <h1>..<h6> tags.

[jc: while at it, reordered entries to sort alphabetically.]

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTeach "git diff -p" Python funcname patterns
Kirill Smelkov [Wed, 20 Aug 2008 15:57:07 +0000 (19:57 +0400)]
Teach "git diff -p" Python funcname patterns

Find classes, functions, and methods definitions.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: fix dcommit to urls with embedded usernames
Eric Wong [Wed, 20 Aug 2008 07:30:06 +0000 (00:30 -0700)]
git-svn: fix dcommit to urls with embedded usernames

Don't rely on the extracted URL from working_head_info since that has the
username removed.  Instead use the $gs->full_url method (as before with
ba24e74 (git-svn: add ability to specify --commit-url for dcommit,
2008-08-07)) to give us the URL to commit to if --commit-url is not
specified.

Aditionally, since we clean usernames from URLs, checking the URL after
rebase can fail because it doesn't match the URL we used to commit; so
unconditionally provide a username-free URL for checking the result of the
refetch.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'ml/submodule-foreach'
Junio C Hamano [Thu, 21 Aug 2008 06:42:33 +0000 (23:42 -0700)]
Merge branch 'ml/submodule-foreach'

* ml/submodule-foreach:
  git-submodule - Add 'foreach' subcommand

16 years agoMerge branch 'pm/log-exit-code'
Junio C Hamano [Thu, 21 Aug 2008 06:42:29 +0000 (23:42 -0700)]
Merge branch 'pm/log-exit-code'

* pm/log-exit-code:
  Teach git log --exit-code to return an appropriate exit code
  Teach git log --check to return an appropriate exit code

16 years agoMerge branch 'sb/commit-tree-minileak'
Junio C Hamano [Thu, 21 Aug 2008 06:42:26 +0000 (23:42 -0700)]
Merge branch 'sb/commit-tree-minileak'

* sb/commit-tree-minileak:
  Fix commit_tree() buffer leak

16 years agoMerge branch 'pb/reflog-dwim'
Junio C Hamano [Thu, 21 Aug 2008 06:42:22 +0000 (23:42 -0700)]
Merge branch 'pb/reflog-dwim'

* pb/reflog-dwim:
  builtin-reflog: Allow reflog expire to name partial ref

16 years agoMerge branch 'jc/add-stop-at-symlink'
Junio C Hamano [Thu, 21 Aug 2008 06:42:18 +0000 (23:42 -0700)]
Merge branch 'jc/add-stop-at-symlink'

* jc/add-stop-at-symlink:
  add: refuse to add working tree items beyond symlinks
  update-index: refuse to add working tree items beyond symlinks

16 years agoMerge branch 'kh/diff-tree'
Junio C Hamano [Thu, 21 Aug 2008 06:41:59 +0000 (23:41 -0700)]
Merge branch 'kh/diff-tree'

* kh/diff-tree:
  Add test for diff-tree --stdin with two trees
  Teach git diff-tree --stdin to diff trees
  diff-tree: Note that the commit ID is printed with --stdin
  Refactoring: Split up diff_tree_stdin

16 years agoMerge branch 'mg/count-objects'
Junio C Hamano [Thu, 21 Aug 2008 06:41:54 +0000 (23:41 -0700)]
Merge branch 'mg/count-objects'

* mg/count-objects:
  count-objects: Add total pack size to verbose output

16 years agoMerge branch 'mz/push-verbose'
Junio C Hamano [Thu, 21 Aug 2008 06:41:51 +0000 (23:41 -0700)]
Merge branch 'mz/push-verbose'

* mz/push-verbose:
  Make push more verbose about illegal combination of options

16 years agoMerge branch 'jc/index-extended-flags'
Junio C Hamano [Thu, 21 Aug 2008 06:41:47 +0000 (23:41 -0700)]
Merge branch 'jc/index-extended-flags'

* jc/index-extended-flags:
  index: future proof for "extended" index entries

16 years agoMerge branch 'cc/merge-base-many'
Junio C Hamano [Thu, 21 Aug 2008 06:41:38 +0000 (23:41 -0700)]
Merge branch 'cc/merge-base-many'

* cc/merge-base-many:
  git-merge-octopus: use (merge-base A (merge B C D E...)) for stepwise merge
  merge-base-many: add trivial tests based on the documentation
  documentation: merge-base: explain "git merge-base" with more than 2 args
  merge-base: teach "git merge-base" to drive underlying merge_bases_many()

16 years agoMerge branch 'jc/test-deeper'
Junio C Hamano [Thu, 21 Aug 2008 06:40:59 +0000 (23:40 -0700)]
Merge branch 'jc/test-deeper'

* jc/test-deeper:
  tests: use $TEST_DIRECTORY to refer to the t/ directory

16 years agoMerge branch 'js/parallel-test'
Junio C Hamano [Thu, 21 Aug 2008 06:40:56 +0000 (23:40 -0700)]
Merge branch 'js/parallel-test'

* js/parallel-test:
  Update t/.gitignore to ignore all trash directories
  Enable parallel tests
  tests: Clarify dependencies between tests, 'aggregate-results' and 'clean'
  t9700: remove useless check

16 years agorevision.h: make show_early_output an extern which is defined in revision.c
Brandon Casey [Thu, 21 Aug 2008 00:34:30 +0000 (19:34 -0500)]
revision.h: make show_early_output an extern which is defined in revision.c

The variable show_early_output is defined in revision.c and should be
declared extern in revision.h so that the linker does not complain
about multiply defined variables.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUpdate draft release notes for 1.6.1
Junio C Hamano [Wed, 20 Aug 2008 23:32:15 +0000 (16:32 -0700)]
Update draft release notes for 1.6.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Wed, 20 Aug 2008 23:18:16 +0000 (16:18 -0700)]
Merge branch 'maint'

* maint:
  Update draft release notes for 1.6.0.1
  Add hints to revert documentation about other ways to undo changes
  Install templates with the user and group of the installing personality
  "git-merge": allow fast-forwarding in a stat-dirty tree
  completion: find out supported merge strategies correctly
  decorate: allow const objects to be decorated
  for-each-ref: cope with tags with incomplete lines
  diff --check: do not get confused by new blank lines in the middle
  remote.c: remove useless if-before-free test
  mailinfo: avoid violating strbuf assertion
  git format-patch: avoid underrun when format.headers is empty or all NLs

16 years agoUpdate draft release notes for 1.6.0.1
Junio C Hamano [Wed, 20 Aug 2008 22:19:00 +0000 (15:19 -0700)]
Update draft release notes for 1.6.0.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd hints to revert documentation about other ways to undo changes
Tarmigan Casebolt [Tue, 19 Aug 2008 19:50:31 +0000 (12:50 -0700)]
Add hints to revert documentation about other ways to undo changes

Based on its name, people may read the 'git revert' documentation when
they want to undo local changes, especially people who have used other
SCM's.  'git revert' may not be what they had in mind, but git
provides several other ways to undo changes to files.  We can help
them by pointing them towards the git commands that do what they might
want to do.

Cc: Daniel Barkalow <barkalow@iabervon.org>
Cc: Lea Wiemann <lewiemann@gmail.com>
Signed-off-by: Tarmigan Casebolt <tarmigan+git@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoInstall templates with the user and group of the installing personality
Johannes Sixt [Wed, 20 Aug 2008 15:36:25 +0000 (17:36 +0200)]
Install templates with the user and group of the installing personality

If 'make install' was run with sufficient privileges, then the installed
templates, which are copied using 'tar', would receive the user and group
of whoever built git. This instructs 'tar' to ignore the user and group
that are recorded in the archive.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years ago"git-merge": allow fast-forwarding in a stat-dirty tree
Junio C Hamano [Wed, 20 Aug 2008 22:09:28 +0000 (15:09 -0700)]
"git-merge": allow fast-forwarding in a stat-dirty tree

We used to refresh the index to clear stat-dirtyness before a fast-forward
merge.  Recent C rewrite forgot to do this.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocompletion: find out supported merge strategies correctly
Junio C Hamano [Wed, 20 Aug 2008 21:13:42 +0000 (14:13 -0700)]
completion: find out supported merge strategies correctly

"git-merge" is a binary executable these days, and looking for assignment
to $all_strategies variable with grep/sed does not work well.

When asked for an unknown strategy, pre-1.6.0 and post-1.6.0 "git merge"
commands respectively say:

    $ $HOME/git-snap-v1.5.6.5/bin/git merge -s help
    available strategies are: recur recursive octopus resolve stupid ours subtree
    $ $HOME/git-snap-v1.6.0/bin/git merge -s help
    Could not find merge strategy 'help'.
    Available strategies are: recursive octopus resolve ours subtree.

both on their standard error stream.  We can use this to learn what
strategies are supported.

The sed script is written in such a way that it catches both old and new
message styles ("Available" vs "available", and the full stop at the end).
It also allows future versions of "git merge" to line-wrap the list of
strategies, and add extra comments, like this:

    $ $HOME/git-snap-v1.6.1/bin/git merge -s help
    Could not find merge strategy 'help'.
    Available strategies are: blame recursive octopus resolve ours
    subtree.
    Also you have custom strategies: theirs

    Make sure you spell strategy names correctly.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodecorate: allow const objects to be decorated
Jeff King [Wed, 20 Aug 2008 17:55:33 +0000 (13:55 -0400)]
decorate: allow const objects to be decorated

We don't actually modify the struct object, so there is no
reason not to accept const versions (and this allows other
callsites, like the next patch, to use the decoration
machinery).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agofor-each-ref: cope with tags with incomplete lines
Junio C Hamano [Wed, 20 Aug 2008 19:29:27 +0000 (12:29 -0700)]
for-each-ref: cope with tags with incomplete lines

If you have a tag with a single, incomplete line as its payload, asking
git-for-each-ref for its %(body) element accessed a NULL pointer.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodiff --check: do not get confused by new blank lines in the middle
Junio C Hamano [Wed, 20 Aug 2008 18:47:55 +0000 (11:47 -0700)]
diff --check: do not get confused by new blank lines in the middle

The code remembered that the last diff output it saw was an empty line,
and tried to reset that state whenever it sees a context line, a non-blank
new line, or a new hunk.  However, this codepath asks the underlying diff
engine to feed diff without any context, and the "just saw an empty line"
state was not reset if you added a new blank line in the last hunk of your
patch, even if it is not the last line of the file.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'bd/diff-strbuf'
Junio C Hamano [Wed, 20 Aug 2008 04:43:40 +0000 (21:43 -0700)]
Merge branch 'bd/diff-strbuf'

* bd/diff-strbuf:
  xdiff-interface: hide the whole "xdiff_emit_state" business from the caller
  Use strbuf for struct xdiff_emit_state's remainder
  Make xdi_diff_outf interface for running xdiff_outf diffs

16 years agoMerge branch 'dp/hash-literally'
Junio C Hamano [Wed, 20 Aug 2008 04:43:25 +0000 (21:43 -0700)]
Merge branch 'dp/hash-literally'

* dp/hash-literally:
  add --no-filters option to git hash-object
  add --path option to git hash-object
  use parse_options() in git hash-object
  correct usage help string for git-hash-object
  correct argument checking test for git hash-object
  teach index_fd to work with pipes

16 years agoMerge branch 'js/checkout-dwim-local'
Junio C Hamano [Wed, 20 Aug 2008 04:43:04 +0000 (21:43 -0700)]
Merge branch 'js/checkout-dwim-local'

* js/checkout-dwim-local:
  checkout --track: make up a sensible branch name if '-b' was omitted

16 years agoMerge branch 'ph/enable-threaded'
Junio C Hamano [Wed, 20 Aug 2008 04:43:01 +0000 (21:43 -0700)]
Merge branch 'ph/enable-threaded'

* ph/enable-threaded:
  Enable threaded delta search on *BSD and Linux.

16 years agoMerge branch 'jk/pager-swap'
Junio C Hamano [Wed, 20 Aug 2008 04:42:55 +0000 (21:42 -0700)]
Merge branch 'jk/pager-swap'

* jk/pager-swap:
  spawn pager via run_command interface
  run-command: add pre-exec callback

16 years agoMerge branch 'rs/imap'
Junio C Hamano [Wed, 20 Aug 2008 04:42:46 +0000 (21:42 -0700)]
Merge branch 'rs/imap'

* rs/imap:
  Documentation: Improve documentation for git-imap-send(1)
  imap-send.c: more style fixes
  imap-send.c: style fixes
  git-imap-send: Support SSL
  git-imap-send: Allow the program to be run from subdirectories of a git tree

16 years agoMerge branch 'js/mingw-stat'
Junio C Hamano [Wed, 20 Aug 2008 04:25:48 +0000 (21:25 -0700)]
Merge branch 'js/mingw-stat'

* js/mingw-stat:
  Revert "Windows: Use a customized struct stat that also has the st_blocks member."
  compat: introduce on_disk_bytes()

16 years agoremote.c: remove useless if-before-free test
Jim Meyering [Tue, 19 Aug 2008 18:46:30 +0000 (20:46 +0200)]
remote.c: remove useless if-before-free test

We removed a handful of these useless if-before-free tests several months
ago.  This change removes a new one that snuck back in.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agomailinfo: avoid violating strbuf assertion
Jeff King [Tue, 19 Aug 2008 17:28:24 +0000 (13:28 -0400)]
mailinfo: avoid violating strbuf assertion

In handle_from, we calculate the end boundary of a section
to remove from a strbuf using strcspn like this:

  el = strcspn(buf, set_of_end_boundaries);
  strbuf_remove(&sb, start, el + 1);

This works fine if "el" is the offset of the boundary
character, meaning we remove up to and including that
character. But if the end boundary didn't match (that is, we
hit the end of the string as the boundary instead) then we
want just "el". Asking for "el+1" caught an out-of-bounds
assertion in the strbuf library.

This manifested itself when we got a 'From' header that had
just an email address with nothing else in it (the end of
the string was the end of the address, rather than, e.g., a
trailing '>' character), causing git-mailinfo to barf.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoreword --full-index description
Jim Meyering [Wed, 2 Jul 2008 07:49:59 +0000 (09:49 +0200)]
reword --full-index description

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoSubmittingPatches: fix a typo
Jim Meyering [Tue, 1 Apr 2008 12:53:51 +0000 (14:53 +0200)]
SubmittingPatches: fix a typo

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoadd boolean diff.suppress-blank-empty config option
Jim Meyering [Fri, 15 Aug 2008 11:39:26 +0000 (13:39 +0200)]
add boolean diff.suppress-blank-empty config option

GNU diff's --suppress-blank-empty option makes it so that diff no
longer outputs trailing white space unless the input data has it.
With this option, empty context lines are now empty also in diff -u output.
Before, they would have a single trailing space.

 * diff.c (diff_suppress_blank_empty): New global.
   (git_diff_basic_config): Set it.
   (fn_out_consume): Honor it.
 * t/t4029-diff-trailing-space.sh: New file.
 * Documentation/config.txt: Document it.

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit format-patch: avoid underrun when format.headers is empty or all NLs
Jim Meyering [Tue, 19 Aug 2008 18:42:04 +0000 (20:42 +0200)]
git format-patch: avoid underrun when format.headers is empty or all NLs

* builtin-log.c (add_header): Avoid a buffer underrun when
format.headers is empty or all newlines.  Reproduce with this:
git config format.headers '' && git format-patch -1

Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Tue, 19 Aug 2008 07:40:53 +0000 (00:40 -0700)]
Merge branch 'maint'

* maint:
  t1002-read-tree-m-u-2way.sh: use 'git diff -U0' rather than 'diff -U0'
  adapt git-cvsserver manpage to dash-free syntax
  mailinfo: re-fix MIME multipart boundary parsing

16 years agot1002-read-tree-m-u-2way.sh: use 'git diff -U0' rather than 'diff -U0'
Brandon Casey [Mon, 18 Aug 2008 23:17:53 +0000 (18:17 -0500)]
t1002-read-tree-m-u-2way.sh: use 'git diff -U0' rather than 'diff -U0'

Some old platforms have an old diff which doesn't have the -U option.
'git diff' can be used in its place. Adjust the comparison function to
strip git's additional header lines to make this possible.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUpdate t/.gitignore to ignore all trash directories
Marcus Griep [Mon, 18 Aug 2008 16:25:40 +0000 (12:25 -0400)]
Update t/.gitignore to ignore all trash directories

The current .gitignore only ignores the old "trash directory" and
not the new "trash directory.[test]".  This ignores both forms.

Signed-off-by: Marcus Griep <marcus@griep.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoRevert "Windows: Use a customized struct stat that also has the st_blocks member."
Johannes Sixt [Mon, 18 Aug 2008 20:01:06 +0000 (22:01 +0200)]
Revert "Windows: Use a customized struct stat that also has the st_blocks member."

This reverts commit fc2ded5b08e071beed974117c0148781b1acc94a.

As we do not need the member in struct stat, we do not need to have a
custom "struct mingw_stat" anymore.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocompat: introduce on_disk_bytes()
Junio C Hamano [Mon, 18 Aug 2008 19:57:16 +0000 (21:57 +0200)]
compat: introduce on_disk_bytes()

Some platforms do not have st_blocks member in "struct stat"; mingw
already emulates it by rounding it up to closest 512-byte blocks (even
though it could overcount when a file has holes).

The reason to use the member is only to figure out how many kilobytes the
files occupy on-disk, so give a helper function in git-compat-util.h to
compute this value.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
16 years agoadapt git-cvsserver manpage to dash-free syntax
Robert Schiele [Mon, 18 Aug 2008 14:17:04 +0000 (16:17 +0200)]
adapt git-cvsserver manpage to dash-free syntax

Signed-off-by: Robert Schiele <rschiele@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agomailinfo: re-fix MIME multipart boundary parsing
Don Zickus [Thu, 14 Aug 2008 15:35:42 +0000 (11:35 -0400)]
mailinfo: re-fix MIME multipart boundary parsing

Recent changes to is_multipart_boundary() caused git-mailinfo to segfault.
The reason was after handling the end of the boundary the code tried to look
for another boundary.  Because the boundary list was empty, dereferencing
the pointer to the top of the boundary caused the program to go boom.

The fix is to check to see if the list is empty and if so go on its merry
way instead of looking for another boundary.

I also fixed a couple of increments and decrements that didn't look correct
relating to content_top.

The boundary test case was updated to catch future problems like this again.

Signed-off-by: Don Zickus <dzickus@redhat.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-submodule - Add 'foreach' subcommand
Mark Levedahl [Sun, 10 Aug 2008 23:10:04 +0000 (19:10 -0400)]
git-submodule - Add 'foreach' subcommand

submodule foreach <command-list> will execute the list of commands in
each currently checked out submodule directory. The list of commands
is arbitrary as long as it is acceptable to sh. The variables '$path'
and '$sha1' are availble to the command-list, defining the submodule
path relative to the superproject and the submodules's commitID as
recorded in the superproject (this may be different than HEAD in the
submodule).

This utility is inspired by a number of threads on the mailing list
looking for ways to better integrate submodules in a tree and work
with them as a unit. This could include fetching a new branch in each
from a given source, or possibly checking out a given named branch in
each. Currently, there is no consensus as to what additional commands
should be implemented in the porcelain, requiring all users whose needs
exceed that of git-submodule to do their own scripting. The foreach
command is intended to support such scripting, and in particular does
no error checking and produces no output, thus allowing end users
complete control over any information printed out and over what
constitutes an error. The processing does terminate if the command-list
returns an error, but processing can easily be forced for all
submodules be terminating the list with ';true'.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoFix commit_tree() buffer leak
Stephan Beyer [Mon, 11 Aug 2008 22:35:11 +0000 (00:35 +0200)]
Fix commit_tree() buffer leak

The commit_tree() strbuf has a minimum size of 8k and it has not been
released yet.  This patch releases the buffer.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTeach git log --exit-code to return an appropriate exit code
Peter Valdemar Mørch [Mon, 11 Aug 2008 06:46:25 +0000 (08:46 +0200)]
Teach git log --exit-code to return an appropriate exit code

Signed-off-by: Peter Valdemar Mørch <peter@morch.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTeach git log --check to return an appropriate exit code
Peter Valdemar Mørch [Mon, 11 Aug 2008 06:46:24 +0000 (08:46 +0200)]
Teach git log --check to return an appropriate exit code

Signed-off-by: Peter Valdemar Mørch <peter@morch.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobuiltin-reflog: Allow reflog expire to name partial ref
Pieter de Bie [Sun, 10 Aug 2008 20:22:21 +0000 (22:22 +0200)]
builtin-reflog: Allow reflog expire to name partial ref

This allows you to specify 'git reflog expire master' without needing
to give the full refname like 'git reflog expire refs/heads/master'

Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoStart 1.6.1 cycle
Junio C Hamano [Sun, 17 Aug 2008 22:48:51 +0000 (15:48 -0700)]
Start 1.6.1 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoStart 1.6.0.X maintenance series
Junio C Hamano [Sun, 17 Aug 2008 22:44:11 +0000 (15:44 -0700)]
Start 1.6.0.X maintenance series

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT 1.6.0 v1.6.0
Junio C Hamano [Sun, 17 Aug 2008 18:42:10 +0000 (11:42 -0700)]
GIT 1.6.0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge git-gui 0.11.0
Junio C Hamano [Sun, 17 Aug 2008 18:40:56 +0000 (11:40 -0700)]
Merge git-gui 0.11.0

16 years agoMerge branch 'ak/p4'
Junio C Hamano [Sun, 17 Aug 2008 17:53:57 +0000 (10:53 -0700)]
Merge branch 'ak/p4'

* ak/p4:
  Utilise our new p4_read_pipe and p4_write_pipe wrappers
  Add p4 read_pipe and write_pipe wrappers
  Put in the two other configuration elements found in the source
  Put some documentation in about the parameters that have been added
  Move git-p4.syncFromOrigin into a configuration parameters section
  Consistently use 'git-p4' for the configuration entries
  If the user has configured various parameters, use them.
  Switch to using 'p4_build_cmd'
  If we are in verbose mode, output what we are about to run (or return)
  Add a single command that will be used to construct the 'p4' command
  Utilise the new 'p4_system' function.
  Have a command that specifically invokes 'p4' (via system)
  Utilise the new 'p4_read_pipe_lines' command
  Create a specific version of the read_pipe_lines command for p4 invocations

Conflicts:
contrib/fast-import/git-p4

16 years agocount-objects: Add total pack size to verbose output
Marcus Griep [Fri, 15 Aug 2008 04:20:20 +0000 (00:20 -0400)]
count-objects: Add total pack size to verbose output

Adds the total pack size (including indexes) the verbose count-objects
output, floored to the nearest kilobyte.

Updates documentation to match this addition.

Signed-off-by: Marcus Griep <marcus@griep.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agotests: use $TEST_DIRECTORY to refer to the t/ directory
Junio C Hamano [Fri, 8 Aug 2008 09:26:28 +0000 (02:26 -0700)]
tests: use $TEST_DIRECTORY to refer to the t/ directory

Many test scripts assumed that they will start in a 'trash' subdirectory
that is a single level down from the t/ directory, and referred to their
test vector files by asking for files like "../t9999/expect".  This will
break if we move the 'trash' subdirectory elsewhere.

To solve this, we earlier introduced "$TEST_DIRECTORY" so that they can
refer to t/ directory reliably.  This finally makes all the tests use
it to refer to the outside environment.

With this patch, and a one-liner not included here (because it would
contradict with what Dscho really wants to do):

| diff --git a/t/test-lib.sh b/t/test-lib.sh
| index 70ea7e0..60e69e4 100644
| --- a/t/test-lib.sh
| +++ b/t/test-lib.sh
| @@ -485,7 +485,7 @@ fi
|  . ../GIT-BUILD-OPTIONS
|
|  # Test repository
| -test="trash directory"
| +test="trash directory/another level/yet another"
|  rm -fr "$test" || {
|         trap - exit
|         echo >&5 "FATAL: Cannot prepare test area"

all the tests still pass, but we would want extra sets of eyeballs on this
type of change to really make sure.

[jc: with help from Stephan Beyer on http-push tests I do not run myself;
 credits for locating silly quoting errors go to Olivier Marin.]

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake push more verbose about illegal combination of options
Marek Zawirski [Sat, 16 Aug 2008 17:58:32 +0000 (19:58 +0200)]
Make push more verbose about illegal combination of options

It may be unclear that --all, --mirror, --tags and/or explicit refspecs
are illegal combinations for git push.

Git was silently failing in these cases, while we can complaint more
properly about it.

Signed-off-by: Marek Zawirski <marek.zawirski@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoindex: future proof for "extended" index entries
Junio C Hamano [Sun, 17 Aug 2008 06:02:08 +0000 (23:02 -0700)]
index: future proof for "extended" index entries

We do not have any more bits in the on-disk index flags word, but we would
need to have more in the future.  Use the last remaining bits as a signal
to tell us that the index entry we are looking at is an extended one.

Since we do not understand the extended format yet, we will just error out
when we see it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-p4: chdir now properly sets PWD environment variable in msysGit
Robert Blum [Fri, 1 Aug 2008 19:50:03 +0000 (12:50 -0700)]
git-p4: chdir now properly sets PWD environment variable in msysGit

P4 on Windows expects the PWD environment variable to be set to the
current working dir, but os.chdir in python doesn't do so.

Signed-off-by: Robert Blum <rob.blum@gmail.com>
Acked-by: Simon Hausmann <simon@lst.de>
Acked-by: Han-Wen Nienhuys <hanwen@xs4all.nl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoImprove error output of git-rebase
Stephan Beyer [Sun, 17 Aug 2008 04:25:43 +0000 (06:25 +0200)]
Improve error output of git-rebase

"git rebase" without arguments on initial startup showed:

fatal: Needed a single revision
invalid upstream

This patch makes it show the ordinary usage string.

If .git/rebase-merge or .git/rebase-apply/rebasing exists, git-rebase
will die with a message saying that a rebase is in progress and the user
should try --skip/--abort/--continue.

If .git/rebase-apply/applying exists, git-rebase will die with a message
saying that git-am is in progress, regardless how many arguments are
given.

If no arguments are given and .git/rebase-apply/ exists, but neither a
rebasing nor applying file is in that directory, git-rebase dies with a
message saying that rebase-apply exists and no arguments were given.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot9300: replace '!' with test_must_fail
Miklos Vajna [Sat, 16 Aug 2008 15:17:42 +0000 (17:17 +0200)]
t9300: replace '!' with test_must_fail

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge git://git.kernel.org/pub/scm/gitk/gitk
Junio C Hamano [Sun, 17 Aug 2008 06:21:07 +0000 (23:21 -0700)]
Merge git://git.kernel.org/pub/scm/gitk/gitk

* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Allow safely calling nukefile from a run queue handler

16 years agoGit.pm: Make File::Spec and File::Temp requirement lazy
Marcus Griep [Fri, 15 Aug 2008 19:53:59 +0000 (15:53 -0400)]
Git.pm: Make File::Spec and File::Temp requirement lazy

This will ensure that the API at large is accessible to nearly
all Perl versions, while only the temp file caching API is tied to
the File::Temp and File::Spec modules being available.

Signed-off-by: Marcus Griep <marcus@griep.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: document the pager.* configuration setting
Miklos Vajna [Sat, 16 Aug 2008 02:14:33 +0000 (04:14 +0200)]
Documentation: document the pager.* configuration setting

It was already documented in RelNotes-1.6.0, but not in the git-config
manual page.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-stash: improve synopsis in help and manual page
Stephan Beyer [Sat, 16 Aug 2008 03:27:31 +0000 (05:27 +0200)]
git-stash: improve synopsis in help and manual page

"git stash -h" showed some incomplete and ugly usage information.
For example, the useful "--keep-index" option for "save" or the "--index"
option for  "apply" were not shown. Also in the documentation synopsis they
were not shown, so that there is no incentive to scroll down and even see
that such options exist.

This patch improves the git-stash synopsis in the documentation by
mentioning that further options to the stash commands and then copies
this synopsis to the usage information string of git-stash.sh.

For the latter, the dashless git command string has to be inserted on the
second and the following usage lines. The code of this is taken from
git-sh-setup so that all lines will show the command string.

Note that the "create" command is not advertised at all now, because
it was not mentioned in git-stash.txt.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMakefile: building git in cygwin 1.7.0
Eric Blake [Fri, 15 Aug 2008 15:01:03 +0000 (15:01 +0000)]
Makefile: building git in cygwin 1.7.0

On platforms with $X, make removes any leftover scripts 'a' from
earlier builds if a new binary 'a.exe' is now built.  However, on
cygwin 1.7.0, 'git' and 'git.exe' now consistently name the same file.
Test for file equality before attempting a remove, in order to avoid
nuking just-built binaries.

Signed-off-by: Eric Blake <ebb9@byu.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-am: ignore --binary option
Stephan Beyer [Fri, 8 Aug 2008 23:28:54 +0000 (01:28 +0200)]
git-am: ignore --binary option

The git-apply documentation says that --binary is a historical option.
This patch lets git-am ignore --binary and removes advertisements of this
option.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobash-completion: Add non-command git help files to bash-completion
Marcus Griep [Fri, 15 Aug 2008 17:59:28 +0000 (13:59 -0400)]
bash-completion: Add non-command git help files to bash-completion

Git allows access to the gitattributes man page via `git help attributes`,
but this is not discoverable via the bash-completion mechanism.  This
patch adds all current non-command man pages to the completion candidate
list.

Signed-off-by: Marcus Griep <marcus@griep.us>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoFix t3700 on filesystems which do not support question marks in names
Alex Riesen [Fri, 15 Aug 2008 07:32:30 +0000 (09:32 +0200)]
Fix t3700 on filesystems which do not support question marks in names

Use square brackets instead.

And the prominent example of the deficiency are, as usual, the filesystems
of Microsoft house.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUtilise our new p4_read_pipe and p4_write_pipe wrappers
Anand Kumria [Thu, 14 Aug 2008 22:40:39 +0000 (23:40 +0100)]
Utilise our new p4_read_pipe and p4_write_pipe wrappers

Signed-off-by: Anand Kumria <wildfire@progsoc.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd p4 read_pipe and write_pipe wrappers
Anand Kumria [Thu, 14 Aug 2008 22:40:38 +0000 (23:40 +0100)]
Add p4 read_pipe and write_pipe wrappers

Two additional wrappers to cover 3 places where we utilise p4 in piped
form.  Found by Tor Arvid Lund.

Signed-off-by: Anand Kumria <wildfire@progsoc.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobash completion: Add '--merge' long option for 'git log'
Lee Marlow [Thu, 14 Aug 2008 22:41:11 +0000 (16:41 -0600)]
bash completion: Add '--merge' long option for 'git log'

Signed-off-by: Lee Marlow <lee.marlow@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobash completion: Add completion for 'git mergetool'
Lee Marlow [Thu, 14 Aug 2008 22:41:10 +0000 (16:41 -0600)]
bash completion: Add completion for 'git mergetool'

The --tool= long option to "git mergetool" can be completed with:

kdiff3 tkdiff meld xxdiff emerge
vimdiff gvimdiff ecmerge opendiff

Signed-off-by: Lee Marlow <lee.marlow@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit format-patch documentation: clarify what --cover-letter does
Matt McCutchen [Thu, 14 Aug 2008 17:37:41 +0000 (13:37 -0400)]
git format-patch documentation: clarify what --cover-letter does

Signed-off-by: Matt McCutchen <matt@mattmccutchen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobash completion: 'git apply' should use 'fix' not 'strip'
Eric Raible [Thu, 14 Aug 2008 17:12:54 +0000 (10:12 -0700)]
bash completion: 'git apply' should use 'fix' not 'strip'

Bring completion up to date with the man page.

Signed-off-by: Eric Raible <raible@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoxdiff-interface: hide the whole "xdiff_emit_state" business from the caller
Junio C Hamano [Thu, 14 Aug 2008 06:18:22 +0000 (23:18 -0700)]
xdiff-interface: hide the whole "xdiff_emit_state" business from the caller

This further enhances xdi_diff_outf() interface so that it takes two
common parameters: the callback function that processes one line at a
time, and a pointer to its application specific callback data structure.
xdi_diff_outf() creates its own "xdiff_emit_state" structure and stashes
these two away inside it, which is used by the lowest level output
function in the xdiff_outf() callchain, consume_one(), to call back to the
application layer.  With this restructuring, we lift the requirement that
the caller supplied callback data structure embeds xdiff_emit_state
structure as its first member.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUse strbuf for struct xdiff_emit_state's remainder
Brian Downing [Thu, 14 Aug 2008 05:36:51 +0000 (00:36 -0500)]
Use strbuf for struct xdiff_emit_state's remainder

Continually xreallocing and freeing the remainder member of struct
xdiff_emit_state was a noticeable performance hit.  Use a strbuf
instead.

This yields a decent performance improvement on "git blame" on certain
repositories.  For example, before this commit:

$ time git blame -M -C -C -p --incremental server.c >/dev/null
101.52user 0.17system 1:41.73elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+39561minor)pagefaults 0swaps

With this commit:

$ time git blame -M -C -C -p --incremental server.c >/dev/null
80.38user 0.30system 1:20.81elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+50979minor)pagefaults 0swaps

Signed-off-by: Brian Downing <bdowning@lavos.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake xdi_diff_outf interface for running xdiff_outf diffs
Brian Downing [Thu, 14 Aug 2008 05:36:50 +0000 (00:36 -0500)]
Make xdi_diff_outf interface for running xdiff_outf diffs

To prepare for the need to initialize and release resources for an
xdi_diff with the xdiff_outf output function, make a new function to
wrap this usage.

Old:

ecb.outf = xdiff_outf;
ecb.priv = &state;
...
xdi_diff(file_p, file_o, &xpp, &xecfg, &ecb);

New:

xdi_diff_outf(file_p, file_o, &state.xm, &xpp, &xecfg, &ecb);

Signed-off-by: Brian Downing <bdowning@lavos.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Thu, 14 Aug 2008 02:22:29 +0000 (19:22 -0700)]
Merge branch 'maint'

* maint:
  t5304-prune: adjust file mtime based on system time rather than file mtime
  Fix escaping of glob special characters in pathspecs

16 years agot5304-prune: adjust file mtime based on system time rather than file mtime
Brandon Casey [Thu, 14 Aug 2008 00:49:30 +0000 (19:49 -0500)]
t5304-prune: adjust file mtime based on system time rather than file mtime

test-chmtime can adjust the mtime of a file based on the file's mtime, or
based on the system time. For files accessed over NFS, the file's mtime is
set by the NFS server, and as such may vary a great deal from the NFS
client's system time if the clocks of the client and server are out of
sync. Since these tests are testing the expire feature of git-prune, an
incorrect mtime could cause a file to be expired or not expired incorrectly
and produce a test failure.

Avoid this NFS pitfall by modifying the calls to test-chmtime so that the
mtime is adjusted based on the system time, rather than the file's mtime.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agotest-parse-options: use appropriate cast in length_callback
Brandon Casey [Thu, 14 Aug 2008 00:48:57 +0000 (19:48 -0500)]
test-parse-options: use appropriate cast in length_callback

OPT_CALLBACK() is passed &integer which is now an "int" rather than
"unsigned long". Update the length_callback function.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoFix escaping of glob special characters in pathspecs
Kevin Ballard [Wed, 13 Aug 2008 22:34:34 +0000 (15:34 -0700)]
Fix escaping of glob special characters in pathspecs

match_one implements an optimized pathspec match where it only uses
fnmatch if it detects glob special characters in the pattern. Unfortunately
it didn't treat \ as a special character, so attempts to escape a glob
special character would fail even though fnmatch() supports it.

Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agorebase -i -p: fix parent rewriting
Thomas Rast [Wed, 13 Aug 2008 21:41:24 +0000 (23:41 +0200)]
rebase -i -p: fix parent rewriting

The existing parent rewriting did not handle the case where a previous
commit was amended (via edit or squash).  Fix by always putting the
new sha1 of the last commit into the $REWRITTEN map.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
16 years agorebase -i -p: handle index and workdir correctly
Thomas Rast [Wed, 13 Aug 2008 21:41:23 +0000 (23:41 +0200)]
rebase -i -p: handle index and workdir correctly

'git rebase -i -p' forgot to update the index and working directory
during fast forwards.  Fix this.  Makes 'GIT_EDITOR=true rebase -i -p
<ancestor>' a no-op again.

Also, it attempted to do a fast forward even if it was instructed not
to commit (via -n).  Fall back to the cherry-pick code path and let
that handle the issue for us.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
16 years agoGIT 1.6.0-rc3 v1.6.0-rc3
Junio C Hamano [Wed, 13 Aug 2008 04:42:22 +0000 (21:42 -0700)]
GIT 1.6.0-rc3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Wed, 13 Aug 2008 05:46:22 +0000 (22:46 -0700)]
Merge branch 'maint'

* maint:
  Do not talk about "diff" in rev-list documentation.

16 years agoDo not talk about "diff" in rev-list documentation.
Junio C Hamano [Mon, 11 Aug 2008 18:46:56 +0000 (11:46 -0700)]
Do not talk about "diff" in rev-list documentation.

Since 8c02eee (git-rev-list(1): group options; reformat; document more
options, 2006-09-01), git-rev-list documentation talks as if it supports
any kind of diff output.  It doesn't.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge git://git.bogomips.org/git-svn
Junio C Hamano [Wed, 13 Aug 2008 04:41:29 +0000 (21:41 -0700)]
Merge git://git.bogomips.org/git-svn

* git://git.bogomips.org/git-svn:
  git-svn: Reduce temp file usage when dealing with non-links
  git-svn: Make it incrementally faster by minimizing temp files
  Git.pm: Add faculties to allow temp files to be cached

16 years agogit-svn: Reduce temp file usage when dealing with non-links
Marcus Griep [Tue, 12 Aug 2008 16:45:39 +0000 (12:45 -0400)]
git-svn: Reduce temp file usage when dealing with non-links

Currently, in sub 'close_file', git-svn creates a temporary file and
copies the contents of the blob to be written into it. This is useful
for symlinks because svn stores symlinks in the form:

link $FILE_PATH

Git creates a blob only out of '$FILE_PATH' and uses file mode to
indicate that the blob should be interpreted as a symlink.

As git-hash-object is invoked with --stdin-paths, a duplicate of the
link from svn must be created that leaves off the first five bytes,
i.e. 'link '. However, this is wholly unnecessary for normal blobs,
though, as we already have a temp file with their contents. Copying
the entire file gains nothing, and effectively requires a file to be
written twice before making it into the object db.

This patch corrects that issue, holding onto the substr-like
duplication for symlinks, but skipping it altogether for normal blobs
by reusing the existing temp file.

Signed-off-by: Marcus Griep <marcus@griep.us>
Acked-by: Eric Wong <normalperson@yhbt.net>
16 years agogit-svn: Make it incrementally faster by minimizing temp files
Marcus Griep [Tue, 12 Aug 2008 16:00:53 +0000 (12:00 -0400)]
git-svn: Make it incrementally faster by minimizing temp files

Currently, git-svn would create a temp file on four occasions:
1. Reading a blob out of the object db
2. Creating a delta from svn
3. Hashing and writing a blob into the object db
4. Reading a blob out of the object db (in another place in code)

Any time git-svn did the above, it would dutifully create and then
delete said temp file.  Unfortunately, this means that between 2-4
temporary files are created/deleted per file 'add/modify'-ed in
svn (O(n)).  This causes significant overhead and helps the inode
counter to spin beautifully.

By its nature, git-svn is a serial beast.  Thus, reusing a temp file
does not pose significant problems.  "truncate and seek" takes much
less time than "unlink and create".  This patch centralizes the
tempfile creation and holds onto the tempfile until they are deleted
on exit.  This significantly reduces file overhead, now requiring
at most three (3) temp files per run (O(1)).

Signed-off-by: Marcus Griep <marcus@griep.us>
Acked-by: Eric Wong <normalperson@yhbt.net>
16 years agoGit.pm: Add faculties to allow temp files to be cached
Marcus Griep [Tue, 12 Aug 2008 16:00:18 +0000 (12:00 -0400)]
Git.pm: Add faculties to allow temp files to be cached

This patch offers a generic interface to allow temp files to be
cached while using an instance of the 'Git' package. If many
temp files are created and destroyed during the execution of a
program, this caching mechanism can help reduce the amount of
files created and destroyed by the filesystem.

The temp_acquire method provides a weak guarantee that a temp
file will not be stolen by subsequent requests. If a file is
locked when another acquire request is made, a simple error is
thrown.

Signed-off-by: Marcus Griep <marcus@griep.us>
Acked-by: Eric Wong <normalperson@yhbt.net>
16 years agoDocumentation: rev-list-options: Rewrite simplification descriptions for clarity
Thomas Rast [Mon, 11 Aug 2008 23:55:36 +0000 (01:55 +0200)]
Documentation: rev-list-options: Rewrite simplification descriptions for clarity

This completely rewrites the documentation of --full-history with lots
of examples.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>