Code

git.git
13 years agot6022: New test checking for unnecessary updates of files in D/F conflicts
Elijah Newren [Tue, 1 Mar 2011 01:08:51 +0000 (18:08 -0700)]
t6022: New test checking for unnecessary updates of files in D/F conflicts

Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot6022: New test checking for unnecessary updates of renamed+modified files
Elijah Newren [Tue, 1 Mar 2011 01:08:50 +0000 (18:08 -0700)]
t6022: New test checking for unnecessary updates of renamed+modified files

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agosha1_file.c: Don't retain open fds on small packs
Shawn O. Pearce [Wed, 2 Mar 2011 18:01:54 +0000 (10:01 -0800)]
sha1_file.c: Don't retain open fds on small packs

If a pack file is small enough that its entire contents fits within
one mmap window, mmap the file and then immediately close its file
descriptor.  This reduces the number of file descriptors that are
needed to read from repositories with many tiny pack files, such
as one that has received 1000 pushes (and created 1000 small pack
files) since its last repack.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomingw: add minimum getrlimit() compatibility stub
Erik Faye-Lund [Mon, 28 Feb 2011 21:13:22 +0000 (22:13 +0100)]
mingw: add minimum getrlimit() compatibility stub

We don't have getrlimit on Windows :( Limit of 2048 taken from MSDN:

  http://msdn.microsoft.com/en-us/library/6e3b887c(v=vs.71).aspx

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
13 years agoverify-pack: add --stat-only to the synopsis section
Junio C Hamano [Tue, 1 Mar 2011 19:26:22 +0000 (11:26 -0800)]
verify-pack: add --stat-only to the synopsis section

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoSkip commit objects that should be trees, rather than copying them.
Avery Pennarun [Tue, 1 Mar 2011 04:48:50 +0000 (20:48 -0800)]
Skip commit objects that should be trees, rather than copying them.

An improvement on the previous patch, based on more reports from Sum-Wai
Low.

13 years agoIt's also okay if an expected tree object is actually a commit.
Avery Pennarun [Tue, 1 Mar 2011 00:49:42 +0000 (16:49 -0800)]
It's also okay if an expected tree object is actually a commit.

...that happens with submodules sometimes, so don't panic.

Reported by Sum-Wai Low.

13 years agoMerge branch 'svn-fe' of git://repo.or.cz/git/jrn
Junio C Hamano [Tue, 1 Mar 2011 00:33:45 +0000 (16:33 -0800)]
Merge branch 'svn-fe' of git://repo.or.cz/git/jrn

* 'svn-fe' of git://repo.or.cz/git/jrn: (31 commits)
  fast-import: make code "-Wpointer-arith" clean
  vcs-svn: teach line_buffer about temporary files
  vcs-svn: allow input from file descriptor
  vcs-svn: allow character-oriented input
  vcs-svn: add binary-safe read function
  t0081 (line-buffer): add buffering tests
  vcs-svn: tweak test-line-buffer to not assume line-oriented input
  tests: give vcs-svn/line_buffer its own test script
  vcs-svn: make test-line-buffer input format more flexible
  vcs-svn: teach line_buffer to handle multiple input files
  vcs-svn: collect line_buffer data in a struct
  vcs-svn: replace buffer_read_string memory pool with a strbuf
  vcs-svn: eliminate global byte_buffer
  fast-import: add 'ls' command
  vcs-svn: Allow change nodes for root of tree (/)
  vcs-svn: Implement Prop-delta handling
  vcs-svn: Sharpen parsing of property lines
  vcs-svn: Split off function for handling of individual properties
  vcs-svn: Make source easier to read on small screens
  vcs-svn: More dump format sanity checks
  ...

13 years agofast-import: make code "-Wpointer-arith" clean
Jonathan Nieder [Mon, 28 Feb 2011 21:16:59 +0000 (15:16 -0600)]
fast-import: make code "-Wpointer-arith" clean

The dereference() function to peel a tree-ish and find the underlying
tree expects arithmetic to (void *) to work on byte addresses.  We
should be reading the text of objects through a char * anyway.

Noticed-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agoLimit file descriptors used by packs
Shawn O. Pearce [Mon, 28 Feb 2011 20:52:39 +0000 (12:52 -0800)]
Limit file descriptors used by packs

Rather than using 'errno == EMFILE' after a failed open() call
to indicate the process is out of file descriptors and an LRU
pack window should be closed, place a hard upper limit on the
number of open packs based on the actual rlimit of the process.

By using a hard upper limit that is below the rlimit of the current
process it is not necessary to check for EMFILE on every single
fd-allocating system call.  Instead reserving 25 file descriptors
makes it safe to assume the system call won't fail due to being over
the filedescriptor limit.  Here 25 is chosen as a WAG, but considers
3 for stdin/stdout/stderr, and at least a few for other Git code
to operate on temporary files.  An additional 20 is reserved as it
is not known what the C library needs to perform other services on
Git's behalf, such as nsswitch or name resolution.

This fixes a case where running `git gc --auto` in a repository
with more than 1024 packs (but an rlimit of 1024 open fds) fails
due to the temporary output file not being able to allocate a
file descriptor.  The output file is opened by pack-objects after
object enumeration and delta compression are done, both of which
have already opened all of the packs and fully populated the file
descriptor table.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomergetool--lib: Add Beyond Compare 3 as a tool
Sebastian Schuberth [Sun, 27 Feb 2011 11:32:46 +0000 (12:32 +0100)]
mergetool--lib: Add Beyond Compare 3 as a tool

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomergetool--lib: Sort tools alphabetically for easier lookup
Sebastian Schuberth [Sun, 27 Feb 2011 11:31:37 +0000 (12:31 +0100)]
mergetool--lib: Sort tools alphabetically for easier lookup

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Tested-by: Chris Packham <judge.packham@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoStart preparing release notes to 1.7.5
Junio C Hamano [Mon, 28 Feb 2011 20:28:20 +0000 (12:28 -0800)]
Start preparing release notes to 1.7.5

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoindex-pack --verify: read anomalous offsets from v2 idx file
Junio C Hamano [Sat, 26 Feb 2011 00:55:26 +0000 (16:55 -0800)]
index-pack --verify: read anomalous offsets from v2 idx file

