14 years agogit-branch --track: fix tracking branch computation.
Junio C Hamano [Sat, 16 Jun 2007 06:35:32 +0000 (23:35 -0700)]
git-branch --track: fix tracking branch computation.

The original code did not take hierarchical branch names into account at all.

[jc: cherry-picked 11f68d9 from 'master']

Tested-by: Gerrit Pape <>
Signed-off-by: Junio C Hamano <>
14 years ago$EMAIL is a last resort fallback, as it's system-wide.
Junio C Hamano [Sat, 16 Jun 2007 06:33:06 +0000 (23:33 -0700)]
$EMAIL is a last resort fallback, as it's system-wide.

$EMAIL is a system-wide setup that is used for many many many
applications. If the git user chose a specific setup,
then _this_ should be honoured rather than $EMAIL.

[jc: cherry-picked ec563e8 from 'master']

Signed-off-by: Pierre Habouzit <>
Signed-off-by: Junio C Hamano <>
14 years agomerge-recursive: refuse to merge binary files
Johannes Schindelin [Tue, 5 Jun 2007 02:36:49 +0000 (03:36 +0100)]
merge-recursive: refuse to merge binary files

[jc: cherry-picked 9f30855 from 'master']

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
14 years agoMove buffer_is_binary() to xdiff-interface.h
Johannes Schindelin [Tue, 5 Jun 2007 02:36:11 +0000 (03:36 +0100)]
Move buffer_is_binary() to xdiff-interface.h

We already have two instances where we want to determine if a buffer
contains binary data as opposed to text.

[jc: cherry-picked 6bfce93e from 'master']

Signed-off-by: Johannes Schindelin <>
Signed-off-by: Junio C Hamano <>
14 years agoAdd a local implementation of hstrerror for the system which do not have it
Alex Riesen [Wed, 13 Jun 2007 18:54:32 +0000 (20:54 +0200)]
Add a local implementation of hstrerror for the system which do not have it

The function converts the value of h_errno (last error of name
resolver library, see netdb.h).
One of systems which supposedly do not have the function is SunOS.
POSIX does not mandate its presence.

Signed-off-by: Alex Riesen <>
Signed-off-by: Junio C Hamano <>
14 years agoGenerated spec file to be ignored is named git.spec and not git-core.spec
Jakub Narebski [Wed, 13 Jun 2007 23:12:20 +0000 (01:12 +0200)]
Generated spec file to be ignored is named git.spec and not git-core.spec

Signed-off-by: Jakub Narebski <>
Signed-off-by: Junio C Hamano <>
14 years agoMerge branch 'ar/clone' into maint
Junio C Hamano [Wed, 13 Jun 2007 03:48:31 +0000 (20:48 -0700)]
Merge branch 'ar/clone' into maint

* ar/clone:
  Fix clone to setup the origin if its name ends with .git

14 years agoMerge branch 'sv/objfixes' into maint
Junio C Hamano [Wed, 13 Jun 2007 03:48:21 +0000 (20:48 -0700)]
Merge branch 'sv/objfixes' into maint

* sv/objfixes:
  Don't assume tree entries that are not dirs are blobs

14 years agoUnquote From line from patch before comparing with given from address.
Kristian Høgsberg [Mon, 11 Jun 2007 17:04:40 +0000 (13:04 -0400)]
Unquote From line from patch before comparing with given from address.

This makes --suppress-from actually work when you're unfortunate enough
to have non-ASCII in your name.  Also, if there's a match use the optionally
RFC2047 quoted version from the email.

Signed-off-by: Kristian Høgsberg <>
Signed-off-by: Junio C Hamano <>
14 years agogit-cherry: Document 'limit' command-line option
Luiz Fernando N. Capitulino [Mon, 11 Jun 2007 12:56:56 +0000 (09:56 -0300)]
git-cherry: Document 'limit' command-line option

