Code

git.git
14 years agorev-list-options: clarify --parents and --children
Michael J Gruber [Thu, 30 Sep 2010 15:31:43 +0000 (17:31 +0200)]
rev-list-options: clarify --parents and --children

Make it clearer that --parents resp. --children list the parent resp.
child commits next to each commit, so that I understand next time.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Remove redundant path clearing for D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:29:10 +0000 (02:29 -0600)]
merge-recursive: Remove redundant path clearing for D/F conflicts

The code had several places where individual checks were done to remove
files that could be in the way of directories in D/F conflicts.  Not all
D/F conflicts could have a path cleared for them in such a manner, however,
leading to the need to create make_room_for_directories_of_df_conflicts()
as done in the previous patch.  That new function could not have been
incorporated into the code sooner, since not all relevant code paths had
been deferred to process_df_entry() yet, leading to the creation of even
more of these now-redundant path removals.

Clean out all of these extra D/F path clearing cases.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Make room for directories in D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:29:09 +0000 (02:29 -0600)]
merge-recursive: Make room for directories in D/F conflicts

When there are unmerged entries present, make sure to check for D/F
conflicts first and remove any files present in HEAD that would be in the
way of creating files below the correspondingly named directory.  Such
files will be processed again at the end of the merge in
process_df_entry(); at that time we will be able to tell if we need to
and can reinstate the file, whether we need to place its contents in a
different file due to the directory still being present, etc.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agohandle_delete_modify(): Check whether D/F conflicts are still present
Elijah Newren [Mon, 20 Sep 2010 08:29:08 +0000 (02:29 -0600)]
handle_delete_modify(): Check whether D/F conflicts are still present

If all the paths below some directory involved in a D/F conflict were not
removed during the rest of the merge, then the contents of the file whose
path conflicted needs to be recorded in file with an alternative filename.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge_content(): Check whether D/F conflicts are still present
Elijah Newren [Mon, 20 Sep 2010 08:29:07 +0000 (02:29 -0600)]
merge_content(): Check whether D/F conflicts are still present

If all the paths below some directory involved in a D/F conflict were not
removed during the rest of the merge, then the contents of the file whose
path conflicted needs to be recorded in file with an alternative filename.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoconflict_rename_rename_1to2(): Fix checks for presence of D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:29:06 +0000 (02:29 -0600)]
conflict_rename_rename_1to2(): Fix checks for presence of D/F conflicts

This function is called from process_df_entry(), near the end of the merge.
Rather than just checking whether one of the sides of the merge had a
directory at the same path as one of our files, check whether that
directory is still present by this point of our merge.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoconflict_rename_delete(): Check whether D/F conflicts are still present
Elijah Newren [Mon, 20 Sep 2010 08:29:05 +0000 (02:29 -0600)]
conflict_rename_delete(): Check whether D/F conflicts are still present

If all the paths below some directory involved in a D/F conflict were not
removed during the rest of the merge, then the contents of the file whose
path conflicted needs to be recorded in file with an alternative filename.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Delay modify/delete conflicts if D/F conflict present
Elijah Newren [Mon, 20 Sep 2010 08:29:04 +0000 (02:29 -0600)]
merge-recursive: Delay modify/delete conflicts if D/F conflict present

When handling merges with modify/delete conflicts, if the modified path is
involved in a D/F conflict, handle the issue in process_df_entry() rather
than process_entry().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Delay content merging for renames
Elijah Newren [Mon, 20 Sep 2010 08:29:03 +0000 (02:29 -0600)]
merge-recursive: Delay content merging for renames

Move the handling of content merging for renames from process_renames() to
process_df_entry().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Delay handling of rename/delete conflicts
Elijah Newren [Mon, 20 Sep 2010 08:29:02 +0000 (02:29 -0600)]
merge-recursive: Delay handling of rename/delete conflicts

Move the handling of rename/delete conflicts from process_renames() to
process_df_entry().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Move handling of double rename of one file to other file
Elijah Newren [Mon, 20 Sep 2010 08:29:01 +0000 (02:29 -0600)]
merge-recursive: Move handling of double rename of one file to other file

Move the handling of rename/rename conflicts where one file is renamed on
both sides to the same file, from process_renames() to process_entry().
Here we avoid the three way merge logic by just using
update_stages_and_entry() to move the higher stage entries in the index
from the rename source to the rename destination, and then allow
process_entry() to do its magic.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Move handling of double rename of one file to two
Elijah Newren [Mon, 20 Sep 2010 08:29:00 +0000 (02:29 -0600)]
merge-recursive: Move handling of double rename of one file to two

Move the handling of rename/rename conflicts where one file is renamed to
two different files, from process_renames() to process_df_entry().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Avoid doubly merging rename/add conflict contents
Elijah Newren [Mon, 20 Sep 2010 08:28:59 +0000 (02:28 -0600)]
merge-recursive: Avoid doubly merging rename/add conflict contents

When a commit moves A to B while another commit created B (or moved C to
B), and these two different commits serve as different merge-bases for a
later merge, c94736a (merge-recursive: don't segfault while handling
rename clashes 2009-07-30) added some special code to avoid segfaults.
Since that commit, the two versions of B are merged in place (which could
be potentially conflicting) and the intermediate result is used as the
virtual ancestor.

However, right before this special merge, try_merge was turned on, meaning
that process_renames() would try an alternative merge that ignores the
'add' part of the conflict, and, if the merge is clean, store that as the
new virtual ancestor.  This could cause incorrect merging of criss-cross
merges; it would typically result in just recording a slightly confusing
merge base, but in some cases it could cause silent acceptance of one side
of a merge as the final resolution when a conflict should have been
flagged.

When we do a special merge for such a rename/add conflict between
merge-bases, turn try_merge off to avoid an inappropriate second merge.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Update merge_content() call signature
Elijah Newren [Mon, 20 Sep 2010 08:28:58 +0000 (02:28 -0600)]
merge-recursive: Update merge_content() call signature

