13 years agogit stash: document apply's --index switch
Miklos Vajna [Sun, 30 Sep 2007 22:30:27 +0000 (00:30 +0200)]
git stash: document apply's --index switch

Signed-off-by: Junio C Hamano <>
13 years agopost-receive-hook: Remove the From field from the generated email header so that...
Andy Parkins [Fri, 28 Sep 2007 14:24:26 +0000 (15:24 +0100)]
post-receive-hook: Remove the From field from the generated email header so that the pusher's name is used

Using the name of the committer of the revision at the tip of the
updated ref is not sensible.  That information is available in the email
itself should it be wanted, and by supplying a "From", we were
effectively hiding the person who performed the push - which is useful
information in itself.

Signed-off-by: Andy Parkins <>
Signed-off-by: Junio C Hamano <>
13 years agogit-remote: exit with non-zero status after detecting errors.
Jari Aalto [Sun, 30 Sep 2007 06:29:43 +0000 (23:29 -0700)]
git-remote: exit with non-zero status after detecting errors.

Some subcommands of "git-remote" detected and issued error
messages but did not signal that to the calling process with
exit status.

Signed-off-by: Jari Aalto <>
Signed-off-by: Junio C Hamano <>
13 years agorebase -i: squash should retain the authorship of the _first_ commit
Johannes Schindelin [Sat, 29 Sep 2007 23:34:23 +0000 (00:34 +0100)]
rebase -i: squash should retain the authorship of the _first_ commit

It was determined on the mailing list, that it makes more sense for a
"squash" to keep the author of the first commit as the author for the
result of the squash.

Make it so.

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
13 years agogit-add--interactive: Improve behavior on bogus input
Jean-Luc Herren [Wed, 26 Sep 2007 14:05:01 +0000 (16:05 +0200)]
git-add--interactive: Improve behavior on bogus input

1) Previously, any menu would cause a perl error when entered '0',
   which is never a valid option.

2) Entering a bogus choice (like 998 or 4-2) surprisingly caused
   the same behavior as if the user had just hit 'enter', which
   means to carry out the selected action on the selected items.
   Entering such bogus input is now a no-op and the sub-menu
   doesn't exit.

Signed-off-by: Jean-Luc Herren <>
Signed-off-by: Junio C Hamano <>
13 years agogit-add--interactive: Allow Ctrl-D to exit
Jean-Luc Herren [Wed, 26 Sep 2007 13:56:19 +0000 (15:56 +0200)]
git-add--interactive: Allow Ctrl-D to exit

Hitting Ctrl-D (EOF) is a common way to exit shell-like tools.
When in a sub-menu it will still behave as if an empty line had
been entered, carrying out the action on the selected items and
returning to the previous menu.

Signed-off-by: Jean-Luc Herren <>
Signed-off-by: Junio C Hamano <>
13 years agoGIT v1.5.3.3
Junio C Hamano [Sat, 29 Sep 2007 23:07:46 +0000 (16:07 -0700)]

Signed-off-by: Junio C Hamano <>
13 years agoFix revision log diff setup, avoid unnecessary diff generation
Linus Torvalds [Sat, 29 Sep 2007 16:50:39 +0000 (09:50 -0700)]
Fix revision log diff setup, avoid unnecessary diff generation

We used to incorrectly start calculating diffs whenever any argument but
'-z' was recognized by the diff options parsing. That was bogus, since not
all arguments result in diffs being needed, so we just waste a lot of time
and effort on calculating diffs that don't matter.

This actually also fixes another bug in "git log". Try this:

git log -C

and notice how it prints an extra empty line in between log entries, even
though it never prints the actual diff (because we didn't ask for any diff
format, so the diff machinery never prints anything).

With this patch, that bogus empty line is gone, because "revs->diff" is
never set.  So this isn't just a "wasted time and effort" issue, it's also
a slight semantic fix.

Signed-off-by: Linus Torvalds <>
Signed-off-by: Junio C Hamano <>
13 years agogit-bundle: fix commandline examples in the manpage
Miklos Vajna [Wed, 26 Sep 2007 23:34:59 +0000 (01:34 +0200)]
git-bundle: fix commandline examples in the manpage

Multiple commands were displayed in one line, making the manpage hard to read.

Signed-off-by: Miklos Vajna <>
Signed-off-by: Junio C Hamano <>
13 years agoMerge branch 'mergetool' of git:// into maint
Junio C Hamano [Sat, 29 Sep 2007 22:39:39 +0000 (15:39 -0700)]
Merge branch 'mergetool' of git:// into maint

* 'mergetool' of git://
  mergetool: Fix typo in options passed to kdiff3
  mergetool: fix emerge when running in a subdirectory
  Mergetool generating blank files (1.5.3)

13 years agomergetool: Fix typo in options passed to kdiff3
Theodore Ts'o [Sat, 29 Sep 2007 02:26:05 +0000 (22:26 -0400)]
mergetool: Fix typo in options passed to kdiff3

Fix missing double hyphens in "-L1" and "-L2"

Signed-off-by: "Theodore Ts'o" <>
13 years agomergetool: fix emerge when running in a subdirectory
Theodore Ts'o [Sat, 29 Sep 2007 01:23:22 +0000 (21:23 -0400)]
mergetool: fix emerge when running in a subdirectory

Only pass the basename of the output filename when to emerge, since
emerge interprets non-absolute pathnames relative to the containing
directory of the output buffer.

Thanks to Kelvie Wong for pointing this out.

Signed-off-by: "Theodore Ts'o" <>
13 years agoMergetool generating blank files (1.5.3)
Junio C Hamano [Thu, 27 Sep 2007 21:41:23 +0000 (14:41 -0700)]
Mergetool generating blank files (1.5.3)

When mergetool is run from a subdirectory, "ls-files -u" nicely
limits the output to conflicted files in that directory, but
we need to give the full path to cat-file plumbing to grab the
contents of stages.

Signed-off-by: Junio C Hamano <>
Signed-off-by: "Theodore Ts'o" <>
13 years agoquiltimport: Skip non-existent patches
Dan Nicholson [Thu, 27 Sep 2007 20:30:59 +0000 (13:30 -0700)]
quiltimport: Skip non-existent patches

When quiltimport encounters a non-existent patch in the series file,
just skip to the next patch. This matches the behavior of quilt.

Signed-off-by: Dan Nicholson <>
Signed-off-by: Junio C Hamano <>
13 years agoapply: get rid of --index-info in favor of --build-fake-ancestor
Johannes Schindelin [Mon, 17 Sep 2007 22:34:06 +0000 (23:34 +0100)]
apply: get rid of --index-info in favor of --build-fake-ancestor