A pack v2 .idx file usually records offset using 64-bit representation
only when the offset does not fit within 31-bit, but you can handcraft
your .idx file to record smaller offset using 64-bit, storing all zero
in the upper 4-byte.  By inspecting the original idx file when running
index-pack --verify, encode such low offsets that do not need to be in
64-bit but are encoded using 64-bit just like the original idx file so
that we can still validate the pack/idx pair by comparing the idx file
recomputed with the original.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agowrite_idx_file: need_large_offset() helper function
Junio C Hamano [Sat, 26 Feb 2011 00:54:00 +0000 (16:54 -0800)]
write_idx_file: need_large_offset() helper function

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoindex-pack: --verify
Junio C Hamano [Thu, 3 Feb 2011 01:29:01 +0000 (17:29 -0800)]
index-pack: --verify

Given an existing .pack file and the .idx file that describes it,
this new mode of operation reads and re-index the packfile and makes
sure the existing .idx file matches the result byte-for-byte.

All the objects in the .pack file are validated during this operation as
well.  Unlike verify-pack, which visits each object described in the .idx
file in the SHA-1 order, index-pack efficiently exploits the delta-chain
to avoid rebuilding the objects that are used as the base of deltified
objects over and over again while validating the objects, resulting in
much quicker verification of the .pack file and its .idx file.

This version however cannot verify a .pack/.idx pair with a handcrafted v2
index that uses 64-bit offset representation for offsets that would fit
within 31-bit. You can create such an .idx file by giving a custom offset
to --index-version option to the command.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agowrite_idx_file: introduce a struct to hold idx customization options
Junio C Hamano [Fri, 25 Feb 2011 23:43:25 +0000 (15:43 -0800)]
write_idx_file: introduce a struct to hold idx customization options

Remove two globals, pack_idx_default version and pack_idx_off32_limit,
and place them in a pack_idx_option structure.  Allow callers to pass
it to write_idx_file() as a parameter.

Adjust all callers to the API change.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoindex-pack: group the delta-base array entries also by type
Junio C Hamano [Wed, 2 Feb 2011 18:06:51 +0000 (10:06 -0800)]
index-pack: group the delta-base array entries also by type

Entries in the delta_base array are only grouped by the bytepattern in
the delta_base union, some of which have 20-byte object name of the base
object (i.e. base for REF_DELTA objects), while others have sizeof(off_t)
bytes followed by enough NULs to fill 20-byte.  The loops to iterate
through a range inside this array still needs to inspect the type of the
delta, and skip over false hits.

Group the entries also by type to eliminate the potential of false hits.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-instaweb: Change how gitweb.psgi is made runnable as standalone app
Jakub Narebski [Sat, 26 Feb 2011 22:32:33 +0000 (23:32 +0100)]
git-instaweb: Change how gitweb.psgi is made runnable as standalone app

According to blog post "FindBin, __FILE__, $0 and PSGI woes"

  http://bulknews.typepad.com/blog/2011/02/findbin-__file__-0-and-psgi-woes.html

by Tatsuhiko Miyagawa, using 'if (__FILE__ eq $0)' in .psgi code
(to check if script was run from command line), is not supposed to work
since Plack 0.9971.

Replace it with one of proposed solutions; while at it return $app
explicitely, rather than implicitely by being a last expression.

This affects 'plackup' web server.

While at it cleanup whitespace.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jh/push-default-upstream-configname'
Junio C Hamano [Mon, 28 Feb 2011 05:58:31 +0000 (21:58 -0800)]
Merge branch 'jh/push-default-upstream-configname'

* jh/push-default-upstream-configname:
  push.default: Rename 'tracking' to 'upstream'

13 years agoMerge branch 'lp/config-vername-check'
Junio C Hamano [Mon, 28 Feb 2011 05:58:31 +0000 (21:58 -0800)]
Merge branch 'lp/config-vername-check'

* lp/config-vername-check:
  Disallow empty section and variable names
  Sanity-check config variable names

13 years agoMerge branch 'mg/placeholders-are-lowercase'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'mg/placeholders-are-lowercase'

* mg/placeholders-are-lowercase:
  Make <identifier> lowercase in Documentation
  Make <identifier> lowercase as per CodingGuidelines
  Make <identifier> lowercase as per CodingGuidelines
  Make <identifier> lowercase as per CodingGuidelines
  CodingGuidelines: downcase placeholders in usage messages

13 years agoMerge branch 'mg/patch-id'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'mg/patch-id'

* mg/patch-id:
  git-patch-id: do not trip over "no newline" markers
  git-patch-id: test for "no newline" markers

13 years agoMerge branch 'mz/rerere-remaining'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'mz/rerere-remaining'

* mz/rerere-remaining:
  mergetool: don't skip modify/remove conflicts
  rerere "remaining"

13 years agoMerge branch 'nd/sorted-builtin-command-list'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'nd/sorted-builtin-command-list'

* nd/sorted-builtin-command-list:
  git.c: reorder builtin command list

13 years agoMerge branch 'js/maint-merge-use-prepare-commit-msg-hook'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'js/maint-merge-use-prepare-commit-msg-hook'

* js/maint-merge-use-prepare-commit-msg-hook:
  merge: honor prepare-commit-msg hook

13 years agoMerge branch 'nd/hash-object-sanity'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'nd/hash-object-sanity'

* nd/hash-object-sanity:
  Make hash-object more robust against malformed objects

Conflicts:
cache.h

13 years agoMerge branch 'js/detach-doc'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'js/detach-doc'

* js/detach-doc:
  git-checkout.txt: improve detached HEAD documentation

13 years agoMerge branch 'va/p4'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'va/p4'

* va/p4:
  git-p4: Add copy detection support
  git-p4: Improve rename detection support

13 years agoMerge branch 'pw/p4'
Junio C Hamano [Mon, 28 Feb 2011 05:58:30 +0000 (21:58 -0800)]
Merge branch 'pw/p4'

* pw/p4:
  git-p4: support clone --bare
  git-p4: decode p4 wildcard characters
  git-p4: better message for "git-p4 sync" when not cloned
  git-p4: reinterpret confusing p4 message
  git-p4: accommodate new move/delete type in p4
  git-p4: add missing newline in initial import message
  git-p4: fix key error for p4 problem
  git-p4: test script

13 years agoMerge branch 'uk/checkout-ambiguous-ref'
Junio C Hamano [Mon, 28 Feb 2011 05:58:29 +0000 (21:58 -0800)]
Merge branch 'uk/checkout-ambiguous-ref'

* uk/checkout-ambiguous-ref:
  Rename t2019 with typo "amiguous" that meant "ambiguous"
  checkout: rearrange update_refs_for_switch for clarity
  checkout: introduce --detach synonym for "git checkout foo^{commit}"
  checkout: split off a function to peel away branchname arg
  checkout: fix bug with ambiguous refs

Conflicts:
builtin/checkout.c