Enable calling merge_content() and providing more information about renames
and D/F conflicts (which we will want to do from process_df_entry()).

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Update conflict_rename_rename_1to2() call signature
Elijah Newren [Mon, 20 Sep 2010 08:28:57 +0000 (02:28 -0600)]
merge-recursive: Update conflict_rename_rename_1to2() call signature

To facilitate having this function called later using information stored
in a rename_df_conflict_info struct, accept a diff_filepair instead of a
rename.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Structure process_df_entry() to handle more cases
Elijah Newren [Mon, 20 Sep 2010 08:28:56 +0000 (02:28 -0600)]
merge-recursive: Structure process_df_entry() to handle more cases

Modify process_df_entry() (mostly just indentation level changes) to
get it ready for handling more D/F conflict type cases.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Have process_entry() skip D/F or rename entries
Elijah Newren [Mon, 20 Sep 2010 08:28:55 +0000 (02:28 -0600)]
merge-recursive: Have process_entry() skip D/F or rename entries

If an entry has an associated rename_df_conflict_info, skip it and allow
it to be processed by process_df_entry().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: New function to assist resolving renames in-core only
Elijah Newren [Mon, 20 Sep 2010 08:28:54 +0000 (02:28 -0600)]
merge-recursive: New function to assist resolving renames in-core only

process_renames() and process_entry() have nearly identical code for
doing three-way file merging to resolve content changes.  Since we are
already deferring some of the current rename handling in order to better
handle D/F conflicts, it seems to make sense to defer content merging as
well and remove the (nearly) duplicated code sections for handling this
merging.

To facilitate this process, add a new update_stages_and_entry() function
which will map the higher stage index entries from two files involved in a
rename into the resulting rename destination's index entries, and update
the associated stage_data structure.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: New data structures for deferring of D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:28:53 +0000 (02:28 -0600)]
merge-recursive: New data structures for deferring of D/F conflicts

Since we need to resolve paths (including renames) in-core first and defer
checking of D/F conflicts (namely waiting to see if directories are still
in the way after all paths are resolved) before updating files involved in
D/F conflicts, we will need to first process_renames, then record some
information about the rename needed at D/F resolution time, and then make
use of that information when resolving D/F conflicts at the end.

This commit adds some relevant data structures for storing the necessary
information.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Move process_entry's content merging into a function
Elijah Newren [Mon, 20 Sep 2010 08:28:52 +0000 (02:28 -0600)]
merge-recursive: Move process_entry's content merging into a function

This move is in preparation for merge_content growing and being called from
multiple places in order to handle D/F conflicts.

I also snuck in a small change to the output in the case that the merged
content for the file matches the current file contents, to make it better
match (and thus more able to take over) how other merge_file() calls in
process_renames() are handled.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Move delete/modify handling into dedicated function
Elijah Newren [Mon, 20 Sep 2010 08:28:51 +0000 (02:28 -0600)]
merge-recursive: Move delete/modify handling into dedicated function

This move is in preparation for the function being called from multiple
places in order to handle D/F conflicts.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Move rename/delete handling into dedicated function
Elijah Newren [Mon, 20 Sep 2010 08:28:50 +0000 (02:28 -0600)]
merge-recursive: Move rename/delete handling into dedicated function

This move is in preparation for the function growing and being called from
multiple places in order to handle D/F conflicts.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Nuke rename/directory conflict detection
Elijah Newren [Mon, 20 Sep 2010 08:28:49 +0000 (02:28 -0600)]
merge-recursive: Nuke rename/directory conflict detection

Since we want to resolve merges in-core and then detect at the end whether
D/F conflicts remain in the way, we should just apply renames in-core and
let logic elsewhere check for D/F conflicts.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Rename conflict_rename_rename*() for clarity
Elijah Newren [Mon, 20 Sep 2010 08:28:48 +0000 (02:28 -0600)]
merge-recursive: Rename conflict_rename_rename*() for clarity

The names conflict_rename_rename and conflict_rename_rename_2 did not make
it clear what they were handling.  Since the first of these handles one
file being renamed in both branches to different files, while the latter
handles two different files being renamed to the same thing, add a little
'1to2' and '2to1' suffix on these and an explanatory comment to make their
intent clearer.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Small code clarification -- variable name and comments
Elijah Newren [Mon, 20 Sep 2010 08:28:47 +0000 (02:28 -0600)]
merge-recursive: Small code clarification -- variable name and comments

process_renames() had a variable named "stage" and derived variables
src_other and dst_other whose purpose was not immediately obvious; also,
I want to extend the scope of this variable and use it later, so it should
have a more descriptive name.  Do so, and add a brief comment explaining
how it is used and what it relates to.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6036: Add testcase for undetected conflict
Elijah Newren [Mon, 20 Sep 2010 08:28:46 +0000 (02:28 -0600)]
t6036: Add testcase for undetected conflict

If merging two lines of development involves a rename/add conflict, and two
different people make such a merge but resolve it differently, and then
someone tries to merge the resulting two merges, then they should clearly
get a conflict due to the different resolutions from the previous
developers.  However, in some such cases the conflict would not be detected
and git would silently accept one of the two versions being merged as the
final merge resolution.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6036: Add a second testcase similar to the first but with content changes
Elijah Newren [Mon, 20 Sep 2010 08:28:45 +0000 (02:28 -0600)]
t6036: Add a second testcase similar to the first but with content changes

c94736a (merge-recursive: don't segfault while handling rename clashes
2009-07-30) added t6036 with a testcase that involved dual renames and a
criss-cross merge.  Add a test that is nearly identical, but which also
involves content modification -- a case git currently does not merge
correctly.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6036: Test index and worktree state, not just that merge fails
Elijah Newren [Mon, 20 Sep 2010 08:28:44 +0000 (02:28 -0600)]
t6036: Test index and worktree state, not just that merge fails