git-am used "git apply -z --index-info" to find the original versions
of the files touched by the diff, to be able to do an inexpensive
three-way merge.

This operation makes only sense in a repository, since the index
information in the diff refers to blobs, which have to be present in
the current repository.

Therefore, teach "git apply" a mode to write out the result as an
index file to begin with, obviating the need for scripts to do it

The sole user for --index-info is "git am" is converted to
use --build-fake-ancestor in this patch.

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
13 years agoMove make_cache_entry() from merge-recursive.c into read-cache.c
Carlos Rica [Tue, 11 Sep 2007 03:17:28 +0000 (05:17 +0200)]
Move make_cache_entry() from merge-recursive.c into read-cache.c

The function make_cache_entry() is too useful to be hidden away in
merge-recursive.  So move it to libgit.a (exposing it via cache.h).

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
13 years agocore-tutorial: correct URL
Randy Dunlap [Wed, 26 Sep 2007 05:02:28 +0000 (22:02 -0700)]
core-tutorial: correct URL

The tinyurl is incorrect -- it attempts to go to,
which is gone.  Either use the full URL (in patch) or create a new
tinyurl for this URL.

Is the web page (where I first saw this problem) generated from
this txt file?
If not, it needs to be updated also.

Signed-off-by: Randy Dunlap <>
Signed-off-by: Junio C Hamano <>
13 years agoFix spelling of overridden in documentation
Shawn Bohrer [Wed, 26 Sep 2007 04:12:46 +0000 (23:12 -0500)]
Fix spelling of overridden in documentation

Signed-off-by: Shawn Bohrer <>
Signed-off-by: Junio C Hamano <>
13 years agogitattributes.txt: Be more to the point in the filter driver description.
Johannes Sixt [Tue, 25 Sep 2007 13:05:29 +0000 (15:05 +0200)]
gitattributes.txt: Be more to the point in the filter driver description.

The description was meant to emphasizes that the project should remain
usable even if the filter driver was not used. This makes it more explicit
and removes the "here is rope to hang yourself" paraphrase.

Signed-off-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
13 years agogitattributes.txt: Remove a duplicated paragraph about 'ident' and 'crlf' interaction.
Johannes Sixt [Tue, 25 Sep 2007 13:05:28 +0000 (15:05 +0200)]
gitattributes.txt: Remove a duplicated paragraph about 'ident' and 'crlf' interaction.

The order in which 'ident' and 'crlf' are carried out is documented a few paragraphs
later again, after 'filter' was introduced.

Signed-off-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
13 years agouser-manual: Explain what submodules are good for.
Michael Smith [Tue, 25 Sep 2007 12:44:38 +0000 (08:44 -0400)]
user-manual: Explain what submodules are good for.

Rework the introduction to the Submodules section to explain why
someone would use them, and fix up submodule references from the
tree-object and todo sections.

Signed-off-by: Michael Smith <>
Acked-by: J. Bruce Fields <>
Signed-off-by: Junio C Hamano <>
13 years agoMerge branch 'jn/web' into maint
Junio C Hamano [Tue, 25 Sep 2007 22:17:22 +0000 (15:17 -0700)]
Merge branch 'jn/web' into maint

* jn/web:
  gitweb: No difftree output for trivial merge
  gitweb: Remove parse_from_to_diffinfo code from git_patchset_body

13 years agoDo not over-quote the -f envelopesender value.
Jim Meyering [Tue, 25 Sep 2007 06:48:59 +0000 (08:48 +0200)]
Do not over-quote the -f envelopesender value.

Without this, the value passed to sendmail would have an extra set of
single quotes.  At least exim's sendmail emulation would object to that:

    exim: bad -f address "''": malformed address: ' \
      may not follow '
    error: hooks/post-receive exited with error code 1

Signed-off-by: Jim Meyering <>
Signed-off-by: Junio C Hamano <>
13 years agounexpected Make output (e.g. from --debug) causes build failure
Jim Meyering [Tue, 25 Sep 2007 06:42:16 +0000 (08:42 +0200)]
unexpected Make output (e.g. from --debug) causes build failure

Without this, the extra output produced e.g., by "make --debug"
would go into $INSTLIBDIR and then cause the sed command to fail.

Signed-off-by: Jim Meyering <>
Signed-off-by: Junio C Hamano <>
13 years agoFixed minor typo in t/ test command line.
Glenn Rempe [Mon, 24 Sep 2007 20:33:38 +0000 (13:33 -0700)]
Fixed minor typo in t/ test command line.

The git-send-email command line in the test was missing a single hyphen.

Signed-off-by: Glenn Rempe <>
Signed-off-by: Junio C Hamano <>
13 years agogitweb: No difftree output for trivial merge
Jakub Narebski [Sat, 8 Sep 2007 19:54:28 +0000 (21:54 +0200)]
gitweb: No difftree output for trivial merge

In 'commitdiff' view, for the merge commit, there is an extra header
for the difftree table, with links to commitdiffs to individual
parents.  Do not show such header when there is nothing to show, for
trivial merges.

This means that for trivial merge you have to go to 'commit' view
to get links to diffs to each parent.

Signed-off-by: Jakub Narebski <>
13 years agogitweb: Remove parse_from_to_diffinfo code from git_patchset_body
Jakub Narebski [Sat, 8 Sep 2007 19:49:11 +0000 (21:49 +0200)]
gitweb: Remove parse_from_to_diffinfo code from git_patchset_body

In commit 90921740bd00029708370673fdc537522aa48e6f
  "gitweb: Split git_patchset_body into separate subroutines"
a part of git_patchset_body code was separated into parse_from_to_diffinfo
subroutine.  But instead of replacing the separated code by the call to
mentioned subroutine, the call to subroutine was placed before the separated
code.  This patch removes parse_from_to_diffinfo code from git_patchset_body

Signed-off-by: Jakub Narebski <>
13 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Mon, 24 Sep 2007 00:08:45 +0000 (17:08 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git://
  User Manual: add a chapter for submodules
  user-manual: don't assume refs are stored under .git/refs

13 years agogit-svn: don't attempt to spawn pager if we don't want one
Eric Wong [Sat, 22 Sep 2007 01:48:45 +0000 (18:48 -0700)]
git-svn: don't attempt to spawn pager if we don't want one

Even though config_pager() unset the $pager variable, we were
blindly calling exec() on it through run_pager().

Noticed-by: Chris Moore <>
Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
13 years agoSupplant the "while case ... break ;; esac" idiom
David Kastrup [Sun, 23 Sep 2007 20:42:08 +0000 (22:42 +0200)]
Supplant the "while case ... break ;; esac" idiom

A lot of shell scripts contained stuff starting with

while case "$#" in 0) break ;; esac