13 years agoMerge branch 'sp/maint-smart-http-sans-100-continue'
Junio C Hamano [Mon, 28 Feb 2011 05:58:29 +0000 (21:58 -0800)]
Merge branch 'sp/maint-smart-http-sans-100-continue'

* sp/maint-smart-http-sans-100-continue:
  smart-http: Don't use Expect: 100-Continue

13 years agoMerge branch 'mo/perl-bidi-pipe-envfix'
Junio C Hamano [Mon, 28 Feb 2011 05:58:28 +0000 (21:58 -0800)]
Merge branch 'mo/perl-bidi-pipe-envfix'

* mo/perl-bidi-pipe-envfix:
  perl: command_bidi_pipe() method should set-up git environmens

13 years agoMerge branch 'hv/mingw-fs-funnies'
Junio C Hamano [Mon, 28 Feb 2011 05:17:37 +0000 (21:17 -0800)]
Merge branch 'hv/mingw-fs-funnies'

* hv/mingw-fs-funnies:
  mingw_rmdir: set errno=ENOTEMPTY when appropriate
  mingw: add fallback for rmdir in case directory is in use
  mingw: make failures to unlink or move raise a question
  mingw: work around irregular failures of unlink on windows
  mingw: move unlink wrapper to mingw.c

13 years agoMerge branch 'en/object-list-with-pathspec'
Junio C Hamano [Mon, 28 Feb 2011 05:17:36 +0000 (21:17 -0800)]
Merge branch 'en/object-list-with-pathspec'

* en/object-list-with-pathspec:
  Add testcases showing how pathspecs are handled with rev-list --objects
  Make rev-list --objects work together with pathspecs

13 years agoMerge branch 'nd/struct-pathspec'
Junio C Hamano [Mon, 28 Feb 2011 05:17:36 +0000 (21:17 -0800)]
Merge branch 'nd/struct-pathspec'

* nd/struct-pathspec: (22 commits)
  t6004: add pathspec globbing test for log family
  t7810: overlapping pathspecs and depth limit
  grep: drop pathspec_matches() in favor of tree_entry_interesting()
  grep: use writable strbuf from caller for grep_tree()
  grep: use match_pathspec_depth() for cache/worktree grepping
  grep: convert to use struct pathspec
  Convert ce_path_match() to use match_pathspec_depth()
  Convert ce_path_match() to use struct pathspec
  struct rev_info: convert prune_data to struct pathspec
  pathspec: add match_pathspec_depth()
  tree_entry_interesting(): optimize wildcard matching when base is matched
  tree_entry_interesting(): support wildcard matching
  tree_entry_interesting(): fix depth limit with overlapping pathspecs
  tree_entry_interesting(): support depth limit
  tree_entry_interesting(): refactor into separate smaller functions
  diff-tree: convert base+baselen to writable strbuf
  glossary: define pathspec
  Move tree_entry_interesting() to tree-walk.c and export it
  tree_entry_interesting(): remove dependency on struct diff_options
  Convert struct diff_options to use struct pathspec
  ...

13 years agogitweb: Make i18n (encoding) tests in t9500 leave clean state
Jakub Narebski [Sun, 27 Feb 2011 16:58:32 +0000 (17:58 +0100)]
gitweb: Make i18n (encoding) tests in t9500 leave clean state