c94736a (merge-recursive: don't segfault while handling rename clashes
2009-07-30) added this testcase with an interesting corner case test,
which previously had cased git to segfault.  This test ensures that the
segfault does not return and that the merge correctly fails; just add
some checks that verify the state of the index and worktree after the merge
are correct.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6020: Add a testcase for modify/delete + directory/file conflict
Elijah Newren [Mon, 20 Sep 2010 08:28:43 +0000 (02:28 -0600)]
t6020: Add a testcase for modify/delete + directory/file conflict

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6020: Modernize style a bit
Elijah Newren [Mon, 20 Sep 2010 08:28:42 +0000 (02:28 -0600)]
t6020: Modernize style a bit

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6022: Add tests for rename/rename combined with D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:28:41 +0000 (02:28 -0600)]
t6022: Add tests for rename/rename combined with D/F conflicts

Add tests where one file is renamed to two different paths in different
sides of history, and where each of the new files matches the name of a
directory from the opposite side of history.  Include tests for both the
case where the merge results in those directories not being cleanly
removed, and where those directories are cleanly removed during the merge.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6022: Add paired rename+D/F conflict: (two/file, one/file) -> (one, two)
Elijah Newren [Mon, 20 Sep 2010 08:28:40 +0000 (02:28 -0600)]
t6022: Add paired rename+D/F conflict: (two/file, one/file) -> (one, two)

An interesting testcase is having two files each in their own subdirectory
getting renamed to the toplevel at the directory pathname of the other.
Questions arise as to whether the order of operations matters and whether
the directories can correctly get out of the way and make room for the
new files.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6022: Add tests with both rename source & dest involved in D/F conflicts
Elijah Newren [Mon, 20 Sep 2010 08:28:39 +0000 (02:28 -0600)]
t6022: Add tests with both rename source & dest involved in D/F conflicts

Having the source of a rename be involved in a directory/file conflict does
not currently pose any difficulties to the current merge-recursive
algorithm (in contrast to destinations of renames and D/F conflicts).
However, combining the two seemed like good testcases to include for
completeness.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6022: Add tests for reversing order of merges when D/F conflicts present
Elijah Newren [Mon, 20 Sep 2010 08:28:38 +0000 (02:28 -0600)]
t6022: Add tests for reversing order of merges when D/F conflicts present

When merging two branches with some path involved in a D/F conflict, the
choice of which branch to merge into the other matters for (at least) two
reasons: (1) whether the working copy has a directory full of files that
is in the way of a file, or a file exists that is in the way of a
directory of files, (2) when the directory full of files does not disappear
due to the merge, what files at the same paths should be renamed to
(e.g. filename~HEAD vs. filename~otherbranch).

Add some tests that reverse the merge order of two other tests, and which
verify the contents are as expected (namely, that the results are identical
other than modified-for-uniqueness filenames involving branch names).

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6022: Add test combinations of {content conflict?, D/F conflict remains?}
Elijah Newren [Mon, 20 Sep 2010 08:28:37 +0000 (02:28 -0600)]
t6022: Add test combinations of {content conflict?, D/F conflict remains?}

Add testing of the various ways that a renamed file to a path involved in
a directory/file conflict may be involved in.  This includes whether or not
there are conflicts of the contents of the renamed file (if the file was
modified on both sides of history), and whether the directory from the
other side of the merge will disappear as a result of the merge or not.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6032: Add a test checking for excessive output from merge
Elijah Newren [Mon, 20 Sep 2010 08:28:36 +0000 (02:28 -0600)]
t6032: Add a test checking for excessive output from merge

Previous D/F fixes I submitted (5a2580d and ae74548) had caused merge to
become excessively spammy, which was fixed in 96ecac6 (merge-recursive:
Avoid excessive output for and reprocessing of renames 2010-08-20).  Add a
new test to avoid repeating that mistake with my several upcoming changes.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: Restructure showing how to chain more process_* functions
Junio C Hamano [Mon, 20 Sep 2010 08:28:35 +0000 (02:28 -0600)]
merge-recursive: Restructure showing how to chain more process_* functions

In 3734893 (merge-recursive: Fix D/F conflicts 2010-07-09),
process_df_entry() was added to process_renames() and process_entry() but
in a somewhat restrictive manner.  Modify the code slightly to make it
clearer how we could chain more such functions if necessary, and alter
process_df_entry() to handle such chaining.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot3030: Add a testcase for resolvable rename/add conflict with symlinks
Schalk, Ken [Mon, 20 Sep 2010 08:28:34 +0000 (02:28 -0600)]
t3030: Add a testcase for resolvable rename/add conflict with symlinks

d5af510 (RE: [PATCH] Avoid rename/add conflict when contents are identical
2010-09-01) avoided erroring out in a rename/add conflict when the contents
were identical.  A simpler fix could have handled that particular testcase,
but it would not correctly handle the case where a symlink is involved.
Add another testcase using symlinks, to avoid breaking that case.

Signed-off-by: Ken Schalk <ken.schalk@intel.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoMerge branch 'en/rename-d-f' into en/merge-recursive
Junio C Hamano [Thu, 30 Sep 2010 00:25:28 +0000 (17:25 -0700)]
Merge branch 'en/rename-d-f' into en/merge-recursive

* en/rename-d-f:
  merge-recursive: D/F conflicts where was_a_dir/file -> was_a_dir
  t3509: Add rename + D/F conflict testcase that recursive strategy fails

14 years agoblame,cat-file --textconv: Don't assume mode is ``S_IFREF | 0664''
Kirill Smelkov [Wed, 29 Sep 2010 11:35:24 +0000 (15:35 +0400)]
blame,cat-file --textconv: Don't assume mode is ``S_IFREF | 0664''