Signed-off-by: Luiz Fernando N. Capitulino <>
Signed-off-by: Junio C Hamano <>
14 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Tue, 12 Jun 2007 07:05:24 +0000 (00:05 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git://
  git-gui: Save geometry before the window layout is damaged
  git-gui: Give amend precedence to HEAD over MERGE_MSG
  git-gui: Include 'war on whitespace' fixes from git.git

14 years agogit-gui: Save geometry before the window layout is damaged
Shawn O. Pearce [Tue, 12 Jun 2007 03:52:43 +0000 (23:52 -0400)]
git-gui: Save geometry before the window layout is damaged

Because Tk does not assure us the order that it will process
children in before it destroys the main toplevel we cannot safely
save our geometry data during a "bind . <Destroy>" event binding.
The geometry may have already changed as a result of a one or
more children being removed from the layout.  This was pointed
out in gitk by Mark Levedahl, and patched over there by commit

So we now also use "wm protocol . WM_DELETE_WINDOW" to detect when
the window is closed by the user, and forward that close event to
our main do_quit routine.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Give amend precedence to HEAD over MERGE_MSG
Shawn O. Pearce [Mon, 11 Jun 2007 23:39:55 +0000 (19:39 -0400)]
git-gui: Give amend precedence to HEAD over MERGE_MSG

Apparently (the command line commit user interface in
core Git) always gives precedence to the prior commit's message if
`commit --amend` is used and a $GIT_DIR/MERGE_MSG file also exists.

We actually were doing the same here in git-gui, but the amended
message got lost if $GIT_DIR/MERGE_MSG already existed because
we started a rescan immediately after loading the prior commit's
body into the edit buffer.  When that happened the rescan found
MERGE_MSG existed and replaced the commit message buffer with the
contents of that file.  This meant the user never saw us pick up
the commit message of the prior commit we are about to replace.

Johannes Sixt <> found this bug in git-gui by
running `git cherry-pick -n $someid` and then trying to amend the
prior commit in git-gui, thus combining the contents of $someid
with the contents of HEAD, and reusing the commit message of HEAD,
not $someid.  With the recent changes to make cherry-pick use the
$GIT_DIR/MERGE_MSG file Johannes saw git-gui pick up the message
of $someid, not HEAD.  Now we always use HEAD if we are amending.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Include 'war on whitespace' fixes from git.git
Shawn O. Pearce [Mon, 11 Jun 2007 23:06:10 +0000 (19:06 -0400)]
git-gui: Include 'war on whitespace' fixes from git.git

Earlier git.git applied a large "war on whitespace" patch that was
created using 'apply --whitespace=strip'.  Unfortunately a few of
git-gui's own files got caught in the mix and were also cleaned up.
That was a6080a0a44d5ead84db3dabbbc80e82df838533d.

This patch is needed in git-gui.git to reapply those exact same
changes here, otherwise our version generator script is unable to
obtain our version number from git-describe when we are hosted in
the git.git repository.

Signed-off-by: Shawn O. Pearce <>
14 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Mon, 11 Jun 2007 07:51:39 +0000 (00:51 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git:// (46 commits)
  git-gui: Changed blame header bar background to match main window
  git-gui: Favor the original annotations over the recent ones
  git-gui: Improve our labeling of blame annotation types
  git-gui: Use three colors for the blame viewer background
  git-gui: Jump to original line in blame viewer
  git-gui: Display both commits in our tooltips
  git-gui: Run blame twice on the same file and display both outputs
  git-gui: Display the "Loading annotation..." message in italic
  git-gui: Rename fields in blame viewer to better descriptions
  git-gui: Label the uncommitted blame history entry
  git-gui: Switch internal blame structure to Tcl lists
  git-gui: Cleanup redundant column management in blame viewer
  git-gui: Better document our blame variables
  git-gui: Remove unused commit_list from blame viewer
  git-gui: Automatically expand the line number column as needed
  git-gui: Make the line number column slightly wider in blame
  git-gui: Use lighter colors in blame view
  git-gui: Remove unnecessary space between columns in blame viewer
  git-gui: Remove the loaded column from the blame viewer
  git-gui: Clip the commit summaries in the blame history menu

14 years agotutorial: use "project history" instead of "changelog" in header
J. Bruce Fields [Sun, 10 Jun 2007 20:20:34 +0000 (16:20 -0400)]
tutorial: use "project history" instead of "changelog" in header

The word "changelog" seems a little too much like jargon to me, and beginners
must understand section headers so they know where to look for help.

Signed-off-by: "J. Bruce Fields" <>
14 years agoDocumentation: user-manual todo
J. Bruce Fields [Tue, 6 Feb 2007 07:55:07 +0000 (02:55 -0500)]
Documentation: user-manual todo

Some more user-manual todo's: how to share objects between repositories, how to

Signed-off-by: "J. Bruce Fields" <>
14 years agouser-manual: add a missing section ID
J. Bruce Fields [Tue, 5 Jun 2007 22:42:58 +0000 (18:42 -0400)]
user-manual: add a missing section ID

I forgot to give an ID for this section.

Signed-off-by: "J. Bruce Fields" <>
14 years agoFix typo in remote branch example in git user manual
Gerrit Pape [Tue, 5 Jun 2007 08:47:51 +0000 (08:47 +0000)]
Fix typo in remote branch example in git user manual

In Documentation/user-manual.txt the example
 $ git checkout --track -b origin/maint maint
under "Getting updates with git pull", should read
 $ git checkout --track -b maint origin/maint

This was noticed by Ron, and reported through

Signed-off-by: Gerrit Pape <>
Signed-off-by: "J. Bruce Fields" <>
14 years agouser-manual: quick-start updates
J. Bruce Fields [Tue, 5 Jun 2007 22:33:27 +0000 (18:33 -0400)]
user-manual: quick-start updates

Update text to reflect new position in appendix.

Update the name to reflect the fact that this is closer to reference
than tutorial documentation (as suggested by Jonas Fonseca).

Signed-off-by: "J. Bruce Fields" <>
14 years agoMake command description imperative statement, not third-person present.
william pursell [Sat, 9 Jun 2007 15:44:12 +0000 (16:44 +0100)]
Make command description imperative statement, not third-person present.

In several of the text messages, the tense of the verb is inconsistent.
For example, "Add" vs "Creates".  It is customary to use imperative for
command description.

Signed-off-by: Junio C Hamano <>
14 years agocheckout: do not get confused with ambiguous tag/branch names
Junio C Hamano [Fri, 8 Jun 2007 08:19:13 +0000 (01:19 -0700)]
checkout: do not get confused with ambiguous tag/branch names

Although it is not advisable, we have always allowed a branch
and a tag to have the same basename (i.e. it is not illegal to
have refs/heads/frotz and refs/tags/frotz at the same time).
When talking about a specific commit, the interpretation of
'frotz' has always been "use tag and then check branch",
although we warn when ambiguities exist.

However "git checkout $name" is defined to (1) first see if it
matches the branch name, and if so switch to that branch; (2)
otherwise it is an instruction to detach HEAD to point at the
commit named by $name.  We did not follow this definition when
$name appeared under both refs/heads/ and refs/tags/ -- we
switched to the branch but read the tree from the tagged commit,
which was utterly bogus.

Signed-off-by: Junio C Hamano <>
14 years agogit-gui: Changed blame header bar background to match main window gitgui-0.7.3
Shawn O. Pearce [Fri, 8 Jun 2007 06:02:48 +0000 (02:02 -0400)]
git-gui: Changed blame header bar background to match main window

The main window's diff header bar background switched from orange
to gold recently, and I liked the effect it had on readability of
the text.  Since I wanted the blame viewer to match, here it is.

Though this probably should be a user defined color, or at least
a constant somewhere that everyone can reference.

Signed-off-by: Shawn O. Pearce <>
14 years agoFix clone to setup the origin if its name ends with .git
Alex Riesen [Wed, 6 Jun 2007 23:39:05 +0000 (16:39 -0700)]
Fix clone to setup the origin if its name ends with .git

The problem is visible when cloning a local repo. The cloned
repository will have the origin url setup incorrectly: the origin name
will be copied verbatim in origin url of the cloned repository.
Normally, the name is to be expanded into absolute path.

Signed-off-by: Alex Riesen <>
Signed-off-by: Junio C Hamano <>
14 years agoDon't assume tree entries that are not dirs are blobs
Sam Vilain [Wed, 6 Jun 2007 10:25:17 +0000 (22:25 +1200)]
Don't assume tree entries that are not dirs are blobs

When scanning the trees in track_tree_refs() there is a "lazy" test
that assumes that entries are either directories or files.  Don't do

Signed-off-by: Junio C Hamano <>
14 years agogit-cvsimport: Make sure to use $git_dir always instead of .git sometimes
Michael Milligan [Tue, 5 Jun 2007 06:06:30 +0000 (00:06 -0600)]
git-cvsimport: Make sure to use $git_dir always instead of .git sometimes

CVS import was failing on a couple repos I was trying to import.
I was setting GIT_DIR=newproj.git and using the -i flag, but this bug
was thwarting the effort...  evil CVS.

Signed-off-by: Junio C Hamano <>
14 years agofix documentation of unpack-objects -n
Sam Vilain [Wed, 6 Jun 2007 21:23:16 +0000 (09:23 +1200)]
fix documentation of unpack-objects -n

unpack-objects -n didn't print the object list as promised on the
manual page, so alter the documentation to reflect the behaviour

Signed-off-by: Junio C Hamano <>
14 years agoAccept dates before 2000/01/01 when specified as seconds since the epoch
Johannes Sixt [Wed, 6 Jun 2007 08:11:55 +0000 (10:11 +0200)]
Accept dates before 2000/01/01 when specified as seconds since the epoch

Tests with git-filter-branch on a repository that was converted from
CVS and that has commits reaching back to 1999 revealed that it is
necessary to parse dates before 2000/01/01 when they are specified
as seconds since 1970/01/01. There is now still a limit, 100000000,
which is 1973/03/03 09:46:40 UTC, in order to allow that dates are
represented as 8 digits.

Signed-off-by: Johannes Sixt <>
Signed-off-by: Junio C Hamano <>
14 years agogit-gui: Favor the original annotations over the recent ones
Shawn O. Pearce [Wed, 6 Jun 2007 07:22:22 +0000 (03:22 -0400)]
git-gui: Favor the original annotations over the recent ones

Usually when you are looking at blame annotations for a region of
a file you are more interested in why something was originally
done then why it is here now.  This is because most of the time
when we get original annotation data we are looking at a simple
refactoring performed to better organize code, not to change its
semantic meaning or function.  Reorganizations are sometimes of
interest, but not usually.

We now show the original commit data first in the tooltip.  This
actually looks quite nice as the original commit will usually have an
author date prior to the current (aka move/copy) annotation's commit,
so the two commits will now tend to appear in chronological order.

I also found myself to always be clicking on the line of interest
in the file column but I always wanted the original tracking data
and not the move/copy data.  So I changed our default commit from
$asim_data (the simple move/copy annotation) to the more complex
$amov_data (the -M -C -C original annotation).

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Improve our labeling of blame annotation types
Shawn O. Pearce [Wed, 6 Jun 2007 07:03:16 +0000 (03:03 -0400)]
git-gui: Improve our labeling of blame annotation types

It feels wrong to call the -M -C -C annotations "move/copy tracking"
as they are actually the original locations.  So I'm relabeling
the status bar to show "copy/move tracking annotations" for the
current file (no -M -C -C) as that set of annotations tells us who
put the hunk here (who moved/copied it).  I'm now calling the -M
-C -C pass "original location annotations" as that's what we're
really digging for.

I also tried to clarify some of the text in the hover tooltip.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Use three colors for the blame viewer background
Shawn O. Pearce [Wed, 6 Jun 2007 06:53:36 +0000 (02:53 -0400)]
git-gui: Use three colors for the blame viewer background

To prevent neighboring lines that are different commits from using
the same background color we now use 3 colors and assign them
by selecting the color that is not used before or after the line
in question.  We still color "on the fly" as we receive hunks from
git-blame, but we delay our color decisions until we are getting
the original location data (the slower -M -C -C pass) as that is
usually more fine-grained than the current location data.

Credit goes to Martin Waitz for the tri-coloring concept.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Jump to original line in blame viewer
Shawn O. Pearce [Mon, 4 Jun 2007 08:07:35 +0000 (04:07 -0400)]
git-gui: Jump to original line in blame viewer

When the user clicks on a commit link within one of the columns
in the blame viewer we now jump them not just to that commit/file
pair but also to the line of the original file.  This saves the
user a lot of time, as they don't need to search through the new
file data for the chunk they were previously looking at.

We also restore the prior view when the user clicks the back button
to return to a pior commit/file pair that they were looking at.

Turned out this was quite tricky to get working in Tk.  Every time
I tried to jump the text widgets to the correct locations by way
of the "yview moveto" or "see" subcommands Tk performed the change
until the current event finished dispatching, and then reset the
views back to 0, making the change never take place.  Forcing Tk
to run the pending events before we jump the UI resolves the issue.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Display both commits in our tooltips
Shawn O. Pearce [Sat, 2 Jun 2007 23:03:55 +0000 (19:03 -0400)]
git-gui: Display both commits in our tooltips

If we have commit data from both the simple blame and the
rename/move tracking blame and they differ than there is a
bigger story to tell.  We now include data from both commits
so that the user can see that this link as moved, who moved
it, and where it originated from.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Run blame twice on the same file and display both outputs
Shawn O. Pearce [Sat, 2 Jun 2007 22:21:18 +0000 (18:21 -0400)]
git-gui: Run blame twice on the same file and display both outputs

We now perform two passes over any input file given to the blame
viewer.  Our first pass is a quick "git-blame" with no options,
getting the details of how each line arrived into this file.  We
are specifically ignoring/omitting the rename detection logic as
this first pass is to determine why things got into the state they
are in.

Once the first pass is complete and is displayed in the UI we run
a second pass, using the much more CPU intensive "-M -C -C" options
to perform extensive rename/movement detection.  The output of this
second pass is shown in a different column, allowing the user to see
for any given line how it got to be, and if it came from somewhere
else, where that is.

This is actually very instructive when run on our own lib/branch.tcl
script.  That file grew recently out of a very large block of code
in  The first pass shows when I created that file, while
the second pass shows the original commit information.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Display the "Loading annotation..." message in italic
Shawn O. Pearce [Sat, 2 Jun 2007 21:15:56 +0000 (17:15 -0400)]
git-gui: Display the "Loading annotation..." message in italic

If the user clicks on a line region that we haven't yet received
an annotation for from git-blame we show them "Loading annotation".
But I don't want the user to confuse this loading message with a
commit whose first line is "Loading annotation" and think we messed
up our display somehow.  Since we never use italics for anything
else, I'm going with the idea that italic slant can be used to show
data is missing/elided out at the time being.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Rename fields in blame viewer to better descriptions
Shawn O. Pearce [Sun, 3 Jun 2007 03:26:24 +0000 (23:26 -0400)]
git-gui: Rename fields in blame viewer to better descriptions

Calling the commit message pane $w_cmit is a tad confusing when
we also have the $w_cgrp column that shows the abbreviated SHA-1s.

So w_cmit -> w_cviewer, as it is the "commit viewer"; and
w_cgrp -> w_amov as it is the "annotated commit + move tracking"
column.  Also changed line_data -> amov_data, as that list is
exactly the results shown in w_amov.

Why call the column "move tracking"?  Because this column holds
data from "git blame -M -C".  I'm considering adding an additional
column that holds the data from "git blame" without -M/-C, showing
who did the copy/move, and when they did it.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Label the uncommitted blame history entry
Shawn O. Pearce [Sat, 2 Jun 2007 20:03:52 +0000 (16:03 -0400)]
git-gui: Label the uncommitted blame history entry

If the user runs the blame viewer on a working directory file
instead of a specific commit-ish then we have no value for the
commit SHA1 or the summary line; this causes the history menu
to get an empty entry at the very bottom.  We now look for this
odd case and call the meny entry "Working Directory".

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Switch internal blame structure to Tcl lists
Shawn O. Pearce [Sat, 2 Jun 2007 20:01:43 +0000 (16:01 -0400)]
git-gui: Switch internal blame structure to Tcl lists

The Tcl list datatype is significantly faster to work with than
the array type, especially if our indexes are a consecutive set
of numbers, like say line numbers in a file.

This rather large change reorganizes the internal data structure
of the blame viewer to use a proper Tcl list for the annotation
information about a line.  Each line is given its own list within
the larger line_data list, where the indexes correspond to various
facts about that particular line.

The interface does seem to be more responsive this way, with less
time required by Tcl to process blame, and to switch to another
version of the same file.  It could just be a placebo effect, but
either way most Tcl experts perfer lists for this type of work over

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Cleanup redundant column management in blame viewer
Shawn O. Pearce [Sat, 2 Jun 2007 19:34:52 +0000 (15:34 -0400)]
git-gui: Cleanup redundant column management in blame viewer

The code to handle our three different text widgets is a bit
on the messy side as we issue the same command on all three
widgets one at a time.  Adding (or removing) columns from the
viewer is messy, as a lot of locations need to have the new
column added into the sequence, or removed from it.

We also now delete the tags we create for each commit when
we switch to display another "commit:path" pair.  This way the
text viewer doesn't get bogged down with a massive number of tags
as we traverse through history.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Better document our blame variables
Shawn O. Pearce [Sat, 2 Jun 2007 19:13:35 +0000 (15:13 -0400)]
git-gui: Better document our blame variables

The array variable "order" used to be used to tell us in what
order each commit was received in.  Recent changes have removed
that need for an ordering and the "order" array is now just a
boolean 'do we have that commit yet' flag.

The colors were moved to fields, so they appear inside of the
blame viewer instance.  This keeps two different concurrently
running blame viewers from stepping on each other's ordering
of the colors in group_colors.

Most of the other fields were moved around a little bit so
that they are organized by major category and value lifespan.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Remove unused commit_list from blame viewer
Shawn O. Pearce [Sat, 2 Jun 2007 18:45:35 +0000 (14:45 -0400)]
git-gui: Remove unused commit_list from blame viewer

This list used to store the commits in the order we received
them in.  I originally was using it to update the colors of
the commit before and the commit after the current commit,
but since that interface concept turned out to be horribly
ugly and has been removed we no longer need this list.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Automatically expand the line number column as needed
Shawn O. Pearce [Sat, 2 Jun 2007 18:41:10 +0000 (14:41 -0400)]
git-gui: Automatically expand the line number column as needed

After we finish reading a chunk of data from the file stream
we know how many digits we need in the line number column to
show the current maximum line number.  If our line number column
isn't wide enough, we should expand it out to the correct width.

Any file over our default allowance of 5 digits (99,999 lines)
is so large that the slight UI "glitch" when we widen the column
out is trivial compared to the time it will take Git to fully do
the annotations.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Make the line number column slightly wider in blame
Shawn O. Pearce [Sat, 2 Jun 2007 18:35:44 +0000 (14:35 -0400)]
git-gui: Make the line number column slightly wider in blame

Most source code files are under 9,999 lines of text, so using a
field width of 5 characters meant that we should have had one char
padding on the left edge (because we right-justify the line number).
Unfortunately when I added the right margin earlier (when I removed
the padding) I ate into the extra character's space, losing the left
margin.  This put the line numbers too close to the commit column in
any file with more than 999 lines in it.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Use lighter colors in blame view
Shawn O. Pearce [Sat, 2 Jun 2007 18:31:01 +0000 (14:31 -0400)]
git-gui: Use lighter colors in blame view

The colors I originally picked out on a Mac OS X system look a
tad too dark on a Windows 2000 system; the greys are dark enough
to make it difficult to read some lines of text and the green used
to highlight the current commit was also difficult to read text on.

I also added a third grey to the mix, to try and help some files
that wind up with a number of neighboring chunks getting the same

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Remove unnecessary space between columns in blame viewer
Shawn O. Pearce [Sat, 2 Jun 2007 06:55:53 +0000 (02:55 -0400)]
git-gui: Remove unnecessary space between columns in blame viewer

On Mac OS X the OS has "features" that like to draw thick black
borders around the text field that has focus.  This is nice if
you want to know where your text is going and are blind as a bat,
but it isn't the best thing to have in a table that is being
faked through the abuse of Tk text widgets.

By setting our takefocus, highlightthickness and padx/y we can
get rid of this border and get our text widgets packed right next
to each other, with no padding between them.  This makes the blame
background color smoothly run across the entire line of commit data,
line number and file content.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Remove the loaded column from the blame viewer
Shawn O. Pearce [Sat, 2 Jun 2007 06:38:26 +0000 (02:38 -0400)]
git-gui: Remove the loaded column from the blame viewer

Originally I had placed this loaded column between the line number
and the file line data to help users know if a particular line has
received annotation data or not yet.  This way users would know if
the line(s) they were interested in were ready for viewing, or if
they still had to wait.  It also was an entertaining way for the
user to spend their time waiting for git-blame --incremental to
compute the complete set of annotations.

However it is completely useless now that we show the abbreviated
commit SHA-1 and author initials in the leftmost column.  That area
is empty until we get the annotation data, and as soon as we get it
in we display something there, indicating to the user that there is
now blame data ready.  Further with the tooltips the user is likely
to see the data as soon as it comes in, as they are probably not
keeping their mouse perfectly still.  So I'm removing the field to
save screen space for more useful things, like file content.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Clip the commit summaries in the blame history menu
Shawn O. Pearce [Sat, 2 Jun 2007 04:09:55 +0000 (00:09 -0400)]
git-gui: Clip the commit summaries in the blame history menu

Some commit lines can get really long when users enter a lot of
text without linewrapping (for example).  Rather than letting the
menu get out of control in terms of width we clip the summary to
the first 50+ characters.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Use a label instead of a button for the back button
Shawn O. Pearce [Sat, 2 Jun 2007 03:48:18 +0000 (23:48 -0400)]
git-gui: Use a label instead of a button for the back button

Apparently Tk on Mac OS X won't draw a button with an image using a
transparent background.  Instead it draws the button using some sort
of 3D effect, even though I asked for no relief and no border.  The
background is also not our orange that we expected it to be.

Earlier I had tried this same trick on Windows and it draws the same
way as the button did, so I'm going to switch to the label as that
seems to be more portable.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Show original filename in blame tooltip
Shawn O. Pearce [Sat, 2 Jun 2007 01:59:29 +0000 (21:59 -0400)]
git-gui: Show original filename in blame tooltip

If we have two commits right next to each other in the final
file and they were kept as different blocks in the leftmost
column then its probably because the original filename was
different.  To help the user know where they are digging into
when they click on that link we now show the original file in
the tooltip, but to save space we do so only if the original
file is not the same as the file we are currently viewing.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Combine blame groups only if commit and filename match
Shawn O. Pearce [Sat, 2 Jun 2007 01:54:06 +0000 (21:54 -0400)]
git-gui: Combine blame groups only if commit and filename match

Consecutive chunks of a file could come from the same commit, but
have different original file names.  Previously we would have put
them into a single group, but then the hyperlink would jump to only
one of the files, and the other would not be accessible.  Now we can
get to the other file too.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Allow digging through history in blame viewer
Shawn O. Pearce [Sat, 2 Jun 2007 01:47:12 +0000 (21:47 -0400)]
git-gui: Allow digging through history in blame viewer

gitweb has long had a feature where the user can click on any
commit the blame display and go visit that commit's information
page.  From the user could go get the blame display for the file
they are tracking, and try to digg through the history of any
part of the code they are interested in seeing.

We now offer somewhat similiar functionality in git-gui.  The 4
digit commit abreviation in the first column of our blame view is
now offered as a hyperlink if the commit isn't the one we are now
viewing the blame output for (as there is no point in linking back
to yourself).  Clicking on that link will stop the current blame
engine (if still running), push the new target commit onto the
history stack, and restart the blame viewer at that commit, using
the "original file name" as supplied by git-blame for that chunk
of the output.

Users can navigate back to a version they had been viewing before
by way of a back button, which offers the prior commits in a popup
menu displayed right below the back button.  I'm always showing the
menu here as the cost of switching between views is very high; you
don't want to jump to a commit you are not interested in looking at

During switches we throw away all data except the cached commit data,
as that is relatively small compared to most source files and their
annotation marks.  Unfortunately throwing this per-file data away in
Tcl seems to take some time; I probably should move the line indexed
arrays to proper lists and use [lindex] rather than the array lookup
(usually lists are faster).

We now start the git-blame process using "nice", so that its priority
will drop hopefully below our own.  If I don't do this the blame engine
gets a lot of CPU under Windows 2000 and the git-gui user interface is
almost non-responsive, even though Tcl is just sitting there waiting
for events.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Display a progress bar during blame annotation gathering
Shawn O. Pearce [Fri, 1 Jun 2007 22:29:20 +0000 (18:29 -0400)]
git-gui: Display a progress bar during blame annotation gathering

Computing the blame records for a large file with a long project
history can take git a while to run; traditionally we have shown
a little meter in the status area of our blame viewer that lets
the user know how many lines have been finished, and how far we
are through the process.

Usually such progress indicators are drawn with a little progress
bar in the window, where the bar shows how much has been completed
and hides itself when the process is complete.  I'm using a very
simple hack to do that: draw a canvas with a filled rectangle.

Of course the time remaining has absolutely no relationship to the
progress meter.  It could take very little time for git-blame to get
the first 90% of the file, and then it could take many times that to
get the remaining 10%.  So the progress meter doesn't really have any
sort of assurances that it relates to the true progress of the work.
But in practice on some ugly history it does seem to hold a reasonable
indicator to the completion status.  Besides, its amusing to watch and
that keeps the user from realizing git is being somewhat slow.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Allow the user to control the blame/commit split point
Shawn O. Pearce [Fri, 1 Jun 2007 21:55:43 +0000 (17:55 -0400)]
git-gui: Allow the user to control the blame/commit split point

At one point I tried to present the blame viewer to an audience of
people on a 640 by 480 pixel LCD projector.  This did not work at
all as the top area (the file data) was taking up all of the screen
realestate and the split point was not adjustable by the user.  In
general locking the user into a specific ratio of display is just
not user friendly.

So we now place a split pane control into the middle of our blame
window, so the user can adjust it to their current needs.  If the
window increases (or decreases) in height we assign the difference
to the file data area, as that is generally the area of the window
that users are trying to see more of when they grow the window.

Unfortunately there appears to be a bug in the "pack" layout manager
in Tcl/Tk 8.4.1.  The status bar and the lower commit pane was being
squashed if the window decreased in height.  I think the pack manager
was just not decreasing the size of the panedwindow slave properly if
the main window shrank.  Switching to the "grid" layout manager fixes
the problem, but is slightly uglier setup code.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Show author initials in blame groups
Shawn O. Pearce [Fri, 1 Jun 2007 20:10:56 +0000 (16:10 -0400)]
git-gui: Show author initials in blame groups

Frequently when I'm looking at blocks of code in the blame
viewer I want to know who is the culprit, or who I should
be praising for a job well done.  The tooltips nicely show
this if I mouse over a block, but it doesn't work to get
this detail at a glance.

Since we don't use the leftmost commit column for anything
after the first line within a commit group I'm now tossing
the author's initials into that field, right justified.  It
is quite clearly not a SHA-1 number as we always show the
SHA-1 in lowercase, while we explicitly select only the
uppercase characters from an author's name field, and only
those that are following whitespace.

I'm using initials here over anything else as they are quite
commonly unique within small development teams.  The leading
part of the email address field was out for some of the teams
I work with, as there the email addresses are all of the form
"".  That will never fit into the
4 characters available.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Space the commit group continuation out in blame view
Shawn O. Pearce [Fri, 1 Jun 2007 19:31:01 +0000 (15:31 -0400)]
git-gui: Space the commit group continuation out in blame view

The | in the continued lines of the same commit group as not
easily seen on the left edge; putting a single space in front
of the pipe makes it slightly more visually appealing to me as
I can follow the line down through the group to the next commit

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Cleanup minor style nit
Shawn O. Pearce [Fri, 1 Jun 2007 07:34:00 +0000 (03:34 -0400)]
git-gui: Cleanup minor style nit

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Remove unnecessary reshow of blamed commit
Shawn O. Pearce [Fri, 1 Jun 2007 07:33:28 +0000 (03:33 -0400)]
git-gui: Remove unnecessary reshow of blamed commit

Because we no longer redraw colors every time we select a particular
commit there is no need to redraw the screen after we get a new commit
in from blame --incremental.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Highlight the blame commit header from everything else
Shawn O. Pearce [Fri, 1 Jun 2007 07:19:27 +0000 (03:19 -0400)]
git-gui: Highlight the blame commit header from everything else

The selected commit's blame header is now drawn in green, using
the same background color that is shown in the main file content
viewer.  The result is a much better looking commit pane, as we
use bold for header "keys" and proportional width fonts for the
stuff that doesn't need to be fixed width to maintain its formatting.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Display tooltips in blame viewer
Shawn O. Pearce [Fri, 1 Jun 2007 07:01:45 +0000 (03:01 -0400)]
git-gui: Display tooltips in blame viewer

When the mouse is over a particular line and we have blame data
for that line, but its not the active commit, we should show the
user information about that commit like who the author was and
what the subject (first line) was.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Use arror cursor in blame viewer file data
Shawn O. Pearce [Fri, 1 Jun 2007 06:59:21 +0000 (02:59 -0400)]
git-gui: Use arror cursor in blame viewer file data

Since we don't allow the user to select text from the file
viewer right now I'm disabling the normal text cursor and
putting in a plain arror instead.  This way users don't
think they can select and copy text, because they can't.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Simplify consecutive lines that come from the same commit
Shawn O. Pearce [Fri, 1 Jun 2007 05:04:46 +0000 (01:04 -0400)]
git-gui: Simplify consecutive lines that come from the same commit

If two consecutive lines in the final file came from the same commit
then we store a "|" in the first column rather than the commit id,
for the second and subsequent lines in that block.  This cleans up
the interface so runs associated with the same commit can be more
easily seen visually.

We also now use the abbreviation "work" for the uncommitted stuff in
your working directory, rather than "0000".  This looks nicer to the
eyes and explains pretty quickly what is going on.

There was also a minor bug in the commit abbreviation column for the
last line of the file.  This is now also fixed.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Improve the coloring in blame viewer
Shawn O. Pearce [Fri, 1 Jun 2007 04:38:31 +0000 (00:38 -0400)]
git-gui: Improve the coloring in blame viewer

The git-gui blame viewer has always been ugly as s**t.  Linus Torvalds
suggested the coloring scheme I'm using here, which is two different
shades of grey for the background colors, and black text on a pale green
background for the currently selected/focused commit.

The difference is a massive improvement.  The interface no longer will
cause seizures in people who are prone to that sort of thing.  It no
longer uses a very offensive hot pink.  The green being current actually
makes sense.  And not having the background of the other non-current
lines change when you change the current commit is really a big deal.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Remove empty blank line at end of blame
Shawn O. Pearce [Fri, 1 Jun 2007 04:08:58 +0000 (00:08 -0400)]
git-gui: Remove empty blank line at end of blame

The blame viewer has this silly blank line at the bottom of it;
we really don't want to see it displayed as we will never get
any blame data for that line (it doesn't exist in the source).

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Cleanup blame::new widget initialization
Shawn O. Pearce [Fri, 1 Jun 2007 04:05:49 +0000 (00:05 -0400)]
git-gui: Cleanup blame::new widget initialization

A lot of this code was pre-class, which meant that I just sort of
copied and pasted my way through it, rather than being really smart
and using a variable for each widget's path name.  Since we have a
field for each path, we can use those throughout the constructor
and make things a lot neater.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Add a 4 digit commit abbreviation to the blame viewer
Shawn O. Pearce [Fri, 1 Jun 2007 03:58:55 +0000 (23:58 -0400)]
git-gui: Add a 4 digit commit abbreviation to the blame viewer

We now show the first 4 digits of each commit in the left most
column of our blame viewer, before the line numbers.  These are
drawn as the data becomes available from git-blame --incremental,
and helps the user to visually group lines together.

I'm using only the first 4 digits because within a given cluster
of lines its unlikely that two neighboring commits will have the
same 4 digit prefix.

Signed-off-by: Shawn O. Pearce <>
14 years agoNew selection indication and softer colors
Matthijs Melchior [Tue, 5 Jun 2007 21:50:02 +0000 (23:50 +0200)]
New selection indication and softer colors

The default font was already bold, so marking the selected file with bold
font did not work.  Change that to lightgray background.
Also, the header colors are now softer, giving better readability.

Signed-off-by: Matthijs Melchior <>
Signed-off-by: Shawn O. Pearce <>
14 years agoRevert "Make the installation target of git-gui a little less chatty"
Shawn O. Pearce [Sun, 3 Jun 2007 00:09:00 +0000 (20:09 -0400)]
Revert "Make the installation target of git-gui a little less chatty"

This reverts commit c289f6fa1f8642a5caf728ef8ff87afd5718cd99.

Junio pointed out that Alex's change breaks in some cases, like
when V=1, and is more verbose than it should be even if that worked.
I'm backing it out and redoing it.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Verify Tcl/Tk is new enough for our needs
Shawn O. Pearce [Sat, 2 Jun 2007 20:11:26 +0000 (16:11 -0400)]
git-gui: Verify Tcl/Tk is new enough for our needs

For quite a while we have been assuming the user is running on
a Tcl/Tk 8.4 or later platform.  This may not be the case on
some very old systems.  Unfortunately I am pretty far down the
path of using the Tcl/Tk 8.4 commands and options and cannot
easily work around them to support earlier versions of Tcl/Tk.
So we'll check that we are using the correct version up front,
and if not we'll stop with a related error message.

Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Attach font_ui to all spinbox widgets
Shawn O. Pearce [Sat, 2 Jun 2007 21:18:46 +0000 (17:18 -0400)]
git-gui: Attach font_ui to all spinbox widgets

Earlier I missed making sure our spinbox widgets used the same font
as the other widgets around them.  This meant that using a main font
with a size of 20 would make every widget in the options dialog huge,
but the spinboxes would be left with whatever the OS native font is.

Signed-off-by: Shawn O. Pearce <>
14 years agoGIT v1.5.2.1
Junio C Hamano [Sat, 2 Jun 2007 22:01:33 +0000 (15:01 -0700)]

Signed-off-by: Junio C Hamano <>
14 years agoUse =20 when rfc2047 encoding spaces.
Kristian Høgsberg [Fri, 1 Jun 2007 21:08:12 +0000 (17:08 -0400)]
Use =20 when rfc2047 encoding spaces.

Encode ' ' using '=20' even though rfc2047 allows using '_' for
readability.  Unfortunately, many programs do not understand this and
just leave the underscore in place.  Using '=20' seems to work better.

[jc: with adjustment to t3901]

Signed-off-by: Kristian Høgsberg <>
Signed-off-by: Junio C Hamano <>
14 years agoCreate a new manpage for the gitignore format, and reference it elsewhere
Josh Triplett [Sat, 2 Jun 2007 17:08:54 +0000 (10:08 -0700)]
Create a new manpage for the gitignore format, and reference it elsewhere

Only git-ls-files(1) describes the gitignore format in detail, and it does so
with reference to git-ls-files options.  Most users don't use the plumbing
command git-ls-files directly, and shouldn't have to look in its manpage for
information on the gitignore format.

Create a new manpage gitignore(5) (Documentation/gitignore.txt), and factor
out the gitignore documentation into that file, changing it to refer to
.gitignore and $GIT_DIR/info/exclude as used by porcelain commands.  Reference
gitignore(5) from other relevant manpages and documentation.  Remove
now-redundant information on exclude patterns from git-ls-files(1), leaving
only information on how git-ls-files options specify exclude patterns and what
precedence they have.

Signed-off-by: Josh Triplett <>
Signed-off-by: Junio C Hamano <>
14 years agoDocumentation: robustify asciidoc GIT_VERSION replacement
Jeff King [Fri, 1 Jun 2007 09:10:30 +0000 (05:10 -0400)]
Documentation: robustify asciidoc GIT_VERSION replacement

Instead of using sed on the resulting file, we now have a
git_version asciidoc attribute. This means that we don't
pipe the output of asciidoc, which means we can detect build

Problem reported by Scott Lamb, solution suggested by Jonas Fonseca.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>
14 years agogit-gui: Don't quit when we destroy a child widget
Shawn O. Pearce [Fri, 1 Jun 2007 22:20:30 +0000 (18:20 -0400)]
git-gui: Don't quit when we destroy a child widget

Its wrong to exit the application if we destroy a random widget
contained withing something else; especially if its some small
trivial thing that has no impact on the overall operation.

Signed-off-by: Shawn O. Pearce <>
14 years agoMake the installation target of git-gui a little less chatty
Alex Riesen [Fri, 1 Jun 2007 23:09:56 +0000 (01:09 +0200)]
Make the installation target of git-gui a little less chatty

Signed-off-by: Alex Riesen <>
Signed-off-by: Shawn O. Pearce <>
14 years agogit-gui: Allow as few as 0 lines of diff context
Shawn O. Pearce [Fri, 1 Jun 2007 03:32:54 +0000 (23:32 -0400)]
git-gui: Allow as few as 0 lines of diff context

Johannes Sixt pointed out that dropping to 0 lines of context
does allow the user to get more fine-grained hunk selection,
especially since we don't currently support "highlight and
apply (or revert)".

Signed-off-by: Shawn O. Pearce <>
14 years agoMerge branch 'maint-1.5.1' into maint
Junio C Hamano [Thu, 31 May 2007 07:09:26 +0000 (00:09 -0700)]
Merge branch 'maint-1.5.1' into maint

* maint-1.5.1:
  git-config: Improve documentation of git-config file handling
  git-config: Various small fixes to asciidoc documentation
  decode_85(): fix missing return.
  fix signed range problems with hex conversions

14 years agogit-config: Improve documentation of git-config file handling
Frank Lichtenheld [Thu, 31 May 2007 00:35:37 +0000 (02:35 +0200)]
git-config: Improve documentation of git-config file handling

The description which files git-config uses and how the various
command line options and environment variables affect its
behaviour was incomplete, outdated and confusing.

Signed-off-by: Frank Lichtenheld <>
Signed-off-by: Junio C Hamano <>
14 years agogit-config: Various small fixes to asciidoc documentation
Frank Lichtenheld [Thu, 31 May 2007 00:35:36 +0000 (02:35 +0200)]
git-config: Various small fixes to asciidoc documentation

Add '' around the only mentioned commandline option that didn't
have it.

Make reference to section EXAMPLE a link and rename it to
EXAMPLES because it actually contains a lot of examples.

Signed-off-by: Frank Lichtenheld <>
Signed-off-by: Junio C Hamano <>
14 years agogit-gui: Allow creating a branch when none exists
Shawn O. Pearce [Wed, 30 May 2007 15:27:49 +0000 (11:27 -0400)]
git-gui: Allow creating a branch when none exists

If the user has no branches at all (their refs/heads/ is empty)
and they are on a detached HEAD we have a valid repository but
there are no branches to populate into the branch pulldown in
the create branch dialog.  Instead of erroring out we can skip
that part of the dialog, much like we do with tracking branches
or tags when the user doesn't have any.

Signed-off-by: Shawn O. Pearce <>
14 years agodecode_85(): fix missing return.
Jerald Fitzjerald [Wed, 30 May 2007 12:39:58 +0000 (05:39 -0700)]
decode_85(): fix missing return.

When the function detected an invalid base85 sequence, it issued
an error message but forgot to return error status at that point
and kept going.

Signed-off-by: Jerald Fitzjerald <>
Signed-off-by: Junio C Hamano <>
14 years agofix signed range problems with hex conversions
Linus Torvalds [Wed, 30 May 2007 17:32:19 +0000 (10:32 -0700)]
fix signed range problems with hex conversions

Make hexval_table[] "const".  Also make sure that the accessor
function hexval() does not access the table with out-of-range
values by declaring its parameter "unsigned char", instead of
"unsigned int".

With this, gcc can just generate:

movzbl  (%rdi), %eax
movsbl  hexval_table(%rax),%edx
movzbl  1(%rdi), %eax
movsbl  hexval_table(%rax),%eax
sall    $4, %edx
orl     %eax, %edx

for the code to generate a byte from two hex characters.

Signed-off-by: Linus Torvalds <>
Signed-off-by: Junio C Hamano <>
14 years agocvsserver: Fix some typos in asciidoc documentation
Frank Lichtenheld [Sun, 27 May 2007 12:33:08 +0000 (14:33 +0200)]
cvsserver: Fix some typos in asciidoc documentation

Signed-off-by: Frank Lichtenheld <>
Signed-off-by: Junio C Hamano <>
14 years agocvsserver: Note that CVS_SERVER can also be specified as method variable
Frank Lichtenheld [Sun, 27 May 2007 12:33:07 +0000 (14:33 +0200)]
cvsserver: Note that CVS_SERVER can also be specified as method variable

Reasonably new versions of the cvs CLI client allow one to
specifiy CVS_SERVER as a method variable directly in
CVSROOT. This is way more convinient than using an
environment variable since it gets saved in CVS/Root.

Since I only discovered this by accident I guess there
might be others out there that learnt CVS on the 1.11
series (or even earlier) and profit from such a note
about cvs improvements in the last couple years.

Signed-off-by: Frank Lichtenheld <>
Signed-off-by: Junio C Hamano <>
14 years agocvsserver: Correct inetd.conf example in asciidoc documentation
Frank Lichtenheld [Sun, 27 May 2007 12:33:06 +0000 (14:33 +0200)]
cvsserver: Correct inetd.conf example in asciidoc documentation

While the given example worked, it made us look rather
incompetent. Give the correct reason why one needs the
more complex syntax and change the example to reflect

Signed-off-by: Frank Lichtenheld <>
Signed-off-by: Junio C Hamano <>
14 years agouser-manual: fixed typo in example
Steffen Prohaska [Sat, 26 May 2007 19:16:27 +0000 (21:16 +0200)]
user-manual: fixed typo in example

Signed-off-by: Steffen Prohaska <>
Signed-off-by: Junio C Hamano <>
14 years agoAdd test case for $Id$ expanded in the repository
Andy Parkins [Sun, 27 May 2007 10:52:11 +0000 (11:52 +0100)]
Add test case for $Id$ expanded in the repository

This test case would have caught the bug fixed by revision

It puts various forms of $Id$ into a file in the repository,
without allowing git to collapse them to uniformity.  Then enables the
$Id$ expansion on checkout, and checks that what is checked out has
coped with the various forms.

Signed-off-by: Andy Parkins <>
Signed-off-by: Junio C Hamano <>
14 years agoMerge branch 'maint-1.5.1' into maint
Junio C Hamano [Tue, 29 May 2007 06:54:26 +0000 (23:54 -0700)]
Merge branch 'maint-1.5.1' into maint

* maint-1.5.1:
  git-svn: avoid md5 calculation entirely if SVN doesn't provide one
  Fix stupid typo in lookup_tag()

14 years agogit-svn: avoid md5 calculation entirely if SVN doesn't provide one
Eric Wong [Sun, 27 May 2007 22:59:01 +0000 (15:59 -0700)]
git-svn: avoid md5 calculation entirely if SVN doesn't provide one

There's no point in calculating an MD5 if we're not going to use
it.  We'll also avoid the possibility of there being a bug in the
Perl MD5 library not being able to handle zero-sized files.

This is a followup to 20b3d206acbbb042c7ad5f42d36ff8d036a538c5,
which allows us to track repositories that do not provide MD5

Signed-off-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
14 years agoMerge branch 'maint' of git:// into maint
Junio C Hamano [Tue, 29 May 2007 03:23:10 +0000 (20:23 -0700)]
Merge branch 'maint' of git:// into maint

* 'maint' of git://
  git-gui: Guess our share/git-gui/lib path at runtime if possible
  Correct key bindings to Control-<foo>
  git-gui: Tighten internal pattern match for lib/ directory

14 years agoMakefile: Remove git-fsck and git-verify-pack from PROGRAMS
Nguyen Thai Ngoc Duy [Tue, 29 May 2007 02:05:43 +0000 (22:05 -0400)]
Makefile: Remove git-fsck and git-verify-pack from PROGRAMS

Those are builtins. Remove them from PROGRAMS variable

Signed-off-by: Nguyễn Thái Ngọc Duy <>
Signed-off-by: Junio C Hamano <>
14 years agoFix stupid typo in lookup_tag()
Johan Herland [Mon, 28 May 2007 23:21:25 +0000 (01:21 +0200)]
Fix stupid typo in lookup_tag()

Signed-off-by: Johan Herland <>
Signed-off-by: Junio C Hamano <>
14 years agogit-gui: Guess our share/git-gui/lib path at runtime if possible gitgui-0.7.2
Shawn O. Pearce [Sun, 27 May 2007 04:03:37 +0000 (00:03 -0400)]
git-gui: Guess our share/git-gui/lib path at runtime if possible

Johannes Sixt asked me to try to avoid embedding the runtime location
of git-gui's library directory in the executable script.  Not embedding
it helps the MinGW to be relocatable to another directory should a user
wish to install the programs in a directory other than the location the
packager wanted them to be installed into.

Most of this is a hack.  We try to determine if the path of our master
git-gui script will be able to locate the lib by ../share/git-gui/lib.
This should be true if $(gitexecdir) and $(libdir) have the same prefix.
If they do then we defer the assignment of $(libdir) until runtime, and
we get it from $argv0 rather than embedding it into the script itself.

Signed-off-by: Shawn O. Pearce <>
14 years agoMerge branch 'maint-1.5.1' into maint
Junio C Hamano [Sat, 26 May 2007 08:30:40 +0000 (01:30 -0700)]
Merge branch 'maint-1.5.1' into maint

* maint-1.5.1:
  Fix git-svn to handle svn not reporting the md5sum of a file, and test.
  More echo "$user_message" fixes.
  Add tests for the last two fixes.
  git-commit: use printf '%s\n' instead of echo on user-supplied strings
  git-am: use printf instead of echo on user-supplied strings
  Documentation: Add definition of "evil merge" to GIT Glossary
  Replace the last 'dircache's by 'index'
  Documentation: Clean up links in GIT Glossary

14 years agoFix git-svn to handle svn not reporting the md5sum of a file, and test.
James Y Knight [Thu, 24 May 2007 04:37:06 +0000 (00:37 -0400)]
Fix git-svn to handle svn not reporting the md5sum of a file, and test.

Acked-by: Eric Wong <>
Signed-off-by: Junio C Hamano <>
14 years agoFix mishandling of $Id$ expanded in the repository copy in convert.c
Andy Parkins [Fri, 25 May 2007 10:50:08 +0000 (11:50 +0100)]
Fix mishandling of $Id$ expanded in the repository copy in convert.c

If the repository contained an expanded ident keyword (i.e. $Id:XXXX$),
then the wrong bytes were discarded, and the Id keyword was not
expanded.  The fault was in convert.c:ident_to_worktree().

Previously, when a "$Id:" was found in the repository version,
ident_to_worktree() would search for the next "$" after this, and
discarded everything it found until then.  That was done with the loop:

    do {
        ch = *cp++;
        if (ch == '$')
    } while (rem);

The above loop left cp pointing one character _after_ the final "$"
(because of ch = *cp++).  This was different from the non-expanded case,
were cp is left pointing at the "$", and was different from the comment
which stated "discard up to but not including the closing $".  This
patch fixes that by making the loop:

    do {
        ch = *cp;
        if (ch == '$')
    } while (rem);

That is, cp is tested _then_ incremented.

This loop exits if it finds a "$" or if it runs out of bytes in the
source.  After this loop, if there was no closing "$" the expansion is
skipped, and the outer loop is allowed to continue leaving this
non-keyword as it was.  However, when the "$" is found, size is
corrected, before running the expansion:

    size -= (cp - src);

This is wrong; size is going to be corrected anyway after the expansion,
so there is no need to do it here.  This patch removes that redundant

To help find this bug, I heavily commented the routine; those comments
are included here as a bonus.

Signed-off-by: Andy Parkins <>
Signed-off-by: Junio C Hamano <>
14 years agoMore echo "$user_message" fixes.
Jeff King [Sat, 26 May 2007 07:33:03 +0000 (00:33 -0700)]
More echo "$user_message" fixes.

Here are fixes to more uses of 'echo "$msg"' where $msg could contain
backslashed sequence.

Signed-off-by: Junio C Hamano <>
14 years agoAdd tests for the last two fixes.
Junio C Hamano [Sat, 26 May 2007 07:26:20 +0000 (00:26 -0700)]
Add tests for the last two fixes.

This updates t4014 to check the two fixes for git-am and git-commit
we observed with "echo" that does backslash interpolation by default
without being asked with -e option.

Signed-off-by: Junio C Hamano <>
14 years agogit-commit: use printf '%s\n' instead of echo on user-supplied strings
Junio C Hamano [Sat, 26 May 2007 05:00:54 +0000 (22:00 -0700)]
git-commit: use printf '%s\n' instead of echo on user-supplied strings

This fixes the same issue git-am had, which was fixed by Jeff
King in the previous commit.  Cleverly enough, this commit's log
message is a good test case at the same time.

Signed-off-by: Junio C Hamano <>
14 years agogit-am: use printf instead of echo on user-supplied strings
Jeff King [Sat, 26 May 2007 03:42:36 +0000 (23:42 -0400)]
git-am: use printf instead of echo on user-supplied strings

Under some implementations of echo (such as that provided by
dash), backslash escapes are recognized without any other
options. This means that echo-ing user-supplied strings may
cause any backslash sequences in them to be converted. Using
printf resolves the ambiguity.

This bug can be seen when using git-am to apply a patch
whose subject contains the character sequence "\n"; the
characters are converted to a literal newline. Noticed by
Szekeres Istvan.

Signed-off-by: Jeff King <>
Signed-off-by: Junio C Hamano <>