The most important issue is that after unsetting `i18n.commitencoding'
config variable t9500 no longer will use author and comitter name
containing ISO-8859-1 characters, which are invalid UTF-8 characters.

Besides it is good practice in general to clean up the state in tests.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-add: make -A description clearer vs. -u
Michael J Gruber [Sun, 27 Feb 2011 15:50:10 +0000 (16:50 +0100)]
git-add: make -A description clearer vs. -u

Currently, it sounds as if "notice removal of files" distinguishes "-A"
from "-u", and there is no mention of the worktree.

But both notice the removal, and only "-A" adds changes from untracked
files. Say so.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-cvsimport.perl: Bail out right away when reading from the server fails
Fabian Keil [Mon, 31 Jan 2011 19:29:46 +0000 (20:29 +0100)]
git-cvsimport.perl: Bail out right away when reading from the server fails

If the CVS server is down, this reduced the git-cvsimport output from:

ssh: connect to host ijbswa.cvs.sourceforge.net port 22: Connection refused
Use of uninitialized value $rep in scalar chomp at /usr/local/libexec/git-core/git-cvsimport line 369.
Use of uninitialized value $rep in substitution (s///) at /usr/local/libexec/git-core/git-cvsimport line 370.
Expected Valid-requests from server, but got: <unknown>

to the less noisy:

ssh: connect to host ijbswa.cvs.sourceforge.net port 22: Connection refused
Failed to read from server at /usr/local/libexec/git-core/git-cvsimport line 370.

In this case a silent exit() instead of the die() would probably do,
but I assume that there could be cases where the connection attempt
succeeds, but reading from the server fails for other reasons.

Signed-off-by: Fabian Keil <fk@fabiankeil.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodoc: technical details about the index file format
Nguyễn Thái Ngọc Duy [Mon, 6 Sep 2010 10:37:10 +0000 (20:37 +1000)]
doc: technical details about the index file format

This bases on the original work by Robin Rosenberg.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Sun, 27 Feb 2011 08:52:15 +0000 (00:52 -0800)]
Merge branch 'maint'

* maint:
  branch_merged: fix grammar in warning

13 years agomergetool--lib: Add Beyond Compare 3 as a tool
Sebastian Schuberth [Sat, 26 Feb 2011 10:52:17 +0000 (11:52 +0100)]
mergetool--lib: Add Beyond Compare 3 as a tool

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomergetool--lib: Sort tools alphabetically for easier lookup
Sebastian Schuberth [Sat, 26 Feb 2011 10:51:14 +0000 (11:51 +0100)]
mergetool--lib: Sort tools alphabetically for easier lookup

Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agobranch_merged: fix grammar in warning
Eric Hanchrow [Sat, 26 Feb 2011 03:29:42 +0000 (19:29 -0800)]
branch_merged: fix grammar in warning

Signed-off-by: Eric Hanchrow <eric.hanchrow@gmail.com>
Helped-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge commit 'jn/svn-fe' of git://github.com/gitster/git into svn-fe
Jonathan Nieder [Sat, 26 Feb 2011 11:21:29 +0000 (05:21 -0600)]
Merge commit 'jn/svn-fe' of git://github.com/gitster/git into svn-fe

* git://github.com/gitster/git:
  vcs-svn: Allow change nodes for root of tree (/)
  vcs-svn: Implement Prop-delta handling
  vcs-svn: Sharpen parsing of property lines
  vcs-svn: Split off function for handling of individual properties
  vcs-svn: Make source easier to read on small screens
  vcs-svn: More dump format sanity checks
  vcs-svn: Reject path nodes without Node-action
  vcs-svn: Delay read of per-path properties
  vcs-svn: Combine repo_replace and repo_modify functions
  vcs-svn: Replace = Delete + Add
  vcs-svn: handle_node: Handle deletion case early
  vcs-svn: Use mark to indicate nodes with included text
  vcs-svn: Unclutter handle_node by introducing have_props var
  vcs-svn: Eliminate node_ctx.mark global
  vcs-svn: Eliminate node_ctx.srcRev global
  vcs-svn: Check for errors from open()
  vcs-svn: Allow simple v3 dumps (no deltas yet)

Conflicts:
t/t9010-svn-fe.sh
vcs-svn/svndump.c

13 years agovcs-svn: teach line_buffer about temporary files
Jonathan Nieder [Mon, 3 Jan 2011 03:10:59 +0000 (21:10 -0600)]
vcs-svn: teach line_buffer about temporary files

It can sometimes be useful to write information temporarily to file,
to read back later.  These functions allow a program to use the
line_buffer facilities when doing so.

It works like this:

 1. find a unique filename with buffer_tmpfile_init.
 2. rewind with buffer_tmpfile_rewind.  This returns a stdio
    handle for writing.
 3. when finished writing, declare so with
    buffer_tmpfile_prepare_to_read.  The return value indicates
    how many bytes were written.
 4. read whatever portion of the file is needed.
 5. if finished, remove the temporary file with buffer_deinit.
    otherwise, go back to step 2,

The svn support would use this to buffer the postimage from delta
application until the length is known and fast-import can receive
the resulting blob.

Based-on-patch-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: allow input from file descriptor
Jonathan Nieder [Mon, 3 Jan 2011 03:09:38 +0000 (21:09 -0600)]
vcs-svn: allow input from file descriptor

Based-on-patch-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: allow character-oriented input
Jonathan Nieder [Mon, 3 Jan 2011 03:06:32 +0000 (21:06 -0600)]
vcs-svn: allow character-oriented input

buffer_read_char can be used in place of buffer_read_string(1) to
avoid consuming valuable static buffer space.  The delta applier will
use this to read variable-length integers one byte at a time.

Underneath, it is fgetc, wrapped so the line_buffer library can
maintain its role as gatekeeper of input.

Later it might be worth checking if fgetc_unlocked is faster ---
most line_buffer functions are not thread-safe anyway.

Helpd-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: add binary-safe read function
Jonathan Nieder [Mon, 3 Jan 2011 03:05:46 +0000 (21:05 -0600)]
vcs-svn: add binary-safe read function

buffer_read_string works well for non line-oriented input except for
one problem: it does not tell the caller how many bytes were actually
written.  This means that unless one is very careful about checking
for errors (and eof) the calling program cannot tell the difference
between the string "foo" followed by an early end of file and the
string "foo\0bar\0baz".

So introduce a variant that reports the length, too, a thinner wrapper
around strbuf_fread.  Its result is written to a strbuf so the caller
does not need to keep track of the number of bytes read.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agot0081 (line-buffer): add buffering tests
Jonathan Nieder [Mon, 3 Jan 2011 01:07:16 +0000 (19:07 -0600)]
t0081 (line-buffer): add buffering tests

POSIX makes the behavior of read(2) from a pipe fairly clear: a read
from an empty pipe will block until there is data available and any
other read will not block, prefering to return a partial result.
Likewise, fread(3) and fgets(3) are clearly specified to act as
though implemented by calling fgetc(3) in a simple loop.  But the
buffering behavior of fgetc is less clear.

Luckily, no sane platform is going to implement fgetc by calling the
equivalent of read(2) more than once.  fgetc has to be able to
return without filling its buffer to preserve errno when errors are
encountered anyway.  So let's assume the simpler behavior (trust) but
add some tests to catch insane platforms that violate that when they
come (verify).

First check that fread can handle a 0-length read from an empty fifo.
Because open(O_RDONLY) blocks until the writing end is open, open the
writing end of the fifo in advance in a subshell.

Next try short inputs from a pipe that is not filled all the way.

Lastly (two tests) try very large inputs from a pipe that will not fit
in the relevant buffers.  The first of these tests reads a little
more than 8192 bytes, which is BUFSIZ (the size of stdio's buffers)
on this Linux machine.  The second reads a little over 64 KiB (the
pipe capacity on Linux) and is not run unless requested by setting
the GIT_REMOTE_SVN_TEST_BIG_FILES environment variable.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: tweak test-line-buffer to not assume line-oriented input
Jonathan Nieder [Mon, 3 Jan 2011 00:52:28 +0000 (18:52 -0600)]
vcs-svn: tweak test-line-buffer to not assume line-oriented input

Do not expect an implicit newline after each input record.
Use a separate command to exercise buffer_skip_bytes.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agotests: give vcs-svn/line_buffer its own test script
Jonathan Nieder [Mon, 3 Jan 2011 00:51:07 +0000 (18:51 -0600)]
tests: give vcs-svn/line_buffer its own test script

Split the line_buffer test into small pieces and move it to its
own file as preparation for adding more tests.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: make test-line-buffer input format more flexible
Jonathan Nieder [Mon, 3 Jan 2011 00:50:16 +0000 (18:50 -0600)]
vcs-svn: make test-line-buffer input format more flexible

Imitate the input format of test-obj-pool to support arbitrary
sequences of commands rather than alternating read/copy.  This should
make it easier to add tests that exercise other line_buffer functions.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: teach line_buffer to handle multiple input files
Jonathan Nieder [Mon, 11 Oct 2010 02:41:06 +0000 (21:41 -0500)]
vcs-svn: teach line_buffer to handle multiple input files

Collect the line_buffer state in a newly public line_buffer struct.
Callers can use multiple line_buffers to manage input from multiple
files at a time.

svn-fe's delta applier will use this to stream a delta from svnrdump
and the preimage it applies to from fast-import at the same time.

The tests don't take advantage of the new features, but I think that's
okay.  It is easier to find lingering examples of nonreentrant code by
searching for "static" in line_buffer.c.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agofast-import: add 'ls' command
David Barr [Thu, 2 Dec 2010 10:40:20 +0000 (21:40 +1100)]
fast-import: add 'ls' command

Lazy fast-import frontend authors that want to rely on the backend to
keep track of the content of the imported trees _almost_ have what
they need in the 'cat-blob' command (v1.7.4-rc0~30^2~3, 2010-11-28).
But it is not quite enough, since

 (1) cat-blob can be used to retrieve the content of files, but
     not their mode, and

 (2) using cat-blob requires the frontend to keep track of a name
     (mark number or object id) for each blob to be retrieved

Introduce an 'ls' command to complement cat-blob and take care of the
remaining needs.  The 'ls' command finds what is at a given path
within a given tree-ish (tag, commit, or tree):

'ls' SP <dataref> SP <path> LF

or in fast-import's active commit:

'ls' SP <path> LF

The response is a single line sent through the cat-blob channel,
imitating ls-tree output.  So for example:

FE> ls :1 Documentation
gfi> 040000 tree 9e6c2b599341d28a2a375f8207507e0a2a627fe9 Documentation
FE> ls 9e6c2b599341d28a2a375f8207507e0a2a627fe9 git-fast-import.txt
gfi> 100644 blob 4f92954396e3f0f97e75b6838a5635b583708870 git-fast-import.txt
FE> ls :1 RelNotes
gfi> 120000 blob b942e499449d97aeb50c73ca2bdc1c6e6d528743 RelNotes
FE> cat-blob b942e499449d97aeb50c73ca2bdc1c6e6d528743
gfi> b942e499449d97aeb50c73ca2bdc1c6e6d528743 blob 32
gfi> Documentation/RelNotes/1.7.4.txt

The most interesting parts of the reply are the first word, which is
a 6-digit octal mode (regular file, executable, symlink, directory,
or submodule), and the part from the second space to the tab, which is
a <dataref> that can be used in later cat-blob, ls, and filemodify (M)
commands to refer to the content (blob, tree, or commit) at that path.

If there is nothing there, the response is "missing some/path".

The intent is for this command to be used to read files from the
active commit, so a frontend can apply patches to them, and to copy
files and directories from previous revisions.

For example, proposed updates to svn-fe use this command in place of
its internal representation of the repository directory structure.
This simplifies the frontend a great deal and means support for
resuming an import in a separate fast-import run (i.e., incremental
import) is basically free.

Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Improved-by: Junio C Hamano <gitster@pobox.com>
Improved-by: Sverre Rabbelier <srabbelier@gmail.com>
13 years agovcs-svn: collect line_buffer data in a struct
Jonathan Nieder [Mon, 11 Oct 2010 02:39:21 +0000 (21:39 -0500)]
vcs-svn: collect line_buffer data in a struct

Prepare for the line_buffer lib to support input from multiple files,
by collecting global state in a struct that can be easily passed
around.

No API change yet.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: replace buffer_read_string memory pool with a strbuf
Jonathan Nieder [Sat, 6 Nov 2010 17:01:28 +0000 (12:01 -0500)]
vcs-svn: replace buffer_read_string memory pool with a strbuf

obj_pool is inherently global and does not use the standard growing
factor alloc_nr, which makes it feel out of place in the git codebase.
Plus it is overkill for this application: all that is needed is a
buffer that can grow between requests to accomodate larger strings.
Use a strbuf instead.

As a side effect, this improves the error handling: allocation
failures will result in a clean exit instead of segfaults.  It would
be nice to add a test case (using ulimit or failmalloc) but that can
wait for another day.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agovcs-svn: eliminate global byte_buffer
Jonathan Nieder [Mon, 11 Oct 2010 02:37:10 +0000 (21:37 -0500)]
vcs-svn: eliminate global byte_buffer

The data stored in byte_buffer[] is always either discarded or
written to stdout immediately.  No need for it to persist between
function calls.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
13 years agostrbuf: add strbuf_vaddf
Jeff King [Sat, 26 Feb 2011 05:08:53 +0000 (23:08 -0600)]
strbuf: add strbuf_vaddf

In a variable-args function, the code for writing into a strbuf is
non-trivial. We ended up cutting and pasting it in several places
because there was no vprintf-style function for strbufs (which in turn
was held up by a lack of va_copy).

Now that we have a fallback va_copy, we can add strbuf_vaddf, the
strbuf equivalent of vsprintf. And we can clean up the cut and paste
mess.

Signed-off-by: Jeff King <peff@peff.net>
Improved-by: Christian Couder <christian.couder@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocompat: provide a fallback va_copy definition
Jeff King [Sat, 26 Feb 2011 05:08:25 +0000 (23:08 -0600)]
compat: provide a fallback va_copy definition

va_copy is C99.  We have avoided using va_copy many times in the past,
which has led to a bunch of cut-and-paste.  From everything I found
searching the web, implementations have historically either provided
va_copy or just let your code assume that simple assignment of worked.

So my guess is that this will be sufficient, though we won't really
know for sure until somebody reports a problem.

Signed-off-by: Jeff King <peff@peff.net>
Improved-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-p4 submit: prevent 'Jobs' section from being removed from p4 change log
Michael Horowitz [Sat, 26 Feb 2011 02:31:13 +0000 (21:31 -0500)]
git-p4 submit: prevent 'Jobs' section from being removed from p4 change log

In an attempt to overwrite the 'Description:' section of the p4 change
log to include the git commit messages, it also overwrote the 'Jobs:'
section. Â This fix restores the 'Job:' section.

Signed-off-by: Michael Horowitz <michael.horowitz@ieee.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMakefile: do not install sourced rebase scripts
Martin von Zweigbergk [Fri, 25 Feb 2011 03:32:06 +0000 (22:32 -0500)]
Makefile: do not install sourced rebase scripts

When git-rebase.sh recently started sourcing
git-rebase--interactive.sh instead of executing it, executable bit of
the latter file should have been turned off and it should have been
moved from SCRIPT_SH to SCRIPT_LIB in the Makefile. Its two new
siblings, git-rebase--am.sh and git-rebase--merge.sh (whose executable
bits are already off) should also be moved to SCRIPT_LIB in the
Makefile.

Reported-by: Johannes Sixt <j6t@kdbg.org>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocommit: error out for missing commit message template
Jonathan Nieder [Fri, 25 Feb 2011 09:07:57 +0000 (03:07 -0600)]
commit: error out for missing commit message template

When "git commit" was rewritten in C (v1.5.4-rc0~78^2~30,
2007-11-08), a subtle bug in --template was introduced.  If the
file named by a --template parameter is missing, previously git
would error out with a message:

Commit template file does not exist.

but in the C version the --template parameter gets ignored and
the default template is used.

t7500 has two tests for this case which would have caught it, except
that with the default $EDITOR, the commit message template is left
unmodified, causing 'git commit' to error out and the test to
succeed.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomergetool-lib: call vim in readonly mode for diffs
Michael J Gruber [Fri, 25 Feb 2011 09:36:39 +0000 (10:36 +0100)]
mergetool-lib: call vim in readonly mode for diffs

When [g]vimdiff is called for files which are opened already, the editor
complains about the existing swap file. But we do not want to write
anything when called from difftool. So, make difftool use "-R" for the
vim family. This

- prevents the use of a swap file and
- marks the buffers readonly.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocommit: give final warning when reattaching HEAD to leave commits behind
Junio C Hamano [Sat, 19 Feb 2011 00:04:47 +0000 (16:04 -0800)]
commit: give final warning when reattaching HEAD to leave commits behind

You can detach the HEAD at an arbitrary commit in order to browse the
files in various points in the history or build older versions of the
software, without recording any new commit, and come back to an existing
branch.  When used in this "sightseer" mode, detached HEAD is a perfectly
safe mechanism.  It also is a useful state to experiment with throw-away
commits.

When coming back to an existing branch with "git checkout master",
however, the commits that were created on the detached HEAD will become
unreachable from anywhere but the reflog of the HEAD.  Check if the commit
we are about to leave is connected to some ref, and give a final warning
otherwise to remind the user for safety.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-gui: fetch/prune all entry appears last
Heiko Voigt [Tue, 22 Feb 2011 19:30:21 +0000 (20:30 +0100)]
git-gui: fetch/prune all entry appears last

The user might have got used to the order the remotes appeared previously.
Lets add the all entry last so the all entry does not confuse previous
users.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Tested-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agogit-gui: fetch/prune all entry only for more than one entry
Heiko Voigt [Tue, 22 Feb 2011 19:28:36 +0000 (20:28 +0100)]
git-gui: fetch/prune all entry only for more than one entry

In case there is only one remote a fetch/prune all entry
is redundant.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Tested-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agoformat-patch: rfc2047-encode newlines in headers
Jeff King [Wed, 23 Feb 2011 09:59:18 +0000 (04:59 -0500)]
format-patch: rfc2047-encode newlines in headers

These should generally never happen, as we already
concatenate multiples in subjects into a single line. But
let's be defensive, since not encoding them means we will
output malformed headers.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoformat-patch: wrap long header lines
Jeff King [Wed, 23 Feb 2011 09:58:41 +0000 (04:58 -0500)]
format-patch: wrap long header lines

Subject and identity headers may be arbitrarily long. In the
past, we just assumed that single-line headers would be
reasonably short. For multi-line subjects that we squish
into a single line, we just "pre-folded" the data in
pp_title_line by adding a newline and indentation.

There were two problems. One is that, although rare,
single-line messages can actually be longer than the
recommended line-length limits. The second is that the
pre-folding interacted badly with rfc2047 encoding, leading
to malformed headers.

Instead, let's stop pre-folding the subject lines, and just
fold everything based on length in add_rfc2047, whether
it is encoded or not.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agostrbuf: add fixed-length version of add_wrapped_text
Jeff King [Wed, 23 Feb 2011 09:50:19 +0000 (04:50 -0500)]
strbuf: add fixed-length version of add_wrapped_text

The function strbuf_add_wrapped_text takes a NUL-terminated
string. This makes it annoying to wrap strings we have as a
pointer and a length.

Refactoring strbuf_add_wrapped_text and all of its
sub-functions to handle fixed-length strings turned out to
be really ugly. So this implementation is lame; it just
strdups the text and operates on the NUL-terminated version.
This should be fine as the strings we are wrapping are
generally pretty short.  If it becomes a problem, we can
optimize later.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoupdate-index --refresh --porcelain: add missing const
Jonathan Nieder [Tue, 22 Feb 2011 22:43:23 +0000 (22:43 +0000)]
update-index --refresh --porcelain: add missing const

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocheckout: add missing const to describe_detached_head
Jonathan Nieder [Tue, 22 Feb 2011 22:43:22 +0000 (22:43 +0000)]
checkout: add missing const to describe_detached_head

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDisallow empty section and variable names
Libor Pechacek [Tue, 1 Feb 2011 07:13:47 +0000 (08:13 +0100)]
Disallow empty section and variable names

It is possible to break your repository config by creating an invalid key.  The
config parser in turn chokes on it:

  $ git init
  Initialized empty Git repository in /tmp/gittest/.git/
  $ git config .foo false
  $ git config core.bare
  fatal: bad config file line 6 in .git/config

This patch makes git-config reject keys which start or end with a dot and adds
tests for these cases.

Signed-off-by: Libor Pechacek <lpechacek@suse.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoSanity-check config variable names
Libor Pechacek [Sun, 30 Jan 2011 19:40:41 +0000 (20:40 +0100)]
Sanity-check config variable names

Sanity-check config variable names when adding and retrieving them.  As a side
effect code duplication between git_config_set_multivar and get_value (in
builtin/config.c) was removed and the common functionality was placed in
git_config_parse_key.

This breaks a test in t1300 which used invalid section-less keys in the tests
for "git -c". However, allowing such names there was useless, since there was
no way to set them via config file, and no part of git actually tried to use
section-less keys. This patch updates the test to use more realistic examples
as well as adding its own test.

Signed-off-by: Libor Pechacek <lpechacek@suse.cz>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodiff: don't retrieve binary blobs for diffstat
Jeff King [Sat, 19 Feb 2011 08:16:32 +0000 (03:16 -0500)]
diff: don't retrieve binary blobs for diffstat

We only need the size, which is much cheaper to get,
especially if it is a big binary file.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodiff: handle diffstat of rewritten binary files
Jeff King [Sat, 19 Feb 2011 08:04:56 +0000 (03:04 -0500)]
diff: handle diffstat of rewritten binary files

The logic in builtin_diffstat assumes that a
complete_rewrite pair should have its lines counted. This is
nonsensical for binary files and leads to confusing things
like:

  $ git diff --stat --summary HEAD^ HEAD
   foo.rand |  Bin 4096 -> 4096 bytes
   1 files changed, 0 insertions(+), 0 deletions(-)

  $ git diff --stat --summary -B HEAD^ HEAD
   foo.rand |   34 +++++++++++++++-------------------
   1 files changed, 15 insertions(+), 19 deletions(-)
   rewrite foo.rand (100%)

So let's reorder the function to handle binary files first
(which from diffstat's perspective look like complete
rewrites anyway), then rewrites, then actual diffstats.

There are two bonus prizes to this reorder:

  1. It gets rid of a now-superfluous goto.

  2. The binary case is at the top, which means we can
     further optimize it in the next patch.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoTeach commit about CHERRY_PICK_HEAD
Jay Soffian [Sun, 20 Feb 2011 04:12:29 +0000 (23:12 -0500)]
Teach commit about CHERRY_PICK_HEAD

Previously the user was advised to use commit -c CHERRY_PICK_HEAD after
a conflicting cherry-pick. While this would preserve the original
commit's authorship, it would sadly discard cherry-pick's carefully
crafted MERGE_MSG (which contains the list of conflicts as well as the
original commit-id in the case of cherry-pick -x).

On the other hand, if a bare 'commit' were performed, it would preserve
the MERGE_MSG while resetting the authorship.

In other words, there was no way to simultaneously take the authorship
from CHERRY_PICK_HEAD and the commit message from MERGE_MSG.

This change fixes that situation. A bare 'commit' will now take the
authorship from CHERRY_PICK_HEAD and the commit message from MERGE_MSG.
If the user wishes to reset authorship, that must now be done explicitly
via --reset-author.

A side-benefit of passing commit authorship along this way is that we
can eliminate redundant authorship parsing code from revert.c.

(Also removed an unused include from revert.c)

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agobash: teach __git_ps1 about CHERRY_PICK_HEAD
Jay Soffian [Sun, 20 Feb 2011 04:12:28 +0000 (23:12 -0500)]
bash: teach __git_ps1 about CHERRY_PICK_HEAD

Make the git prompt (when enabled) show a CHERRY-PICKING indicator
when we are in the middle of a conflicted cherry-pick, analogous
to the existing MERGING and BISECTING flags.

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoIntroduce CHERRY_PICK_HEAD
Jay Soffian [Sun, 20 Feb 2011 04:12:27 +0000 (23:12 -0500)]
Introduce CHERRY_PICK_HEAD

When a cherry-pick conflicts git advises:

 $ git commit -c <original commit id>

to preserve the original commit message and authorship. Instead, let's
record the original commit id in CHERRY_PICK_HEAD and advise:

  $ git commit -c CHERRY_PICK_HEAD

A later patch teaches git to handle the '-c CHERRY_PICK_HEAD' part.
Note that we record CHERRY_PICK_HEAD even in the case where there
are no conflicts so that we may use it to communicate authorship to
commit; this will then allow us to remove set_author_ident_env from
revert.c. However, we do not record CHERRY_PICK_HEAD when --no-commit
is used, as presumably the user intends to further edit the commit
and possibly even cherry-pick additional commits on top.

Tests and documentation contributed by Jonathan Nieder.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot3507: introduce pristine-detach helper
Jonathan Nieder [Sun, 20 Feb 2011 04:12:26 +0000 (23:12 -0500)]
t3507: introduce pristine-detach helper

All the tests in t3507 (cherry-pick with conflicts) begin with the
same checkout + read-tree + clean incantation to ensure a predictable
starting point.  Factor out a function for that so the interesting
part of the tests is easier to read.

The "update-index --refresh" and "diff-index --exit-code HEAD" are not
necessary as the point of this testsuite is not about testing
"read-tree --reset".

Improved-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodo not overwrite untracked symlinks
Clemens Buchacher [Sun, 20 Feb 2011 12:13:43 +0000 (13:13 +0100)]
do not overwrite untracked symlinks

Git traditionally overwrites untracked symlinks silently. This will
generally not cause massive data loss, but it is inconsistent with
the behavior for regular files, which are not silently overwritten.

With this change, git refuses to overwrite untracked symlinks by
default. If the user really wants to overwrite the untracked
symlink, he has git-clean and git-checkout -f at his disposal.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Tue, 22 Feb 2011 06:46:09 +0000 (22:46 -0800)]
Merge branch 'maint'

* maint:
  Documentation: clarify -u<mode> option defaults

13 years agogit-checkout.txt: improve detached HEAD documentation
Jay Soffian [Sun, 20 Feb 2011 05:21:50 +0000 (00:21 -0500)]
git-checkout.txt: improve detached HEAD documentation

The detached HEAD state is a source of much confusion for users
new to git. Here we try to document it better.

Reworked from http://article.gmane.org/gmane.comp.version-control.git/138440

Requested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDocumentation: clarify -u<mode> option defaults
Clemens Buchacher [Mon, 21 Feb 2011 20:05:25 +0000 (21:05 +0100)]
Documentation: clarify -u<mode> option defaults

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Tue, 22 Feb 2011 01:20:11 +0000 (17:20 -0800)]
Merge branch 'maint'

* maint:
  t/t7500-commit.sh: use test_cmp instead of test
  t/gitweb-lib.sh: Ensure that errors are shown for --debug --immediate
  gitweb/gitweb.perl: don't call S_ISREG() with undef
  gitweb/gitweb.perl: remove use of qw(...) as parentheses

13 years agorev-list: --left/right-only are mutually exclusive
Junio C Hamano [Tue, 22 Feb 2011 00:58:37 +0000 (16:58 -0800)]
rev-list: --left/right-only are mutually exclusive

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorev-list: documentation and test for --left/right-only
Michael J Gruber [Mon, 21 Feb 2011 16:09:12 +0000 (17:09 +0100)]
rev-list: documentation and test for --left/right-only

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot6007: Make sure we test --cherry-pick
Michael J Gruber [Fri, 18 Feb 2011 12:34:19 +0000 (13:34 +0100)]
t6007: Make sure we test --cherry-pick

Test 5 wants to test --cherry-pick but limits by pathspec in such a way
that there are no commits on the left side of the range.

Add a test without "--cherry-pick" which displays this, and add two
more commits and another test which tests what we're after. This also
shortens the last test.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorevlist.c: introduce --left/right-only for unsymmetric picking
Michael J Gruber [Mon, 21 Feb 2011 16:09:11 +0000 (17:09 +0100)]
revlist.c: introduce --left/right-only for unsymmetric picking

The existing "--cherry-pick" does not work with unsymmetric ranges
(A..B) for obvious reasons.

Introduce "--left-only" and "--right-only" which limit the output to
commits on the respective sides of a symmetric range (i.e. only "<"
resp. ">" commits as per "--left-right").

This is especially useful for things like

    git log --cherry-pick --right-only @{u}...

which is much more flexible (and descriptive) than

    git cherry @{u} | sed -ne 's/^+ //p'

and potentially more useful than

    git log --cherry-pick @{u}...

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-p4: Add copy detection support
Vitor Antunes [Sun, 20 Feb 2011 01:18:25 +0000 (01:18 +0000)]
git-p4: Add copy detection support

Add new config options:
    git-p4.detectCopies         - Enable copy detection.
    git-p4.detectCopiesHarder   - Find copies harder.
The detectCopies option should be set to a true/false value.
The detectCopiesHarder option should be set to true/false value.
P4Submit can now process diff-tree C status and integrate files accordingly.

Signed-off-by: Vitor Antunes <vitor.hda@gmail.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Acked-by: Tor Arvid Lund <torarvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-p4: Improve rename detection support
Vitor Antunes [Sun, 20 Feb 2011 01:18:24 +0000 (01:18 +0000)]
git-p4: Improve rename detection support

Only open files for edit after integrating if the SHA1 of source and destination
differ from each other.
Add git config option detectRenames to allow permanent rename detection. This
options should be set to a true/false value.
Rename "detectRename" variable to "detectRenames" to make it more coherent with
the description in git man pages, which always use plural.

Signed-off-by: Vitor Antunes <vitor.hda@gmail.com>
Acked-by: Pete Wyckoff <pw@padd.com>
Acked-by: Tor Arvid Lund <torarvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot/t7500-commit.sh: use test_cmp instead of test
Ævar Arnfjörð Bjarmason [Sat, 19 Feb 2011 18:29:09 +0000 (18:29 +0000)]
t/t7500-commit.sh: use test_cmp instead of test

Change commit_msg_is() in t/t7500-commit.sh to use test_cmp instead of
the shell's test function. Now if a test fails we'll get test_cmp
output showing us what failed.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot/gitweb-lib.sh: Ensure that errors are shown for --debug --immediate
Ævar Arnfjörð Bjarmason [Sat, 19 Feb 2011 18:16:19 +0000 (19:16 +0100)]
t/gitweb-lib.sh: Ensure that errors are shown for --debug --immediate

Because '--immediate' stops test suite after first error, therefore in
this mode

  test_debug 'cat gitweb.log'

was never ran, thus in effect negating effect of '--debug' option.
This made finidng the cause of errors in gitweb test sute difficult.

Modify the gitweb_run test subroutine to run test_debug itself in the
case of errors (and also remove "test_debug 'cat gitweb.log'" from
gitweb tests).

This makes it possible to run *gitweb tests* with --immediate ---debug
combination of options; also it makes gitweb tests to not output
spurious debug data that is not considered error.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogitweb/gitweb.perl: don't call S_ISREG() with undef
Ævar Arnfjörð Bjarmason [Sat, 19 Feb 2011 15:27:42 +0000 (15:27 +0000)]
gitweb/gitweb.perl: don't call S_ISREG() with undef

Change S_ISREG($to_mode_oct) to S_ISREG($from_mode_oct) in the branch
that handles from modes, not to modes. This logic appears to have been
caused by copy/paste programming by Jakub Narebski in e8e41a93. It
would be better to rewrite this code not to be duplicated, but I
haven't done so.

This issue caused a failing test on perl 5.13.9, which has a warning
that turned this up:

     gitweb.perl: Use of uninitialized value in subroutine entry at /home/avar/g/git/t/../gitweb/gitweb.perl line 4415.

Which caused the Git test suite to fail on this test:

    ./t9500-gitweb-standalone-no-errors.sh             (Wstat: 256 Tests: 90 Failed: 84)
      Failed tests:  1-8, 10-36, 38-45, 47-48, 50-88
      Non-zero exit status: 1

Reported-by: perl 5.13.9
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogitweb/gitweb.perl: remove use of qw(...) as parentheses
Ævar Arnfjörð Bjarmason [Sat, 19 Feb 2011 15:27:41 +0000 (15:27 +0000)]
gitweb/gitweb.perl: remove use of qw(...) as parentheses

Using the qw(...) construct as implicit parentheses was deprecated in
perl 5.13.5. Change the relevant code in gitweb to not use the
deprecated construct. The offending code was introduced in 3562198b by
Jakub Narebski.

The issue is that perl will now warn about this:

    $ perl -wE 'for my $i qw(a b) { say $i }'
    Use of qw(...) as parentheses is deprecated at -e line 1.
    a
    b

This caused gitweb.perl to warn on perl 5.13.5 and above, and these
tests to fail on those perl versions:

    ./t9501-gitweb-standalone-http-status.sh           (Wstat: 256 Tests: 11 Failed: 10)
      Failed tests:  2-11
      Non-zero exit status: 1
    ./t9502-gitweb-standalone-parse-output.sh          (Wstat: 256 Tests: 10 Failed: 9)
      Failed tests:  2-10
      Non-zero exit status: 1

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agopull: propagate --progress to merge
Jeff King [Sun, 20 Feb 2011 09:56:56 +0000 (04:56 -0500)]
pull: propagate --progress to merge

Now that merge understands progress, we should pass it
along. While we're at it, pass along --no-progress, too.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomerge: enable progress reporting for rename detection
Jeff King [Sun, 20 Feb 2011 09:53:21 +0000 (04:53 -0500)]
merge: enable progress reporting for rename detection

The user can enable or disable it explicitly with the new
--progress, but it defaults to checking isatty(2).

This works only with merge-recursive and subtree. In theory
we could pass a progress flag to other strategies, but none
of them support progress at this point, so let's wait until
they grow such a feature before worrying about propagating
it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoadd inexact rename detection progress infrastructure
Jeff King [Sun, 20 Feb 2011 09:51:16 +0000 (04:51 -0500)]
add inexact rename detection progress infrastructure

We might spend many seconds doing inexact rename detection
with no output.  It's nice to let the user know that
something is actually happening.

This patch adds the infrastructure, but no callers actually
turn on progress reporting.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocommit: stop setting rename limit
Jeff King [Sat, 19 Feb 2011 10:21:57 +0000 (05:21 -0500)]
commit: stop setting rename limit

For its post-commit summary, commit was explicitly setting
the default rename limit to 100. Presumably when the code
was added, it was necessary to do so. These days, however,
it will fall back properly to the diff default, and that
default has long since changed from 100.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agobump rename limit defaults (again)
Jeff King [Sat, 19 Feb 2011 10:21:28 +0000 (05:21 -0500)]
bump rename limit defaults (again)

We did this once before in 5070591 (bump rename limit
defaults, 2008-04-30). Back then, we were shooting for about
1 second for a diff/log calculation, and 5 seconds for a
merge.

There are a few new things to consider, though:

  1. Average processors are faster now.

  2. We've seen on the mailing list some ugly merges where
     not using inexact rename detection leads to many more
     conflicts. Merges of this size take a long time
     anyway, so users are probably happy to spend a little
     bit of time computing the renames.

Let's bump the diff/merge default limits from 200/500 to
400/1000. Those are 2 seconds and 10 seconds respectively on
my modern hardware.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>