We need to get the correct mode when blame reads the source from the
working tree, the index, or trees.  This allows us to omit running
textconv filters on symbolic links.

Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>
Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoblame,cat-file: Demonstrate --textconv is wrongly running converter on symlinks
Kirill Smelkov [Wed, 29 Sep 2010 11:35:23 +0000 (15:35 +0400)]
blame,cat-file: Demonstrate --textconv is wrongly running converter on symlinks

git blame --textconv is wrongly calling the textconv filter on
symlinks: symlinks are stored as blobs whose content is the target of
the link, and blame calls the textconv filter on a temporary file
filled-in with the content of this blob.

For example:

    $ git blame -C -C regular-file.pdf
    Error: May not be a PDF file (continuing anyway)
    Error: PDF file is damaged - attempting to reconstruct xref table...
    Error: Couldn't find trailer dictionary
    Error: Couldn't read xref table
    Warning: program returned non-zero exit code #1
    fatal: unable to read files to diff

That errors come from pdftotext run on symlink.pdf being extracted to
/tmp/ with one-line plain-text content pointing to link destination.

So several failures are demonstrated here:

  - git cat-file --textconv :symlink.bin    # also HEAD:symlink.bin
  - git blame --textconv symlink.bin
  - git blame -C -C --textconv regular-file # but also looks on symlink.bin

At present they all fail with something like.

    E: /tmp/j3ELEs_symlink.bin is not "binary" file

NOTE: git diff doesn't try to textconv the pathnames, it runs the
textual diff without textconv, which is the expected behavior.

Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>
Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoblame,cat-file: Prepare --textconv tests for correctly-failing conversion program
Kirill Smelkov [Wed, 29 Sep 2010 11:35:22 +0000 (15:35 +0400)]
blame,cat-file: Prepare --textconv tests for correctly-failing conversion program

The textconv filter is sometimes incorrectly ran on a temporary file
whose content is the target of a symbolic link, instead of actual file
content. Prepare to test this by marking the content of the file to
convert with "bin:", and let the helper die if "bin:" is not found in
the file content.

NOTE: I've changed $@ to $1 in helper becase textconv program "should
take a single argument" (see Documentation/gitattributes.txt), so
making this more explicit makes sense and also helps to avoid
problems with feeding arguments to echo.

Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>
Reviewed-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoStart 1.7.4 cycle
Junio C Hamano [Wed, 29 Sep 2010 21:07:59 +0000 (14:07 -0700)]
Start 1.7.4 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoMerge branch 'tr/send-email-refuse-sending-unedited-cover-letter'
Junio C Hamano [Wed, 29 Sep 2010 22:26:12 +0000 (15:26 -0700)]
Merge branch 'tr/send-email-refuse-sending-unedited-cover-letter'

* tr/send-email-refuse-sending-unedited-cover-letter:
  send-email: Refuse to send cover-letter template subject

14 years agoMerge branch 'ab/send-email-catfile'
Junio C Hamano [Wed, 29 Sep 2010 20:50:02 +0000 (13:50 -0700)]
Merge branch 'ab/send-email-catfile'

* ab/send-email-catfile:
  send-email: use catfile() to concatenate files

14 years agoMerge branch 'jc/grep-header-all-match-fix'
Junio C Hamano [Wed, 29 Sep 2010 20:49:57 +0000 (13:49 -0700)]
Merge branch 'jc/grep-header-all-match-fix'

* jc/grep-header-all-match-fix:
  log --author: take union of multiple "author" requests
  grep: move logic to compile header pattern into a separate helper

14 years agoMerge branch 'jc/no-branch-name-with-dash-at-front'
Junio C Hamano [Wed, 29 Sep 2010 20:49:38 +0000 (13:49 -0700)]
Merge branch 'jc/no-branch-name-with-dash-at-front'

* jc/no-branch-name-with-dash-at-front:
  disallow branch names that start with a hyphen

14 years agoMerge branch 'jn/gitweb-test-lib'
Junio C Hamano [Wed, 29 Sep 2010 20:49:28 +0000 (13:49 -0700)]
Merge branch 'jn/gitweb-test-lib'

* jn/gitweb-test-lib:
  t/gitweb-lib.sh: Use tabs for indent consistently
  t/gitweb-lib.sh: Use GIT_BUILD_DIR

14 years agoMerge branch 'bc/fortran-userdiff'
Junio C Hamano [Wed, 29 Sep 2010 20:49:23 +0000 (13:49 -0700)]
Merge branch 'bc/fortran-userdiff'

* bc/fortran-userdiff:
  userdiff.c: add builtin fortran regex patterns

14 years agoMerge branch 'jk/read-tree-empty'
Junio C Hamano [Wed, 29 Sep 2010 20:49:18 +0000 (13:49 -0700)]
Merge branch 'jk/read-tree-empty'

* jk/read-tree-empty:
  read-tree: deprecate syntax without tree-ish args

14 years agoMerge branch 'rr/format-patch-count-without-merges'
Junio C Hamano [Wed, 29 Sep 2010 20:49:09 +0000 (13:49 -0700)]
Merge branch 'rr/format-patch-count-without-merges'

* rr/format-patch-count-without-merges:
  format-patch: Don't go over merge commits
  t4014-format-patch: Call test_tick before committing

14 years agoMerge branch 'jc/pickaxe-grep'
Junio C Hamano [Wed, 29 Sep 2010 20:49:03 +0000 (13:49 -0700)]
Merge branch 'jc/pickaxe-grep'

* jc/pickaxe-grep:
  diff/log -G<pattern>: tests
  git log/diff: add -G<regexp> that greps in the patch text
  diff: pass the entire diff-options to diffcore_pickaxe()
  gitdiffcore doc: update pickaxe description

14 years agoMerge branch 'gb/shell-ext'
Junio C Hamano [Wed, 29 Sep 2010 20:48:44 +0000 (13:48 -0700)]
Merge branch 'gb/shell-ext'