and similar.  I consider breaking out of the condition instead of the
body od the loop ugly, and the implied "true" value of the
non-matching case is not really obvious to humans at first glance.  It
happens not to be obvious to some BSD shells, either, but that's
because they are not POSIX-compliant.  In most cases, this has been
replaced by a straight condition using "test".  "case" has the
advantage of being faster than "test" on vintage shells where "test"
is not a builtin.  Since none of them is likely to run the git
scripts, anyway, the added readability should be worth the change.

A few loops have had their termination condition expressed

Signed-off-by: David Kastrup <>
Signed-off-by: Junio C Hamano <>
13 years agoUser Manual: add a chapter for submodules
Miklos Vajna [Thu, 20 Sep 2007 00:34:14 +0000 (02:34 +0200)]
User Manual: add a chapter for submodules

Signed-off-by: Michael Smith <>
Signed-off-by: Miklos Vajna <>
Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: don't assume refs are stored under .git/refs
J. Bruce Fields [Mon, 10 Sep 2007 02:07:02 +0000 (22:07 -0400)]
user-manual: don't assume refs are stored under .git/refs

The scripts taken from Tony Luck's howto assume all refs can be found
under .git/refs, but this is not necessarily true, especially since
git-gc runs git-pack-refs.

Also add a note warning of this in the chapter that introduces refs, and
fix the same incorrect assumption in one other spot.

Signed-off-by: J. Bruce Fields <>
13 years agoDetect exec bit in more cases.
David Brown [Wed, 19 Sep 2007 20:12:48 +0000 (13:12 -0700)]
Detect exec bit in more cases.

git-p4 was missing the execute bit setting if the file had other attribute
bits set.

Acked-By: Simon Hausmann <>
13 years agoConjugate "search" correctly in the git-prune-packed man page.
Matt Kraai [Fri, 21 Sep 2007 14:37:18 +0000 (07:37 -0700)]
Conjugate "search" correctly in the git-prune-packed man page.

Signed-off-by: Matt Kraai <>
Signed-off-by: Junio C Hamano <>
13 years agoMove the paragraph specifying where the .idx and .pack files should be
Matt Kraai [Fri, 21 Sep 2007 13:43:44 +0000 (06:43 -0700)]
Move the paragraph specifying where the .idx and .pack files should be

Signed-off-by: Matt Kraai <>
Signed-off-by: Junio C Hamano <>
13 years agoDocumentation/git-lost-found.txt: drop unnecessarily duplicated name.
Junio C Hamano [Fri, 21 Sep 2007 19:52:30 +0000 (12:52 -0700)]
Documentation/git-lost-found.txt: drop unnecessarily duplicated name.

I only did this back when I wanted to make sure git-log and gitk work
properly with non Occidental characters.  There is really no reason to
keep it around.

Signed-off-by: Junio C Hamano <>
13 years agoGIT v1.5.3.2
Junio C Hamano [Wed, 19 Sep 2007 10:11:28 +0000 (03:11 -0700)]

Signed-off-by: Junio C Hamano <>
13 years agoFixed update-hook example allow-users format.
Väinö Järvelä [Tue, 18 Sep 2007 12:26:09 +0000 (15:26 +0300)]
Fixed update-hook example allow-users format.

The example provided with the update-hook-example does not work on
either bash 2.05b.0(1)-release nor 3.1.17(1)-release. The matcher did
not match the lines that it advertised to match, such as:

refs/heads/bw/        linus
refs/heads/tmp/*      *

In POSIX 1003.2 regular expressions, the star (*), is not an wildcard
meaning "match everything", it matches 0 or more matches of the atom
preceding it.

So to match "refs/heads/bw/topic-branch", the matcher should be written
as "refs/heads/bw/.*" to match "refs/heads/bw/" and everything after it.

Signed-off-by: Junio C Hamano <>
13 years agoDocumentation/git-svn: updated design philosophy notes
Eric Wong [Tue, 18 Sep 2007 23:50:42 +0000 (16:50 -0700)]
Documentation/git-svn: updated design philosophy notes

This section has not been updated in a while and
--branches/--tags/--trunk options are commonly used nowadays.

Noticed-by: Lars Hjemli <>
Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
13 years agot/t4014: test "am -3" with mode-only change.
Junio C Hamano [Tue, 18 Sep 2007 22:19:47 +0000 (15:19 -0700)]
t/t4014: test "am -3" with mode-only change.

Earlier commit ece7b74903007cee8d280573647243d46a6f3a95 added a test
for rebase that uses "am -3", but this adds a test to check "am -3"

Signed-off-by: Junio C Hamano <>
13 years agoFix lapsus in builtin-apply.c
Pierre Habouzit [Tue, 18 Sep 2007 10:12:58 +0000 (12:12 +0200)]
Fix lapsus in builtin-apply.c

Signed-off-by: Pierre Habouzit <>
Signed-off-by: Junio C Hamano <>
13 years agogit-push: documentation and tests for pushing only branches
Jeff King [Tue, 18 Sep 2007 08:15:34 +0000 (04:15 -0400)]
git-push: documentation and tests for pushing only branches

Commit 098e711e caused git-push to match only branches when
considering which refs to push. This patch updates the
documentation accordingly and adds a test for this behavior.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
13 years agogit-svnimport: Use separate arguments in the pipe for git-rev-parse
Matthias Urlichs [Tue, 18 Sep 2007 09:29:09 +0000 (11:29 +0200)]
git-svnimport: Use separate arguments in the pipe for git-rev-parse

Some people seem to create SVN branch names with spaces
or other shell metacharacters.

Signed-off-by: Matthias Urlichs <>
Signed-off-by: Junio C Hamano <>
13 years agoDocument ls-files --with-tree=<tree-ish>
Junio C Hamano [Fri, 14 Sep 2007 23:59:04 +0000 (16:59 -0700)]
Document ls-files --with-tree=<tree-ish>

Signed-off-by: Junio C Hamano <>
13 years agogit-commit: partial commit of paths only removed from the index
Junio C Hamano [Fri, 14 Sep 2007 23:53:58 +0000 (16:53 -0700)]
git-commit: partial commit of paths only removed from the index

Because a partial commit is meant to be a way to ignore what are
staged in the index, "git rm --cached A && git commit A" should
just record what is in A on the filesystem.  The previous patch
made the command sequence to barf, saying that A has not been
added yet.  This fixes it.

Signed-off-by: Junio C Hamano <>
13 years agogit-commit: Allow partial commit of file removal.
Junio C Hamano [Wed, 12 Sep 2007 23:04:22 +0000 (16:04 -0700)]
git-commit: Allow partial commit of file removal.

When making a partial commit, git-commit uses git-ls-files with
the --error-unmatch option to expand and sanity check the user
supplied path patterns.  When any path pattern does not match
with the paths known to the index, it errors out, in order to
catch a common mistake to say "git commit Makefiel cache.h"
and end up with a commit that touches only cache.h (notice the
misspelled "Makefile").  This detection however does not work
well when the path has already been removed from the index.

If you drop a path from the index and try to commit that
partially, i.e.

$ git rm COPYING
$ git commit -m 'Remove COPYING' COPYING

the command complains because git does not know anything about
COPYING anymore.

This introduces a new option --with-tree to git-ls-files and
uses it in git-commit when we build a temporary index to
write a tree object for the partial commit.

When --with-tree=<tree-ish> option is specified, names from the
given tree are added to the set of names the index knows about,
so we can treat COPYING file in the example as known.

Of course, there is no reason to use "git rm" and git-aware
people have long time done:

$ git commit -m 'Remove COPYING' COPYING

which works just fine.  But this caused a constant confusion.

Signed-off-by: Junio C Hamano <>
13 years agoMerge branch 'jc/grep-c' into maint
Junio C Hamano [Tue, 18 Sep 2007 06:56:40 +0000 (23:56 -0700)]
Merge branch 'jc/grep-c' into maint

* jc/grep-c:
  Split grep arguments in a way that does not requires to add /dev/null.

13 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Tue, 18 Sep 2007 06:50:17 +0000 (23:50 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git://
  git-gui: Disable native platform text selection in "lists"
  git-gui: Paper bag fix "Commit->Revert" format arguments
  git-gui: Provide 'uninstall' Makefile target to undo an installation
  git-gui: Font chooser to handle a large number of font families
  git-gui: Make backporting changes from i18n version easier
  git-gui: Don't delete send on Windows as it doesn't exist
  git-gui: Trim trailing slashes from untracked submodule names
  git-gui: Assume untracked directories are Git submodules
  git-gui: handle "deleted symlink" diff marker
  git-gui: show unstaged symlinks in diff viewer
  git-gui: Avoid use of libdir in Makefile
  git-gui: Disable Tk send in all git-gui sessions
  git-gui: lib/index.tcl: handle files with % in the filename properly
  git-gui: Properly set the state of "Stage/Unstage Hunk" action
  git-gui: Fix detaching current branch during checkout
  git-gui: Correct starting of git-remote to handle -w option

13 years agosend-email: make message-id generation a bit more robust
Junio C Hamano [Tue, 18 Sep 2007 04:18:20 +0000 (21:18 -0700)]
send-email: make message-id generation a bit more robust

Earlier code took Unix time and appended a few random digits.
If you are firing off many messages within a second, you could
issue the same id to different messages, which is a no-no.  If
you send out 31 messages within a single second, with random
integer taken out of rand(4200), you have about 10% chance of
producing the same message ID.

This fixes the problem by uses a prefix string which is
constant-per-invocation (time and pid), with a serial number for
each message generated by the process appended at the end.

Signed-off-by: Junio C Hamano <>
13 years agogit-apply: fix whitespace stripping
J. Bruce Fields [Sun, 16 Sep 2007 22:49:00 +0000 (18:49 -0400)]
git-apply: fix whitespace stripping

The algorithm isn't right here: it accumulates any set of 8 spaces into
tabs even if they're separated by tabs, so

<four spaces><tab><four spaces><tab>

is converted to


when it should be just


So teach git-apply that a tab hides any group of less than 8 previous
spaces in a row.

Signed-off-by: J. Bruce Fields <>
Signed-off-by: Junio C Hamano <>
13 years agogit-gui: Disable native platform text selection in "lists" gitgui-0.8.3
Shawn O. Pearce [Mon, 17 Sep 2007 03:12:19 +0000 (23:12 -0400)]
git-gui: Disable native platform text selection in "lists"

Sometimes we use a Tk text widget as though it were a listbox.
This happens typically when we want to show an icon to the left
of the text label or just when a text widget is generally a better
choice then the native listbox widget.

In these cases if we want the user to have control over the selection
we implement our own "in_sel" tag that shows the selected region
and we perform our own selection management in the background
via keybindings and mouse bindings.  In such uses we don't want
the user to be able to activate the native platform selection by
dragging their mouse through the text widget.  Doing so creates a
very confusing display and the user is left wondering what it may
mean to have two different types of selection in the same widget.

Tk doesn't allow us to delete the "sel" tag that it uses internally
to manage the native selection but it will allow us to make it
invisible by setting the tag to have the same display properties
as unselected text.  So long as we don't actually use the "sel"
tag for anything in code its effectively invisible.

Signed-off-by: Shawn O. Pearce <>
13 years agoapply --index-info: fall back to current index for mode changes
Johannes Schindelin [Mon, 17 Sep 2007 00:24:57 +0000 (01:24 +0100)]
apply --index-info: fall back to current index for mode changes

"git diff" does not record index lines for pure mode changes (i.e. no
lines changed).  Therefore, apply --index-info would call out a bogus

Instead, fall back to reading the info from the current index.

Incidentally, this fixes an error where git-rebase would not rebase a
commit including a pure mode change, and changes requiring a threeway

Noticed and later tested by Chris Shoemaker.

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
13 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Sun, 16 Sep 2007 06:18:05 +0000 (23:18 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git://
  core-tutorial: minor cleanup
  documentation: replace Discussion section by link to user-manual chapter
  user-manual: todo updates and cleanup
  user-manual: fix introduction to packfiles
  user-manual: move packfile and dangling object discussion
  user-manual: rewrite object database discussion
  user-manual: reorder commit, blob, tree discussion
  user-manual: rewrite index discussion
  user-manual: create new "low-level git operations" chapter
  user-manual: rename "git internals" to "git concepts"
  user-manual: move object format details to hacking-git chapter
  user-manual: adjust section levels in "git internals"

13 years agocore-tutorial: minor cleanup
J. Bruce Fields [Mon, 3 Sep 2007 14:34:27 +0000 (10:34 -0400)]
core-tutorial: minor cleanup

Revise the introduction for concision, add pointers to the tutorial and
user manual as appropriate, delete cvsimport note from the end, as that
work's been done elsewhere already.

Signed-off-by: J. Bruce Fields <>
13 years agodocumentation: replace Discussion section by link to user-manual chapter
J. Bruce Fields [Mon, 3 Sep 2007 04:01:19 +0000 (00:01 -0400)]
documentation: replace Discussion section by link to user-manual chapter

The "Discussion" section has a lot of useful information, but is a
little wordy, especially for an already-long man page, and is designed
for an audience more of potential git hackers than users, which probably
doesn't make as much sense as git matures.  Also, I (perhaps foolishly)
forked a version in the user manual, which has been significantly
rewritten in an attempt to address some of the above problems.

So, remove this section and replace it by a (very terse) summary of the
original material--my attempt at the World's Shortest Git Overview--and
a reference to the appropriate chapter of the user manual.  It's
unfortunate to remove something that's been in this place for a long
time, as some people may still depend on finding it there.  But I think
we'll want to do this some day anyway.

Cc: Andreas Ericsson <>
Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: todo updates and cleanup
J. Bruce Fields [Mon, 3 Sep 2007 03:28:49 +0000 (23:28 -0400)]
user-manual: todo updates and cleanup

Format a couple lists.  Reminder that we may want to add submodule
documentation some day.

13 years agouser-manual: fix introduction to packfiles
J. Bruce Fields [Sun, 9 Sep 2007 02:27:18 +0000 (22:27 -0400)]
user-manual: fix introduction to packfiles

Actually I don't think we've previously mentioned .git/objects, so we
need a different introduction here.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: move packfile and dangling object discussion
J. Bruce Fields [Sun, 9 Sep 2007 02:13:53 +0000 (22:13 -0400)]
user-manual: move packfile and dangling object discussion

The discussions of packfiles and dangling objects both belong in the
object database section.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: rewrite object database discussion
J. Bruce Fields [Sun, 10 Jun 2007 19:15:08 +0000 (15:15 -0400)]
user-manual: rewrite object database discussion

Rewrite the introduction.  Rewrite each section completely to make them
work in the new order, to add some examples, and to move plumbing
commands (like git-commit-tree) to the following chapter.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: reorder commit, blob, tree discussion
J. Bruce Fields [Sat, 1 Sep 2007 03:26:38 +0000 (23:26 -0400)]
user-manual: reorder commit, blob, tree discussion

The bottom-up blog, tree, commit order makes sense unless you want to
give explicit examples--it's easier to discover objects to examine if
you go in the other order....,

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: rewrite index discussion
J. Bruce Fields [Mon, 3 Sep 2007 16:59:55 +0000 (12:59 -0400)]
user-manual: rewrite index discussion

Add an example using git-ls-files, standardize on the new "index"
terminology (as opposed to "cache"), attempt to clarify discussion and
make it a little shorter, avoid some unnecessary jargon ("write-back

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: create new "low-level git operations" chapter
J. Bruce Fields [Mon, 3 Sep 2007 15:27:56 +0000 (11:27 -0400)]
user-manual: create new "low-level git operations" chapter

The low-level index operations aren't as important to regular users as
the rest of this "git concepts" chapter; so move it into a separate
chapter, and do some minor cleanup.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: rename "git internals" to "git concepts"
J. Bruce Fields [Fri, 31 Aug 2007 03:10:05 +0000 (23:10 -0400)]
user-manual: rename "git internals" to "git concepts"

"git internals" sounds like something only git developers must know
about, but this stuff should be of wider interest.  Rename the chapter
and give it a slightly friendlier introduction.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: move object format details to hacking-git chapter
J. Bruce Fields [Fri, 31 Aug 2007 03:07:05 +0000 (23:07 -0400)]
user-manual: move object format details to hacking-git chapter

Most of this is probably only of interest to git developers.

Signed-off-by: J. Bruce Fields <>
13 years agouser-manual: adjust section levels in "git internals"
J. Bruce Fields [Fri, 31 Aug 2007 02:49:33 +0000 (22:49 -0400)]
user-manual: adjust section levels in "git internals"

The descriptions of the various object types should all be a subsection
of the "Object Database" section.

I cribbed most of this chapter from the README (now core-intro.txt and
git(7)), because there's stuff in there people need to know and I was
too lazy to rewrite it.  The audience isn't quite right, though--the
chapter is a mixture of user- and developer- level documentation that
isn't as appropriate now as it was originally.

So, reserve this chapter for stuff users need to know, and move the
source code introduction into a new "git hacking" chapter where we'll
also move any hacker-only technical details.

Signed-off-by: J. Bruce Fields <>
13 years agorevision walker: --cherry-pick is a limited operation
Johannes Schindelin [Sat, 15 Sep 2007 17:39:52 +0000 (18:39 +0100)]
revision walker: --cherry-pick is a limited operation

We used to rely on the fact that cherry-pick would trigger the code path
to set limited = 1 in handle_commit(), when an uninteresting commit was

However, when cherry picking between two independent branches, i.e. when
there are no merge bases, and there is only linear development (which can
happen when you cvsimport a fork of a project), no uninteresting commit
will be encountered.

So set limited = 1 when --cherry-pick was asked for.

Noticed by Martin Bähr.

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
13 years agogit-sh-setup: typofix in comments
Junio C Hamano [Sat, 15 Sep 2007 23:32:23 +0000 (16:32 -0700)]
git-sh-setup: typofix in comments

Noticed by Anupam Srivastava.

Signed-off-by: Junio C Hamano <>
13 years agoSplit grep arguments in a way that does not requires to add /dev/null.
Junio C Hamano [Fri, 14 Sep 2007 07:31:00 +0000 (00:31 -0700)]
Split grep arguments in a way that does not requires to add /dev/null.

In order to (almost) always show the name of the file without
relying on "-H" option of GNU grep, we used to add /dev/null to
the argument list unless we are doing -l or -L.  This caused
"/dev/null:0" to show up when -c is given in the output.

It is not enough to add -c to the set of options we do not pass
/dev/null for.  When we have too many files, we invoke grep
multiple times and we need to avoid giving a widow filename to
the last invocation -- otherwise we will not see the name.

This keeps two filenames when the argv[] buffer is about to
overflow and we have not finished iterating over the index, so
that the last round will always have at least two paths to work
with (and not require /dev/null).

An obvious and the only exception is when there is only 1 file
that is given to the underlying grep, and in that case we avoid
passing /dev/null and let the external "grep -c" report only the
number of matches.

Signed-off-by: Junio C Hamano <>
13 years agoDocumentation/git-config.txt: AsciiDoc tweak to avoid leading dot
Junio C Hamano [Fri, 14 Sep 2007 21:51:08 +0000 (14:51 -0700)]
Documentation/git-config.txt: AsciiDoc tweak to avoid leading dot

Bram Schoenmakers noticed that git-config document was formatted
incorrectly.  Depending on the version of AsciiDoc and docbook
toolchain, it is sometimes taken as a numbered example by AsciiDoc,
some other times passed intact to roff format to confuse "man".

Since we refer to the repository metadata directory as $GIT_DIR
elsewhere, work it around by using that symbolic name.

Signed-off-by: Junio C Hamano <>
13 years agoAdd test to check recent fix to "git add -u"
Benoit Sigoure [Fri, 14 Sep 2007 08:29:04 +0000 (10:29 +0200)]
Add test to check recent fix to "git add -u"

An earlier commit fixed type-change case in "git add -u".
This adds a test to make sure we do not introduce regression.

At the same time, it fixes a stupid typo in the error message.

Signed-off-by: Benoit Sigoure <>
Signed-off-by: Junio C Hamano <>
13 years agoDocumentation/git-archive.txt: a couple of clarifications.
Jari Aalto [Fri, 14 Sep 2007 18:38:02 +0000 (21:38 +0300)]
Documentation/git-archive.txt: a couple of clarifications.

The description of the option gave impression that there
were several formats available by using three dots. There are
no other formats than tar and gzip currently supported.

Clarify that the archive goes to the standard output.

Signed-off-by: Jari Aalto <>
Signed-off-by: Junio C Hamano <>
13 years agoFix the rename detection limit checking
Linus Torvalds [Fri, 14 Sep 2007 17:39:48 +0000 (10:39 -0700)]
Fix the rename detection limit checking

This adds more proper rename detection limits. Instead of just checking
the limit against the number of potential rename destinations, we verify
that the rename matrix (which is what really matters) doesn't grow
ridiculously large, and we also make sure that we don't overflow when
doing the matrix size calculation.

This also changes the default limits from unlimited, to a rename matrix
that is limited to 100 entries on a side. You can raise it with the config
entry, or by using the "-l<n>" command line flag, but at least the default
is now a sane number that avoids spending lots of time (and memory) in
situations that likely don't merit it.

The choice of default value is of course very debatable. Limiting the
rename matrix to a 100x100 size will mean that even if you have just one
obvious rename, but you also create (or delete) 10,000 files, the rename
matrix will be so big that we disable the heuristics. Sounds reasonable to
me, but let's see if people hit this (and, perhaps more importantly,
actually *care*) in real life.

Signed-off-by: Linus Torvalds <>
Signed-off-by: Junio C Hamano <>
13 years agodiff --no-index: do not forget to run diff_setup_done()
Junio C Hamano [Fri, 14 Sep 2007 19:12:32 +0000 (12:12 -0700)]
diff --no-index: do not forget to run diff_setup_done()

Code inspection by Linus found this.

Signed-off-by: Junio C Hamano <>
13 years agogit-format-patch --in-reply-to: accept <message@id> with angle brackets
Junio C Hamano [Fri, 14 Sep 2007 05:30:45 +0000 (22:30 -0700)]
git-format-patch --in-reply-to: accept <message@id> with angle brackets

This will allow RFC-literate users to say:

format-patch --in-reply-to='<>'

without forcing them to strip the surrounding angle brackets
like this:

format-patch --in-reply-to=''

We accept both forms, and the latter gets necessary < and >
around it as before.

Signed-off-by: Junio C Hamano <>
13 years agogit-add -u: do not barf on type changes
Junio C Hamano [Fri, 14 Sep 2007 07:45:29 +0000 (00:45 -0700)]
git-add -u: do not barf on type changes

Signed-off-by: Junio C Hamano <>
13 years agoRemove duplicate note about removing commits with git-filter-branch
Ulrik Sverdrup [Thu, 13 Sep 2007 15:57:56 +0000 (17:57 +0200)]
Remove duplicate note about removing commits with git-filter-branch

A duplicate of an already existing section in the documentation of
git-filter-branch was added in commit
This patch removes that redundant section.

Signed-off-by: Ulrik Sverdrup <>
Signed-off-by: Junio C Hamano <>
13 years agogit-clone: improve error message if curl program is missing or not executable
Gerrit Pape [Thu, 13 Sep 2007 11:36:22 +0000 (11:36 +0000)]
git-clone: improve error message if curl program is missing or not executable

If the curl program is not available (or not executable), and git clone is
started to clone a repository through http, this is the output

 Initialized empty Git repository in /tmp/puppet/.git/
 /usr/bin/git-clone: line 37: curl: command not found
 Cannot get remote repository information.
 Perhaps git-update-server-info needs to be run there?

This patch improves the error message by checking the return code when
running curl to exit immediately if it's 126 or 127; the error output now

 Initialized empty Git repository in /tmp/puppet/.git/
 /usr/bin/git-clone: line 37: curl: command not found

Adrian Bridgett noticed this and reported through

Signed-off-by: Gerrit Pape <>
Signed-off-by: Junio C Hamano <>
13 years agohooks--update: Explicitly check for all zeros for a deleted ref.
Alexandre Julliard [Wed, 12 Sep 2007 21:36:03 +0000 (23:36 +0200)]
hooks--update: Explicitly check for all zeros for a deleted ref.

The previous check caused the hook to reject as unannotated any tag
whose SHA1 starts with a zero.

Signed-off-by: Alexandre Julliard <>
Signed-off-by: Junio C Hamano <>
13 years agogit-gui: Paper bag fix "Commit->Revert" format arguments
Shawn O. Pearce [Fri, 14 Sep 2007 00:08:53 +0000 (20:08 -0400)]
git-gui: Paper bag fix "Commit->Revert" format arguments

The recent bug fix to correctly handle filenames with %s (or any
other valid Tcl format specifier) missed a \ on this line and
caused the remaining format arguments to not be supplied when we
updated the status bar.  This caused a Tcl error anytime the user
was trying to perform a file revert.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: Provide 'uninstall' Makefile target to undo an installation
Shawn O. Pearce [Thu, 13 Sep 2007 23:50:35 +0000 (19:50 -0400)]
git-gui: Provide 'uninstall' Makefile target to undo an installation

Several users have requested a "make uninstall" target be provided
in the stock git-gui Makefile so that they can undo an install
if git-gui goes to the wrong place during the initial install,
or if they are unhappy with the tool and want to remove it from
their system.

We currently assume that the complete set of files we need to delete
are those defined by our Makefile and current source directory.
This could differ from what the user actually has installed if they
installed one version then attempt to use another to perform the
uninstall.  Right now I'm just going to say that is "pilot error".
Users should uninstall git-gui using the same version of source
that they used to make the installation.  Perhaps in the future we
could read tclIndex and base our uninstall decisions on its contents.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: Font chooser to handle a large number of font families
Shawn O. Pearce [Thu, 13 Sep 2007 23:07:46 +0000 (19:07 -0400)]
git-gui: Font chooser to handle a large number of font families

Simon Sasburg noticed that on X11 if there are more fonts than can
fit in the height of the screen Tk's native tk_optionMenu does not
offer scroll arrows to the user and it is not possible to review
all choices or to select those that are off-screen.  On Mac OS X
the tk_optionMenu works properly but is awkward to navigate if the
list is long.

This is a rewrite of our font selection by providing a new modal
dialog that the user can launch from the git-gui Options panel.
The dialog offers the user a scrolling list of fonts in a pane.
An example text shows the user what the font looks like at the size
they have selected.  But I have to admit the example pane is less
than ideal.  For example in the case of our diff font we really
should show the user an example diff complete with our native diff
syntax coloring.

Signed-off-by: Shawn O. Pearce <>
Acked-by: Simon Sasburg <>
13 years agogit-gui: Make backporting changes from i18n version easier
Shawn O. Pearce [Thu, 13 Sep 2007 23:04:14 +0000 (19:04 -0400)]
git-gui: Make backporting changes from i18n version easier

This is a very trivial hack to define a global mc procedure that
does not actually perform i18n translations on its input strings.
By declaring an mc procedure here in our maint version of git-gui
we can take patches that are intended for the latest development
version of git-gui and easily backport them without needing to
tweak the mc calls first.

Signed-off-by: Shawn O. Pearce <>
13 years agoMerge branch 'sp/maint-no-thin' into maint
Junio C Hamano [Wed, 12 Sep 2007 20:07:06 +0000 (13:07 -0700)]
Merge branch 'sp/maint-no-thin' into maint

* sp/maint-no-thin:
  Make --no-thin the default in git-push to save server resources

13 years agostash: end index commit log with a newline
Jean-Luc Herren [Wed, 12 Sep 2007 18:45:03 +0000 (20:45 +0200)]
stash: end index commit log with a newline

There was no newline at the end of the index commit message, putting
the shell prompt at its end after a 'git cat-file commit $id'.  This is
similar to what was fixed in 843103d69388a5c74ed99753e1c162a66835b04d.

Signed-off-by: Jean-Luc Herren <>
Signed-off-by: Junio C Hamano <>
13 years agogit-commit: Disallow amend if it is going to produce an empty non-merge commit
Dmitry V. Levin [Wed, 12 Sep 2007 16:14:22 +0000 (20:14 +0400)]
git-commit: Disallow amend if it is going to produce an empty non-merge commit

Right now one can amend the last non-merge commit using a dirty index
and in the process maybe cause the last commit to have the same tree
as its parent.  In such a case one would want to discard the last commit
instead of amending it.

This reverts commit 8588452ceb78b1da17652ba03f9942ef740e07ea.

Signed-off-by: Dmitry V. Levin <>
Signed-off-by: Junio C Hamano <>
13 years agogit-send-email.perl: Add angle brackets to In-Reply-To if necessary
David Kastrup [Wed, 12 Sep 2007 05:53:45 +0000 (07:53 +0200)]
git-send-email.perl: Add angle brackets to In-Reply-To if necessary

Although message-id by defintion should have surrounding angle
brackets, there is no point forcing people to type them in.

Signed-off-by: David Kastrup <>
Signed-off-by: Junio C Hamano <>
13 years agoFix a test failure (t9500-*.sh) on cygwin
Ramsay Jones [Tue, 11 Sep 2007 18:16:51 +0000 (19:16 +0100)]
Fix a test failure (t9500-*.sh) on cygwin

On filesystems where it is appropriate to set core.filemode
to false, test 29 ("commitdiff(0): mode change") fails when
git-commit does not notice a file (execute) permission change.

A fix requires noting the new file execute permission in the
index with a "git update-index --chmod=+x", prior to the commit.
Add a function (note_chmod) which implements this idea, and
insert a call in each test that modifies the x permission.

Signed-off-by: Ramsay Jones <>
Signed-off-by: Junio C Hamano <>
13 years agogit-gui: Don't delete send on Windows as it doesn't exist
Shawn O. Pearce [Tue, 11 Sep 2007 17:37:45 +0000 (13:37 -0400)]
git-gui: Don't delete send on Windows as it doesn't exist

The Windows port of Tk does not have the send command so we
cannot delete it from our global namespace, but the Mac OS
X and X11 ports do have it.  Switching this delete attempt
into a catch makes send go away, or stay away.

Signed-off-by: Shawn O. Pearce <>
13 years agoMake --no-thin the default in git-push to save server resources
Shawn O. Pearce [Sun, 9 Sep 2007 23:38:11 +0000 (19:38 -0400)]
Make --no-thin the default in git-push to save server resources

1) pushes happen less often than fetches, so the bandwidth saving is
   much less visible in that case overall.

2) thin packs have to be complemented with missing delta bases to be
   valid, so many received thin packs will take more disk space.

3) the bother of repacking should be distributed amongst "clients"
   i.e. fetchers and pushers as much as possible, and not the server
   being fetched or pushed, to keep disk and CPU usage low on the

This is why a fetch should get thin packs but a push should not.

Both Nico and I have been assuming that --no-thin was the default
behavior of git-push ever since Nico introduced --fix-thin into the
index-pack process, which allowed fetch and receive-pack to avoid
exploding packfiles received during transfer.  This patch finally
makes it so.

Signed-off-by: Shawn O. Pearce <>
Signed-off-by: Junio C Hamano <>
13 years agofix doc for --compression argument to pack-objects
Nicolas Pitre [Mon, 10 Sep 2007 04:15:29 +0000 (00:15 -0400)]
fix doc for --compression argument to pack-objects

Remove obsolete details (core.legacyheaders is always true now).

Signed-off-by: Nicolas Pitre <>
Signed-off-by: Junio C Hamano <>
13 years agogit-tag -s must fail if gpg cannot sign the tag.
Carlos Rica [Sun, 9 Sep 2007 00:39:29 +0000 (02:39 +0200)]
git-tag -s must fail if gpg cannot sign the tag.

Most of this patch code and message was written by Shawn O. Pearce.
I made some tests to know what the problem was, and then I changed
the code related with the SIGPIPE signal.

If the user has misconfigured `user.signingkey` in their .git/config
or just doesn't have any secret keys on their keyring and they ask
for a signed tag with `git tag -s` we better make sure the resulting
tag was actually signed by gpg.

Prior versions of builtin git-tag allowed this failure to slip
by without error as they were not checking the return value of
the finish_command() so they did not notice when gpg exited with
an error exit status.  They also did not fail if gpg produced an
empty output or if read_in_full received an error from the read
system call while trying to read the pipe back from gpg.

Finally, we did not actually honor any return value from the do_sign
function as it returns ssize_t but was being stored into an unsigned
long.  This caused the compiler to optimize out the die condition,
allowing git-tag to continue along and create the tag object.

However, when gpg gets a wrong username, it exits before any read was done
and then the writing process receives SIGPIPE and program is terminated.
By ignoring this signal, anyway, the function write_or_die gets EPIPE from
write_in_full and exits returning 0 to the system without a message.
Here we better call to write_in_full directly so we can fail
printing a message and return safely to the caller.

With these issues fixed `git-tag -s` will now fail to create the
tag and will report a non-zero exit status to its caller, thereby
allowing automated helper scripts to detect (and recover from)
failure if gpg is not working properly.

Proposed-by: Shawn O. Pearce <>
Signed-off-by: Carlos Rica <>
Signed-off-by: Junio C Hamano <>
13 years agogit-gui: Trim trailing slashes from untracked submodule names
Shawn O. Pearce [Mon, 10 Sep 2007 00:38:05 +0000 (20:38 -0400)]
git-gui: Trim trailing slashes from untracked submodule names

Oddly enough `git ls-files --others` supplies us the name of an
untracked submodule by including the trailing slash but that
same git version will not accept the name with a trailing slash
through `git update-index --stdin`.  Stripping off that final
slash character before loading it into our file lists allows
git-gui to stage changes to submodules just like any other file.

This change should give git-gui users some basic submodule support,
but it is strictly at the plumbing level as we do not actually know
about calling the git-submodule porcelain that is a recent addition
to git 1.5.3.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: Assume untracked directories are Git submodules
Shawn O. Pearce [Mon, 10 Sep 2007 00:13:10 +0000 (20:13 -0400)]
git-gui: Assume untracked directories are Git submodules

If `git ls-files --others` returned us the name of a directory then
it is because Git has decided that this directory itself contains a
valid Git repository and its files shouldn't be listed as untracked
for this repository.

In such a case we should label the object as a Git repository and
not just as a directory.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: handle "deleted symlink" diff marker
Michele Ballabio [Sun, 9 Sep 2007 19:09:07 +0000 (21:09 +0200)]
git-gui: handle "deleted symlink" diff marker

Signed-off-by: Michele Ballabio <>
Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: show unstaged symlinks in diff viewer
Michele Ballabio [Sun, 9 Sep 2007 19:04:45 +0000 (21:04 +0200)]
git-gui: show unstaged symlinks in diff viewer

git-gui has a minor problem with regards to symlinks that point
to directories.

git init
mkdir realdir
ln -s realdir linkdir
git gui

Now clicking on file names in the "unstaged changes" window,
there's a problem coming from the "linkdir" symlink: git-gui
complains with

error reading "file4": illegal operation on a directory

...even though git-gui can add that same symlink to the index just

This patch fix this by adding a check.

[sp: Minor fix to use {link} instead of "link" in condition
     and to only open the path if it is not a symlink.]

Signed-off-by: Michele Ballabio <>
Signed-off-by: Shawn O. Pearce <>
13 years agogit-svn: understand grafts when doing dcommit
Eric Wong [Sat, 8 Sep 2007 23:33:08 +0000 (16:33 -0700)]
git-svn: understand grafts when doing dcommit

Use the rev-list --parents functionality to read the parents
of the commit.  cat-file only shows the raw object with the
original parents and doesn't take into account grafts; so
we'll rely on rev-list machinery for the smarts here.

Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
13 years agogit-diff: don't squelch the new SHA1 in submodule diffs
Sven Verdoolaege [Sat, 8 Sep 2007 10:30:22 +0000 (12:30 +0200)]
git-diff: don't squelch the new SHA1 in submodule diffs

The code to squelch empty diffs introduced by commit
fb13227e089f22dc31a3b1624559153821056848 would inadvertently
populate filespec "two" of a submodule change using the uninitialized
(null) SHA1, thereby replacing the submodule SHA1 by 0{40} in the output.

This change teaches diffcore_skip_stat_unmatch to handle
submodule changes correctly.

Signed-off-by: Sven Verdoolaege <>
Signed-off-by: Junio C Hamano <>
13 years agogit-gui: Avoid use of libdir in Makefile
Shawn O. Pearce [Sun, 9 Sep 2007 03:05:43 +0000 (23:05 -0400)]
git-gui: Avoid use of libdir in Makefile

Dmitry V. Levin pointed out that on GNU linux libdir is often used
in Makefiles to mean "/usr/lib" or "/usr/lib64", a directory that
is meant to hold platform-specific binary files.  Using a different
libdir meaning here in git-gui's Makefile breaks idomatic expressions
like rpm specifile "make libdir=%_libdir".

Originally I asked that the git.git Makefile undefine libdir before
it calls git-gui's own Makefile but it turns out this is very hard
to do, if not impossible.  Renaming our libdir to gg_libdir resolves
this case with a minimum amount of fuss on our part.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: Disable Tk send in all git-gui sessions
Shawn O. Pearce [Sun, 9 Sep 2007 03:47:00 +0000 (23:47 -0400)]
git-gui: Disable Tk send in all git-gui sessions

The Tk designers blessed us with the "send" command, which on X11
will allow anyone who can connect to your X server to evaluate any
Tcl code they desire within any running Tk process.  This is just
plain nuts.  If git-gui wants someone running Tcl code within it
then would ask someone to supply that Tcl code to it; waiting for
someone to drop any random Tcl code into us is not fantastic idea.

By renaming send to the empty name the procedure will be removed
from the global namespace and Tk will stop responding to random Tcl
evaluation requests sent through the X server.  Since there is no
facility to filter these requests it is unlikely that we will ever
consider enabling this command.

Signed-off-by: Shawn O. Pearce <>
13 years agogit-gui: lib/index.tcl: handle files with % in the filename properly
Gerrit Pape [Fri, 7 Sep 2007 17:16:59 +0000 (17:16 +0000)]
git-gui: lib/index.tcl: handle files with % in the filename properly

Steps to reproduce the bug:

 $ mkdir repo && cd repo && git init
 Initialized empty Git repository in .git/
 $ touch 'foo%3Fsuite'
 $ git-gui

Then click on the 'foo%3Fsuite' icon to include it in a changeset, a
popup comes with:
'Error: bad field specifier "F"'

Vincent Danjean noticed the problem and also suggested the fix, reported

Signed-off-by: Gerrit Pape <>
Signed-off-by: Shawn O. Pearce <>