* gb/shell-ext:
  shell: Display errors from improperly-formatted command lines
  shell: Rewrite documentation and improve error message
  Add sample commands for git-shell
  Add interactive mode to git-shell for user-friendliness
  Allow creation of arbitrary git-shell commands

14 years agoMerge branch 'rr/fmt-merge-msg'
Junio C Hamano [Wed, 29 Sep 2010 20:48:20 +0000 (13:48 -0700)]
Merge branch 'rr/fmt-merge-msg'

* rr/fmt-merge-msg:
  t6200-fmt-merge-msg: Exercise '--log' to configure shortlog length
  t6200-fmt-merge-msg: Exercise 'merge.log' to configure shortlog length
  merge: Make 'merge.log' an integer or boolean option
  merge: Make '--log' an integer option for number of shortlog entries
  fmt_merge_msg: Change fmt_merge_msg API to accept shortlog_len

Conflicts:
builtin/merge.c

14 years agoMerge branch 'po/etc-gitattributes'
Junio C Hamano [Wed, 29 Sep 2010 20:47:51 +0000 (13:47 -0700)]
Merge branch 'po/etc-gitattributes'

* po/etc-gitattributes:
  Add global and system-wide gitattributes

Conflicts:
Documentation/config.txt
Makefile

14 years agoMinGW: avoid collisions between "tags" and "TAGS"
Junio C Hamano [Tue, 28 Sep 2010 21:08:38 +0000 (16:08 -0500)]
MinGW: avoid collisions between "tags" and "TAGS"

On case insensitive filesystems, "tags" and "TAGS" target will try to
overwrite the same file.  Allow MinGW to use "ETAGS" instead.

These two targets do produce real files; do not put them on .PHONY target
list.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agodiff: trivial fix for --output file error message
Matthieu Moy [Wed, 29 Sep 2010 07:26:23 +0000 (09:26 +0200)]
diff: trivial fix for --output file error message

The option argument is either after the equal sign in --output=... or in
the next command-line argument. optarg is the reliable way to access it.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agosend-email: Use To: headers in patch files
Stephen Boyd [Wed, 29 Sep 2010 07:26:44 +0000 (00:26 -0700)]
send-email: Use To: headers in patch files

It's a minor annoyance when you take the painstaking time to setup To:
headers for each patch in a large series, and then go out to send the
series with git-send-email and watch git ignore the To: headers in the
patch files.

Therefore, always add To: headers from a patch file to the To: headers
for that message. Keep the prompt for the blanket To: header so as to
not break scripts (and user expectations). This means even if a patch
has a To: header, git will prompt for the To: address. Otherwise, we'll
need to introduce interface breakage to either request the header for
each patch missing a To: header or default the header to whatever To:
address is found first (be it in a patch or from user input). Both of
these options don't seem very obvious/useful.

Reported-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Tested-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agouser-manual: fix anchor name Finding-comments-With-given-Content
Michael J Gruber [Tue, 28 Sep 2010 11:16:07 +0000 (13:16 +0200)]
user-manual: fix anchor name Finding-comments-With-given-Content

Change the anchor name to

Finding-commits-With-given-Content

so that it corresponds to the actual content there.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agouser-manual: be consistent in illustrations to 'git rebase'
Kirill Smelkov [Tue, 28 Sep 2010 08:20:24 +0000 (12:20 +0400)]
user-manual: be consistent in illustrations to 'git rebase'

Since we use a-b-c for mywork commits in one place, I think it would be
logical to also use a-b-c too in other illustration on this topic.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agostash: simplify parsing fixes
Jon Seymour [Mon, 27 Sep 2010 15:32:45 +0000 (01:32 +1000)]
stash: simplify parsing fixes

This patch simplifies Brian's fix for the recent regression by:

* eliminating the extra loop
* eliminating use of git rev-parse for parsing flags
* making use of the for opt idiom for the retained loop
* eliminating the redundant -- case

The patch has been tested with the tests in current maint.

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agodiff: add synonyms for -M, -C, -B
Kevin Ballard [Mon, 27 Sep 2010 23:58:26 +0000 (16:58 -0700)]
diff: add synonyms for -M, -C, -B

Add new long-form options --detect-renames[=<n>], --detect-copies[=<n>],
and --break-rewrites[=[<n>][/<m>]] as synonyms for the -M, -C, and -B
options (respectively).

Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomerge-recursive: option to specify rename threshold
Kevin Ballard [Mon, 27 Sep 2010 23:58:25 +0000 (16:58 -0700)]
merge-recursive: option to specify rename threshold

The recursive merge strategy turns on rename detection but leaves the
rename threshold at the default. Add a strategy option to allow the user
to specify a rename threshold to use.

Signed-off-by: Kevin Ballard <kevin@sb.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agomergetool-lib: make the three-way diff the default for vim/gvim
Dan McGee [Mon, 27 Sep 2010 15:19:09 +0000 (10:19 -0500)]
mergetool-lib: make the three-way diff the default for vim/gvim

The original vimdiff/gvimdiff configuration is now available by using
'vimdiff2' or 'gvimdiff2' as the preferred merge tool.

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoGit 1.7.3.1 v1.7.3.1
Junio C Hamano [Wed, 29 Sep 2010 16:42:53 +0000 (09:42 -0700)]
Git 1.7.3.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agostash: fix git stash branch regression when branch creation fails
Jon Seymour [Tue, 28 Sep 2010 13:19:52 +0000 (23:19 +1000)]
stash: fix git stash branch regression when branch creation fails

"git stash branch <branch> <stash>" started discarding the stash
when the branch creation fails.  It should have kept the stash
intact when aborting.

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agostash drops the stash even if creating the branch fails because it already exists
Tomas Carnecky [Tue, 28 Sep 2010 13:19:51 +0000 (23:19 +1000)]
stash drops the stash even if creating the branch fails because it already exists

This bug was disovered by someone on IRC when he tried to

    $ git stash branch <branch> <stash>

while <branch> already existed. In that case the stash is dropped even
though it isn't applied on any branch, so the stash is effectively lost.

Signed-off-by: Tomas Carnecky <tom@dbservice.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agodaemon: allow more than one host address given via --listen
Alexander Sulfrian [Mon, 30 Aug 2010 11:30:51 +0000 (13:30 +0200)]
daemon: allow more than one host address given via --listen

When the host has more than one interfaces, daemon can listen to all
of them by not giving any --listen option, or listen to only one.
Teach it to accept more than one --listen options.

Remove the hostname information form the die, if no socket could be
created. It would only trigger when no interface out of either all
interface or the ones specified on the command line with --listen
options, can be listened to and so the user does know which "host" was
asked.

Signed-off-by: Alexander Sulfrian <alexander@sulfrian.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agodaemon: add helper function named_sock_setup
Alexander Sulfrian [Mon, 30 Aug 2010 11:30:50 +0000 (13:30 +0200)]
daemon: add helper function named_sock_setup

Add named_sock_setup as helper function for socksetup to make it
easier to create more than one listen sockets. named_sock_setup could
be called more than one time and add the new sockets to the supplied
socklist_p.

Signed-off-by: Alexander Sulfrian <alexander@sulfrian.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoFix missing 'does' in man-page for 'git checkout'
Linus Torvalds [Mon, 27 Sep 2010 19:14:57 +0000 (12:14 -0700)]
Fix missing 'does' in man-page for 'git checkout'

Reported-by: Rainer Standke <rainer.standke@krankikom.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoDocumentation: pack.compression: explain how to recompress
Jan Krüger [Mon, 27 Sep 2010 12:21:58 +0000 (14:21 +0200)]
Documentation: pack.compression: explain how to recompress

Add a small remark about how to recompress all existing objects after
changing the compression level for pack files.

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agorepack: add -F flag to let user choose between --no-reuse-delta/object
Jan Krüger [Mon, 27 Sep 2010 12:19:36 +0000 (14:19 +0200)]
repack: add -F flag to let user choose between --no-reuse-delta/object

In 479b56ba ('make "repack -f" imply "pack-objects --no-reuse-object"'),
git repack -f was changed to include recompressing all objects on the
zlib level on the assumption that if the user wants to spend that much
time already, some more time won't hurt (and recompressing is useful if
the user changed the zlib compression level).

However, "some more time" can be quite long with very big repositories,
so some users are going to appreciate being able to choose. If we are
going to give them the choice, --no-reuse-object will probably be
interesting a lot less frequently than --no-reuse-delta. Hence, this
reverts -f to the old behaviour (--no-reuse-delta) and adds a new -F
option that replaces the current -f.

Measurements taken using this patch on a current clone of git.git
indicate a 17% decrease in time being made available to users:

git repack -Adf  34.84s user 0.56s system 145% cpu 24.388 total
git repack -AdF  38.79s user 0.56s system 133% cpu 29.394 total

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoperl: use "use warnings" instead of -w
Ævar Arnfjörð Bjarmason [Fri, 24 Sep 2010 20:00:53 +0000 (20:00 +0000)]
perl: use "use warnings" instead of -w

Change the Perl scripts to turn on lexical warnings instead of setting
the global $^W variable via the -w switch.

The -w sets warnings for all code that interpreter runs, while "use
warnings" is lexically scoped. The former is probably not what the
authors wanted.

As an auxiliary benefit it's now possible to build Git with:

    PERL_PATH='/usr/bin/env perl'

Which would previously result in failures, since "#!/usr/bin/env perl -w"
doesn't work as a shebang.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoperl: bump the required Perl version to 5.8 from 5.6.[21]
Ævar Arnfjörð Bjarmason [Fri, 24 Sep 2010 20:00:52 +0000 (20:00 +0000)]
perl: bump the required Perl version to 5.8 from 5.6.[21]

Formalize our dependency on perl 5.8, bumped from 5.6.[12]. We already
used the three-arg form of open() which was introduced in 5.6.1, but
t/t9700/test.pl explicitly depended on 5.6.2.

However git-add--interactive.pl has been failing on the 5.6 line since
it was introduced in v1.5.0-rc0~12^2~2 back in 2006 due to this open
syntax:

    sub run_cmd_pipe {
           my $fh = undef;
           open($fh, '-|', @_) or die;
           return <$fh>;
    }

Which when executed dies on "Can't use an undefined value as
filehandle reference". Several of our tests also fail on 5.6 (even
more when compiled with NO_PERL_MAKEMAKER=1):

    t2016-checkout-patch.sh
    t3904-stash-patch.sh
    t3701-add-interactive.sh
    t7105-reset-patch.sh
    t7501-commit.sh
    t9700-perl-git.sh

Our code is bitrotting on 5.6 with no-one interested in fixing it, and
pinning us to such an ancient release of Perl is keeping us from using
useful features introduced in the 5.8 release.

The 5.6 series is now over 10 years old, and the 5.6.2 maintenance
release almost 7. 5.8 on the other hand is more than 8 years old.

All the modern Unix-like operating systems have now upgraded to it or
a later version, and 5.8 packages are available for old IRIX, AIX
Solaris and Tru64 systems.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Tor Arntsen <tor@spacetec.no>
Acked-by: Randal L. Schwartz <merlyn@stonehenge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agogit-send-email.perl: Add --to-cmd
Joe Perches [Fri, 24 Sep 2010 17:03:00 +0000 (10:03 -0700)]
git-send-email.perl: Add --to-cmd

Add the ability to use a command line --to-cmd=cmd
to create the list of "To:" addresses.

Used a shared routine for --cc-cmd and --to-cmd.

Did not use IPC::Open2, leaving that for Ævar if
ever he decides to fix the other bugs he might find.

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoMakefile: add CC to TRACK_CFLAGS
Ævar Arnfjörð Bjarmason [Sun, 12 Sep 2010 22:37:45 +0000 (22:37 +0000)]
Makefile: add CC to TRACK_CFLAGS

Change the git make process so that everything's rebuilt if the CC is
changed. Before we wouldn't rebuilt if e.g. the CC variable was
changed from gcc to clang.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agodir.c: squelch false uninitialized memory warning
Pat Notz [Thu, 16 Sep 2010 20:53:22 +0000 (14:53 -0600)]
dir.c: squelch false uninitialized memory warning

GCC 4.4.4 on MacOS incorrectly warns about potential use of uninitialized memory.

Signed-off-by: Pat Notz <patnotz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agogit-send-email.perl: ensure $domain is defined before using it
Brandon Casey [Mon, 27 Sep 2010 03:18:01 +0000 (22:18 -0500)]
git-send-email.perl: ensure $domain is defined before using it

valid_fqdn() may attempt to operate on an undefined value if
Net::Domain::domainname fails to determine the domain name.  This causes
perl to emit unpleasant warnings.

So, add a check for whether $domain has been defined before using it.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agowt-status.c: don't leak directory entries when processing untracked,ignored
Brandon Casey [Mon, 27 Sep 2010 02:49:13 +0000 (21:49 -0500)]
wt-status.c: don't leak directory entries when processing untracked,ignored

When iterating through the list of directory entries, searching for
untracked entries, only the entries added to the string_list were free'd.
The rest (tracked or not matching the pathspec) were leaked.

Ditto for the "ignored" loop.

Rearrange the loops so that all entries are free'd.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot6050 (replace): fix bogus "fetch branch with replacement" test
Christian Couder [Sun, 26 Sep 2010 05:20:18 +0000 (07:20 +0200)]
t6050 (replace): fix bogus "fetch branch with replacement" test

The test was missing some "&&" at the end of some lines and it
was wrong because, as the replacement refs were not fetched,
the commits from the parallel branch should not show up. This
was found by Elijah Newren.

This is fixed by checking that after the branch from HASH6 is
fetched, the commits from the parallel branch don't show up,
and then by fetching the replacement refs and checking that
they do show up afterwards.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoDocumentation: Refer to git-commit-tree in git-filter-branch help
Wesley J. Landaker [Mon, 13 Sep 2010 14:59:54 +0000 (08:59 -0600)]
Documentation: Refer to git-commit-tree in git-filter-branch help

Currently, the help for git filter-branch refers users of --env-filter
to git-commit for information about environment variables affecting
commits. However, this information is not contained in the git-commit
help, but is very explicitly detailed in git-commit-tree.

Signed-off-by: Wesley J. Landaker <wjl@icecavern.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agosmart-http: Don't change POST to GET when following redirect
Tay Ray Chuan [Sat, 25 Sep 2010 04:20:35 +0000 (12:20 +0800)]
smart-http: Don't change POST to GET when following redirect

For a long time (29508e1 "Isolate shared HTTP request functionality", Fri
Nov 18 11:02:58 2005), we've followed HTTP redirects with
CURLOPT_FOLLOWLOCATION.

However, when the remote HTTP server returns a redirect the default
libcurl action is to change a POST request into a GET request while
following the redirect, but the remote http backend does not expect
that.

Fix this by telling libcurl to always keep the request as type POST with
CURLOPT_POSTREDIR.

For users of libcurl older than 7.19.1, use CURLOPT_POST301 instead,
which only follows 301s instead of both 301s and 302s.

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoupdate comment and documentation for :/foo syntax
Matthieu Moy [Fri, 24 Sep 2010 16:43:59 +0000 (18:43 +0200)]
update comment and documentation for :/foo syntax

The documentation in revisions.txt did not match the implementation, and
the comment in sha1_name.c was incomplete.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoImprovements to `git checkout -h`
Daniel Knittl-Frank [Fri, 24 Sep 2010 16:21:59 +0000 (18:21 +0200)]
Improvements to `git checkout -h`

be a little more verbose about what each option does

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agocontrib/completion: --no-index option to git diff
Michael J Gruber [Thu, 23 Sep 2010 12:33:51 +0000 (14:33 +0200)]
contrib/completion: --no-index option to git diff

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoget_author_ident_from_commit(): remove useless quoting
Uwe Kleine-König [Thu, 23 Sep 2010 09:22:10 +0000 (11:22 +0200)]
get_author_ident_from_commit(): remove useless quoting

The command 's/'\''/'\''\'\'\''/g' only triples single quotes:

$ echo "What's up?" | sed 's/'\''/'\''\'\'\''/g'
What'''s up?

This doesn't hurt as compared to a single single quote it only adds an
empty string, but it makes the script needlessly complicated and hard to
understand.  The useful quoting is done by s/'\''/'\''\\'\'\''/g at the
beginning of the script and only once for all three variables.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoprefer test -h over test -L in shell scripts
Jeff King [Wed, 22 Sep 2010 00:35:59 +0000 (20:35 -0400)]
prefer test -h over test -L in shell scripts

Even though "-L" is POSIX, the former is more portable, and
we tend to prefer it already.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoEnable highlight executable path as a configuration option
Christopher Wilson [Tue, 21 Sep 2010 07:25:19 +0000 (00:25 -0700)]
Enable highlight executable path as a configuration option

Allow build-time/run-time configuration of the highlight executable
(must be the one from http://www.andre-simon.de due to assumptions
about parameters and output).  Defaults to previous behavior which
assumes that highlight is available on the server PATH. However, if
this is not the case, the path to the highlight executable can be
configured at build time as a configuration variable

    HIGHLIGHT_BIN = /path/to/highlight

or at runtime by configuring GITWEB_CONFIG

    $highlight_bin = /path/to/highlight

Signed-off-by: Christopher Wilson <cwilson@cdwilson.us>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoCodingGuidelines: spell Arithmetic Expansion with $(($var))
Junio C Hamano [Wed, 22 Sep 2010 19:15:37 +0000 (12:15 -0700)]
CodingGuidelines: spell Arithmetic Expansion with $(($var))

POSIX wants shells to support both "N" and "$N" and requires them to yield
the same answer to $((N)) and $(($N)), but we should aim for portability
in a case like this, especially when the price we pay to do so is so
small, i.e. a few extra dollars.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot1503: Fix arithmetic expansion syntax error when using dash
Ramsay Jones [Tue, 21 Sep 2010 17:45:09 +0000 (18:45 +0100)]
t1503: Fix arithmetic expansion syntax error when using dash

On systems which have dash as /bin/sh, such as Ubuntu, the final
test (master@{n} for various n) fails with a syntax error while
processing an arithmetic expansion. The syntax error is caused by
using a bare name ('N') as a variable reference in the expression.

In order to avoid the syntax error, we spell the variable reference
as '$N' rather than simply 'N'.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoremote-helpers: build in platform independent directory
Michael J Gruber [Fri, 17 Sep 2010 21:00:53 +0000 (23:00 +0200)]
remote-helpers: build in platform independent directory

The build directory which is used by distutils depends on the platform
(e.g. build/lib on Fedora 13, build/lib.linux-i686-2.6 on Ubuntu 9.04).
But test-lib.sh expects to find the build in build/lib which can cause
t5800-remote-helpers.sh to fail early.

Override distutils' choice so that the build is always in build/lib.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agostrbuf.h: fix comment typo
Pat Notz [Thu, 16 Sep 2010 20:53:23 +0000 (14:53 -0600)]
strbuf.h: fix comment typo

Signed-off-by: Pat Notz <patnotz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agobuiltin/revert.c: don't dereference a NULL pointer
Brandon Casey [Mon, 27 Sep 2010 17:29:45 +0000 (12:29 -0500)]
builtin/revert.c: don't dereference a NULL pointer

cherry-pick will segfault when transplanting a root commit if the --ff
option is used.  This happens because the "parent" pointer is set to NULL
when the commit being cherry-picked has no parents.  Later, when "parent"
is dereferenced, the cherry-pick segfaults.

Fix this by checking whether "parent" is NULL before dereferencing it and
add a test for this case of cherry-picking a root commit with --ff.

Reported-by: Zbyszek Szmek <zbyszek@in.waw.pl>
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agogit-stash: fix flag parsing
Brian Gernhardt [Fri, 24 Sep 2010 22:15:34 +0000 (18:15 -0400)]
git-stash: fix flag parsing

Currently git-stash uses `git rev-parse --no-revs -- "$@"` to set its
FLAGS variable.  This is the same as `FLAGS="-- $@"`.  It should use
`git rev-parse --no-revs --flags "$@"`, but that eats any "-q" or
"--quiet" argument.  So move the check for quiet before rev-parse.

Signed-off-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agot/t3903-stash: improve testing of git-stash show
Brandon Casey [Fri, 24 Sep 2010 20:40:38 +0000 (15:40 -0500)]
t/t3903-stash: improve testing of git-stash show

Recently, the 'stash show' functionality was broken for the case when a
stash-like argument was supplied.  Since, commit 9bf09e, 'stash show' when
supplied a stash-like argument prints nothing and still exists with a zero
status.  Unfortunately, the flaw slipped through the test suite cracks
since the output of 'stash show' was not verified to be correct.

Improve and expand on the existing tests so that this flaws is detected.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agogit-svn: fix processing of decorated commit hashes
Mathias Lafeldt [Thu, 23 Sep 2010 22:05:03 +0000 (00:05 +0200)]
git-svn: fix processing of decorated commit hashes

The function working_head_info() fails to parse commit hashes if they
are decorated (i.e. log.decorate is true), causing dcommit, rebase, and
other vital git-svn commands to malfunction.

This patch disables decorated log output with --no-decorate.

[ew: wrapped long line]

Signed-off-by: Mathias Lafeldt <misfire@debugon.org>
Acked-by: Eric Wong <normalperson@yhbt.net>
14 years agogit-svn: check_cherry_pick should exclude commits already in our history
Steven Walter [Thu, 2 Sep 2010 22:32:06 +0000 (18:32 -0400)]
git-svn: check_cherry_pick should exclude commits already in our history

The merge-base between @$parents and $merge_tip may have been reached
through a merge commit.  This means that some commits that are ancestors
of @$parents will not be ancestors of $merge_base.  The mergeinfo
property will not list commits that are ancestors of @$parents, so we
need to explicitly exclude them.

[ew: squashed and cleaned up test case from Steven]

Signed-off-by: Steven Walter <stevenrwalter@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
14 years agoDocumentation/git-svn: discourage "noMetadata"
Eric Wong [Sat, 21 Aug 2010 18:52:14 +0000 (18:52 +0000)]
Documentation/git-svn: discourage "noMetadata"

"noMetadata" is a sometimes harmful option, so better document
its behavior and limitations.

Suggested-by: Vadim Zeitlin
Signed-off-by: Eric Wong <normalperson@yhbt.net>
14 years agodo not search functions for patch ID
Clemens Buchacher [Sun, 19 Sep 2010 09:59:28 +0000 (11:59 +0200)]
do not search functions for patch ID

Visual aids, such as the function name in the hunk
header, are not necessary for the purposes of
computing a patch ID.

This is a performance optimization.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 years agoadd rebase patch id tests
Clemens Buchacher [Sun, 19 Sep 2010 09:59:27 +0000 (11:59 +0200)]
add rebase patch id tests

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>