Code

git.git
17 years agoUse .git/MERGE_MSG in cherry-pick/revert
Shawn O. Pearce [Tue, 8 May 2007 02:57:15 +0000 (22:57 -0400)]
Use .git/MERGE_MSG in cherry-pick/revert

Rather than storing the temporary commit message data in .msg (in
the working tree) we now store the message data in .git/MERGE_MSG.

By storing the message in the .git/ directory we are sure we will
never have a collision with a user file, should a project actually
have a ".msg" file in their top level tree.  We also don't need to
worry about leaving this stale file behind during a `reset --hard`
and have it show up in the output of status.

We are using .git/MERGE_MSG here to store the temporary message as
it is an already established convention between git-merge, git-am
and git-rebase that git-commit will default the user's edit buffer
to the contents of .git/MERGE_MSG.  If the user is going to need
to resolve this commit or wants to edit the message on their own
prepping that file with the desired message "just works".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 9 May 2007 05:46:56 +0000 (22:46 -0700)]
Merge branch 'maint'

* maint:
  GIT v1.5.1.4
  Add howto files to rpm packages.
  wcwidth redeclaration
  user-manual: fix clone and fetch typos

17 years agoGIT v1.5.1.4 v1.5.1.4
Junio C Hamano [Wed, 9 May 2007 05:10:56 +0000 (22:10 -0700)]
GIT v1.5.1.4

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd howto files to rpm packages.
Quy Tonthat [Tue, 8 May 2007 14:19:41 +0000 (00:19 +1000)]
Add howto files to rpm packages.

RPM packages did not include howto files which causes broken
links in howto-index.html

Signed-off-by: Quy Tonthat <qtonthat@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-gui: Format author/committer times in ISO format
Shawn O. Pearce [Wed, 9 May 2007 04:48:27 +0000 (00:48 -0400)]
git-gui: Format author/committer times in ISO format

This is a simple change to match what gitk does when it shows
a commit; we format using ISO dates (yyyy-mm-dd HH:MM:SS).

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Cleanup minor nits in blame code
Shawn O. Pearce [Wed, 9 May 2007 04:36:25 +0000 (00:36 -0400)]
git-gui: Cleanup minor nits in blame code

We can use [list ...] rather than "", especially when we are talking
about values as then they are properly escaped if necessary.  Small
nit, but probably not a huge deal as the only data being inlined here
is Tk paths.

Some of the lines in the parser code were longer than 80 characters
wide, and they actually were all the same value on the end part of
the line.  Rather than keeping the mess copied-and-pasted around we
can set the last argument into a local variable and reuse it many
times.

The commit display code was also rather difficult to read on an 80
character wide terminal, so I'm moving it all into a double quoted
string that is easier to read.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Generate blame on uncommitted working tree file
Shawn O. Pearce [Wed, 9 May 2007 02:48:47 +0000 (22:48 -0400)]
git-gui: Generate blame on uncommitted working tree file

If the user doesn't give us a revision parameter to our blame
subcommand then we can generate blame against the working tree
file by passing the file path off to blame with the --contents
argument.  In this case we cannot obtain the contents of the
file from the ODB; instead we must obtain the contents by
reading the working directory file as-is.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Smarter command line parsing for browser, blame
Shawn O. Pearce [Wed, 9 May 2007 02:36:01 +0000 (22:36 -0400)]
git-gui: Smarter command line parsing for browser, blame

The browser subcommand now optionally accepts a single revision
argument; if no revision argument is supplied then we use the
current branch as the tree to browse.  This is very common, so
its a nice option.

Our blame subcommand now tries to perform the same assumptions
as the command line git-blame; both the revision and the file
are optional.  We assume the argument is a filename if the file
exists in the working directory, otherwise we assume the argument
is a revision name.  A -- can be supplied between the two to force
parsing, or before the filename to force it to be a filename.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use prefix if blame is run in a subdirectory
Shawn O. Pearce [Wed, 9 May 2007 01:58:25 +0000 (21:58 -0400)]
git-gui: Use prefix if blame is run in a subdirectory

I think it was Andy Parkins who pointed out that git gui blame HEAD f
does not work if f is in a subdirectory and we are currently running
git-gui within that subdirectory.  This is happening because we did
not take the user's prefix into account when we computed the file
path in the repository.

We now assume the prefix as returned by rev-parse --show-prefix is
valid and we use that during the command line blame subcommand when
we apply the parameters.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Convert blame to the "class" way of doing things
Shawn O. Pearce [Wed, 9 May 2007 01:33:14 +0000 (21:33 -0400)]
git-gui: Convert blame to the "class" way of doing things

Our blame viewer code has historically been a mess simply
because the data for multiple viewers was all crammed into
a single pair of Tcl arrays.  This made the code hard to
read and even harder to maintain.

Now that we have a slightly better way of tracking the data
for our "meta-widgets" we can make use of it here in the
blame viewer to cleanup the code and make it easier to work
with long term.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Don't attempt to inline array reads in methods
Shawn O. Pearce [Wed, 9 May 2007 01:31:31 +0000 (21:31 -0400)]
git-gui: Don't attempt to inline array reads in methods

If a variable reference to a field is to an array, and it is
the only reference to that field in that method we cannot make
it an inlined [set foo] call as the regexp was converting the
Tcl code wrong.  We were producing "[set foo](x)" for "$foo(x)",
and that isn't valid Tcl when foo is an array.  So we just punt
if the only occurance has a ( after it.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Convert browser, console to "class" format
Shawn O. Pearce [Wed, 9 May 2007 00:33:47 +0000 (20:33 -0400)]
git-gui: Convert browser, console to "class" format

Now that we have a slightly easier method of working with per-widget
data we should make use of that technique in our browser and console
meta-widgets, as both have a decent amount of information that they
store on a per-widget basis and our current approach of handling
it is difficult to follow.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Define a simple class/method system
Shawn O. Pearce [Tue, 8 May 2007 23:54:05 +0000 (19:54 -0400)]
git-gui: Define a simple class/method system

As most of the git-gui interface is based upon "meta-widgets"
that need to carry around a good deal of state (e.g. console
windows, browser windows, blame viewer) we have a good deal
of messy code that tries to store this meta-widget state in
global arrays, where keys into the array are formed from a
union of a unique "object instance id" and the field name.

This is a simple class system for Tcl that allows us to
hide much of that mess by making Tcl do what it does best;
process strings to manipulate its own code during startup.

Each object instance is placed into its own namespace.  The
namespace is created when the object instance is created and
the namespace is destroyed when the object instance is removed
from the system.  Within that namespace we place variables for
each field within the class; these variables can themselves be
scalar values or full-blown Tcl arrays.

A simple class might be defined as:

  class map {
    field data
    field size 0

    constructor {} {
      return $this
    }
    method set {name value} {
      set data($name) $value
      incr size
    }
    method size {} {
      return $size
    } ifdeleted { return 0 }
  }

All fields must be declared before any constructors or methods.  This
allows our class to generate a list of the fields so it can properly
alter the definition of the constructor and method bodies prior to
passing them off to Tcl for definition with proc. A field may optionally
be given a default/initial value.  This can only be done for non-array
type fields.

Constructors are given full access to all fields of the class, so they
can initialize the data values.  The default values of fields (if any)
are set before the constructor runs, and the implicit local variable
$this is initialized to the instance identifier.

Methods are given access to fields they actually use in their body.
Every method has an implicit "this" argument inserted as its first
parameter; callers of methods must be sure they supply this value.

Some basic optimization tricks are performed (but not much).  We
try to only upvar (locally bind) fields that are accessed within a
method, but we err on the side of caution and may upvar more than
we need to.  If a variable is accessed only once within a method
and that access is by $foo (read) we avoid the upvar and instead
use [set foo] to obtain the value.  This is slightly faster as Tcl
does not need to lookup the variable twice.

We also offer some small syntatic sugar for interacting with Tk and
the fileevent callback system in Tcl.  If a field (say "foo") is used
as "@foo" we insert instead the true global variable name of that
variable into the body of the constructor or method.  This allows easy
binding to Tk textvariable options, e.g.:

  label $w.title -textvariable @title

Proper namespace callbacks can also be setup with the special cb proc
that is defined in each namespace.  [cb _foo a] will invoke the method
_foo in the current namespace, passing it $this as the first (implied)
parameter and a as the second parameter.  This makes it very simple to
connect an object instance to a -command option for a Tk widget or to
a fileevent readable or writable for a file channel.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow shift-{k,j} to select a range of branches to merge
Shawn O. Pearce [Wed, 9 May 2007 01:38:46 +0000 (21:38 -0400)]
git-gui: Allow shift-{k,j} to select a range of branches to merge

I found it useful to be able to use j/k (vi-like keys) to move
up and down the list of branches to merge and shift-j/k to do
the selection, much as shift-up/down (arrow keys) would alter
the selection.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Tue, 8 May 2007 14:42:16 +0000 (10:42 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Call changes "Staged" and "Unstaged" in file list titles.

17 years agogit-gui: Call changes "Staged" and "Unstaged" in file list titles.
Johannes Sixt [Tue, 8 May 2007 11:33:06 +0000 (13:33 +0200)]
git-gui: Call changes "Staged" and "Unstaged" in file list titles.

All menu entries talk about "staging" and "unstaging" changes, but the
titles of the file lists use different wording, which may confuse
newcomers.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agowcwidth redeclaration
Amos Waterland [Tue, 8 May 2007 04:46:08 +0000 (00:46 -0400)]
wcwidth redeclaration

Build fails for git 1.5.1.3 on AIX, with the message:

utf8.c:66: error: conflicting types for 'wcwidth'
/.../lib/gcc/powerpc-ibm-aix5.3.0.0/4.0.3/include/string.h:266: error: previous declaration of 'wcwidth' was here

Fix this by renaming our static variant to our own name.

Signed-off-by: Amos Waterland <apw@us.ibm.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agouser-manual: fix clone and fetch typos
J. Bruce Fields [Tue, 8 May 2007 03:34:26 +0000 (23:34 -0400)]
user-manual: fix clone and fetch typos

More typo fixes from Santi Béjar, plus a couple other mistakes I noticed
along the way.

Cc: Santi Béjar <sbejar@gmail.com>
Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove duplicate exports from Makefile
Shawn O. Pearce [Tue, 8 May 2007 03:53:06 +0000 (23:53 -0400)]
Remove duplicate exports from Makefile

We already export these variables earlier in the Makefile, right
after they were 'declared'.  There is no point in doing so again.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'master' of git://repo.or.cz/git-gui
Shawn O. Pearce [Tue, 8 May 2007 03:36:31 +0000 (23:36 -0400)]
Merge branch 'master' of git://repo.or.cz/git-gui

* 'master' of git://repo.or.cz/git-gui:
  git-gui: Use vi-like keys in merge dialog
  git-gui: Include commit id/subject in merge choices
  git-gui: Show all possible branches for merge
  git-gui: Move merge support into a namespace
  git-gui: Allow vi keys to scroll the diff/blame regions
  git-gui: Move console procs into their own namespace
  git-gui: Refactor into multiple files to save my sanity
  git-gui: Track our own embedded values and rebuild when they change
  git-gui: Refactor to use our git proc more often
  git-gui: Use option database defaults to set the font
  git-gui: Cleanup common font handling for font_ui
  git-gui: Correct line wrapping for too many branch message
  git-gui: Warn users before making an octopus merge
  git-gui: Include the subject in the status bar after commit

Also perform an evil merge change to update Git's main Makefile to
pass the proper options down into git-gui now that it depends on
reasonable values for 'sharedir' and 'TCL_PATH'.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use vi-like keys in merge dialog gitgui-0.7.0-rc1
Shawn O. Pearce [Sat, 5 May 2007 06:28:41 +0000 (02:28 -0400)]
git-gui: Use vi-like keys in merge dialog

Since we support vi-like keys for scrolling in other UI contexts
we can easily do so here too.  Tk's handy little `event generate'
makes this a lot easier than I thought it would be.  We may want
to go back and fix some of the other vi-like bindings to redirect
to the arrow and pageup/pagedown keys, rather than running the
view changes directly.

I've bound 'v' to visualize, as this is a somewhat common thing
to want to do in the merge dialog.  Control (or Command) Return
is also bound to start the merge, much as it is bound in the
main window to activate the commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Include commit id/subject in merge choices
Shawn O. Pearce [Thu, 3 May 2007 22:21:39 +0000 (18:21 -0400)]
git-gui: Include commit id/subject in merge choices

When merging branches using our local merge feature it can be
handy to know the first few digits of the commit the ref points
at as well as the short description of the branch name.

Unfortunately I'm unable to use three listboxes in a row, as Tcl
freaks out and refuses to let me have a selection in more than
one of them at any given point in time.  So instead we use a
fixed width font in the existing listbox and organize the data
into three columns.  Not nearly as nice looking, but users can
continue to use the listbox's features.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Show all possible branches for merge
Shawn O. Pearce [Wed, 2 May 2007 18:25:22 +0000 (14:25 -0400)]
git-gui: Show all possible branches for merge

Johannes Sixt pointed out that git-gui was randomly selecting
which branch (or tag!) it will show in the merge dialog when
more than one ref points at the same commit.  This can be a
problem for the user if they want to merge a branch, but the
ref that git-gui selected to display was actually a tag that
points at the commit at the tip of that branch.  Since the
user is looking for the branch, and not the tag, its confusing
to not find it, and worse, merging the tag causes git-merge to
generate a different message than if the branch was selected.

While I am in here and am messing around I have changed the
for-each-ref usage to take advantage of its --tcl formatting,
and to fetch the subject line of the commit (or tag) we are
looking at.  This way we could present the subject line in the
UI to the user, given them an even better chance to select
the correct branch.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Move merge support into a namespace
Shawn O. Pearce [Wed, 2 May 2007 17:56:27 +0000 (13:56 -0400)]
git-gui: Move merge support into a namespace

Like the console procs I have moved the code related to merge
support into their own namespace, so that they are isolated
from the rest of the world.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Allow vi keys to scroll the diff/blame regions
Shawn O. Pearce [Tue, 1 May 2007 19:51:09 +0000 (15:51 -0400)]
git-gui: Allow vi keys to scroll the diff/blame regions

Users who are used to vi and recent versions of gitk may want
to scroll the diff region using vi style keybindings.  Since
these aren't bound to anything else and that widget does not
accept focus for data input, we can easily support that too.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Move console procs into their own namespace
Shawn O. Pearce [Tue, 1 May 2007 06:59:53 +0000 (02:59 -0400)]
git-gui: Move console procs into their own namespace

To help modularize git-gui better I'm isolating the code and
variables required to handle our little console windows into
their own namespace.  This way we can say console::new rather
than new_console, and the hidden internal procs to create the
window and read data from our filehandle are off in their own
private little land, where most users don't see them.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Refactor into multiple files to save my sanity
Shawn O. Pearce [Tue, 8 May 2007 03:35:48 +0000 (23:35 -0400)]
git-gui: Refactor into multiple files to save my sanity

I'm finding it difficult to work with a 6,000+ line Tcl script
and not go insane while looking for a particular block of code.
Since most of the program is organized into different units of
functionality and not all users will need all units immediately
on startup we can improve things by splitting procs out into
multiple files and let auto_load handle things for us.

This should help not only to better organize the source, but
it may also improve startup times for some users as the Tcl
parser does not need to read as much script before it can show
the UI.  In many cases the user can avoid reading at least half
of git-gui now.

Unfortunately we now need a library directory in our runtime
location.  This is currently assumed to be $(sharedir)/git-gui/lib
and its expected that the Makefile invoker will setup some sort of
reasonable sharedir value for us, or let us assume its going to be
$(gitexecdir)/../share.

We now also require a tclsh (in TCL_PATH) to just run the Makefile,
as we use tclsh to generate the tclIndex for our lib directory.  I'm
hoping this is not an unncessary burden on end-users who are building
from source.

I haven't really made any functionality changes here, this is just a
huge migration of code from one file to many smaller files.  All of
the new changes are to setup the library path and install the library
files.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogitweb: Show combined diff for merge commits in 'commit' view
Jakub Narebski [Sun, 6 May 2007 23:10:08 +0000 (01:10 +0200)]
gitweb: Show combined diff for merge commits in 'commit' view

When commit shown is a merge commit (has more than one parent),
display combined difftree output (result of git-diff-tree -c).
Earlier (since commit 549ab4a30703012ff3a12b5455d319216805a8db)
difftree output (against first parent) was not printed for merges.

Examples of non-trivial merges:
  5bac4a671907604b5fb4e24ff682d5b0e8431931 (includes rename)
  addafaf92eeb86033da91323d0d3ad7a496dae83 (five parents)
  95f97567c1887d77f3a46b42d8622c76414d964d (evil merge)

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Show combined diff for merge commits in 'commitdiff' view
Jakub Narebski [Sun, 6 May 2007 23:10:07 +0000 (01:10 +0200)]
gitweb: Show combined diff for merge commits in 'commitdiff' view

When 'commitdiff' action is requested without 'hp' (hash parent)
parameter, and commit given by 'h' (hash) parameter is merge commit,
show merge as combined diff.

Earlier for merge commits without 'hp' parameter diff to first parent
was shown.

Note that in compact combined (--cc) format 'uninteresting' hunks
omission mechanism can make that there is no patch corresponding to
line in raw format (difftree) output. That is why (at least for now)
we use --combined and not --cc format for showing commitdiff for merge
commits.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Make it possible to use pre-parsed info in git_difftree_body
Jakub Narebski [Sun, 6 May 2007 23:10:06 +0000 (01:10 +0200)]
gitweb: Make it possible to use pre-parsed info in git_difftree_body

Make it possible to use pre-parsed, or generated by hand, difftree
info in git_difftree_body, similarly to how was and is it done in
git_patchset_body.

Use just introduced feature in git_commitdiff to parse difftree info
(raw diff output) only once: difftree info is now parsed in
git_commitdiff directly, and parsed information is passed to both
git_difftree_body and git_patchset_body. (Till now only git_blobdiff
made use of git_patchset_body ability to use pre-parsed or hand
generated info.) Additionally this makes rename info for combined diff
with renames (or copies) calculated only once in git_difftree_body;
the $difftree is modified and git_patchset_body makes use of added
info.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Add combined diff support to git_patchset_body
Jakub Narebski [Sun, 6 May 2007 23:10:05 +0000 (01:10 +0200)]
gitweb: Add combined diff support to git_patchset_body

Calling convention for combined diff similar to the one for
git_difftree_body subroutine: difftree info (first parameter) must be
result of calling git-diff-tree with -c/--cc option, and all parents
of a commit must be passed as last parameters. See also description in
  "gitweb: Add combined diff support to git_difftree_body"

This ability is not used yet.

Generating "src" file name for renames in combined diff was separated
into fill_from_file_info subroutine; git_difftree_body was modified to
use it. Currently git_difftree_body and git_patchset_body fills this
info separately.

The from-file line in two-line from-file/to-file header is not
hyperlinked: there can be more than one "from"/"src" file. This
differs from HTML output of ordinary (not combined) diff.

format_diff_line subroutine needs extra $from/$to parameters to format
combined diff patch line correctly.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Add combined diff support to git_difftree_body
Jakub Narebski [Sun, 6 May 2007 23:10:04 +0000 (01:10 +0200)]
gitweb: Add combined diff support to git_difftree_body

You have to pass all parents as final parameters of git_difftree_body
subroutine; the number of parents of a diff must be equal to the
number derived from parsing git-diff-tree output, raw combined diff
for git_difftree_body to display combined diff correctly (but it is
not checked).

Currently the possibility of displaying diffree of combined diff is
not used in gitweb code; git_difftree_body is always caled for
ordinary diff, and with only one parent.

Description of output for combined diff:
----------------------------------------

The difftree table for combined diff starts with a cell with pathname
of changed blob (changed file), which if possible is hidden link
(class="list") to the 'blob' view of final version (if it exists),
like for difftree for ordinary diff. If file was deleted in the final
commit then filename is not hyperlinked.

There is no cell with single file status (new, deleted, mode change,
rename), as for combined diff as there is no single status: different
parents might have different status.

If git_difftree_body was called from git_commitdiff (for 'commitdiff'
action) there is inner link to anchor to appropriate fragment (patch)
in patchset body; the "patch" link does not replace "diff" link like
for ordinary diff.

Each of "diff" links is in separate cell, contrary to output for
ordinary diff in which all links are (at least for now) in a single
cell.

For each parent, if file was not present we leave cell empty. If file
was deleted in the result, we provide link to 'blob' view. Otherwise
we provide link to 'commitdiff' view, even if patch (diff) consist
only of extended diff header, and contents is not changed (pure
rename, pure mode change). The only difference is that link to
"blobdiff" view with no contents change is with 'nochange' class.

At last, there is provided link to current version of file as "blob"
link, if the file was not deleted in the result, and lik to history of
a file, if there exists one. (The link to file history might be
confused, at least for now, by renames.)

Note that git-diff-tree raw output dor combined diff does not provide
filename before change for renames and copies; we use
git_get_path_by_hash to get "src" filename for renames (this means
additional call to git-ls-tree for a _whole_ tree).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Add parsing of raw combined diff format to parse_difftree_raw_line
Jakub Narebski [Sun, 6 May 2007 23:10:03 +0000 (01:10 +0200)]
gitweb: Add parsing of raw combined diff format to parse_difftree_raw_line

Add parsing line of raw combined diff ("git diff-tree -c/-cc" output)
as described in section "diff format for merges" in diff-format.txt
to parse_difftree_raw_line subroutine.

Returned hash (or hashref) has for combined diff 'nparents' key which
holds number of parents in a merge. At keys 'from_mode' and 'from_id'
there are arrayrefs holding modes and ids, respectively. There is no
'similarity' value, and there is only 'to_file' value and no
'from_file' value.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoProperly handle '0' filenames in import-tars
Shawn O. Pearce [Tue, 8 May 2007 01:13:40 +0000 (21:13 -0400)]
Properly handle '0' filenames in import-tars

Randal L. Schwartz pointed out multiple times that we should be
testing the length of the name string here, not if it is "true".
The problem is the string '0' is actually false in Perl when we
try to evaluate it in this context, as '0' is 0 numerically and
the number 0 is treated as a false value.  This would cause us
to break out of the import loop early if anyone had a file or
directory named "0".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agodiff -S: release the image after looking for needle in it
Junio C Hamano [Mon, 7 May 2007 08:24:27 +0000 (01:24 -0700)]
diff -S: release the image after looking for needle in it

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodiff -M: release the preimage candidate blobs after rename detection.
Junio C Hamano [Thu, 3 May 2007 20:04:53 +0000 (13:04 -0700)]
diff -M: release the preimage candidate blobs after rename detection.

We released the postimage candidate blobs after we are done to reduce
memory pressure.  Do the same for preimage candidate blobs.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodiff.c: do not use a separate "size cache".
Junio C Hamano [Mon, 7 May 2007 08:14:21 +0000 (01:14 -0700)]
diff.c: do not use a separate "size cache".

diff_filespec has a slot to record the size of the data already,
so make use of it instead of a separate size cache.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodiff: release blobs after generating textual diff.
Junio C Hamano [Thu, 3 May 2007 20:05:48 +0000 (13:05 -0700)]
diff: release blobs after generating textual diff.

This reduces the memory pressure when dealing with many paths.

An unscientific test of running "diff-tree --stat --summary -M"
between v2.6.19 and v2.6.20-rc1 in the linux kernel repository
indicates that the number of minor faults are reduced by 2/3.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse GIT_OBJECT_DIR for temporary files of pack-objects
Alex Riesen [Mon, 7 May 2007 17:33:24 +0000 (19:33 +0200)]
Use GIT_OBJECT_DIR for temporary files of pack-objects

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix minor documentation errors
Michael Spang [Sun, 6 May 2007 18:09:34 +0000 (14:09 -0400)]
Fix minor documentation errors

- git-ls-files.txt: typo in description of --ignored
- git-clean.txt: s/forceRequire/requireForce/

Signed-off-by: Michael Spang <mspang@uwaterloo.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agot7300: Basic tests for git-clean
Michael Spang [Sun, 6 May 2007 19:50:54 +0000 (15:50 -0400)]
t7300: Basic tests for git-clean

This tests the -d, -n, -f, -x, and -X options to git-clean.

Signed-off-by: Michael Spang <mspang@uwaterloo.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodir.c: Omit non-excluded directories with dir->show_ignored
Michael Spang [Mon, 7 May 2007 02:35:04 +0000 (22:35 -0400)]
dir.c: Omit non-excluded directories with dir->show_ignored

This makes "git-ls-files --others --directory --ignored" behave
as documented and consequently also fixes "git-clean -d -X".
Previously, git-clean would remove non-excluded directories
even when using the -X option.

Signed-off-by: Michael Spang <mspang@uwaterloo.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'master' of git://repo.or.cz/git-gui
Junio C Hamano [Mon, 7 May 2007 21:47:14 +0000 (14:47 -0700)]
Merge branch 'master' of git://repo.or.cz/git-gui

* 'master' of git://repo.or.cz/git-gui:
  git-gui: Correctly handle UTF-8 encoded commit messages

17 years agoMerge branch 'maint'
Junio C Hamano [Mon, 7 May 2007 21:46:48 +0000 (14:46 -0700)]
Merge branch 'maint'

* maint:
  Documentation: don't reference non-existent 'git-cvsapplycommit'
  user-manual: stop deprecating the manual
  user-manual: miscellaneous editing
  user-manual: fix .gitconfig editing examples
  user-manual: clean up fast-forward and dangling-objects sections
  user-manual: add section ID's
  user-manual: more discussion of detached heads, fix typos
  git-gui: Allow spaces in path to 'wish'
  gitk: Allow user to choose whether to see the diff, old file, or new file

17 years agoMerge branch 'maint' of git://repo.or.cz/git-gui into maint
Junio C Hamano [Mon, 7 May 2007 21:46:15 +0000 (14:46 -0700)]
Merge branch 'maint' of git://repo.or.cz/git-gui into maint

* 'maint' of git://repo.or.cz/git-gui:
  git-gui: Allow spaces in path to 'wish'

17 years agoMerge git://git2.kernel.org/pub/scm/gitk/gitk into maint
Junio C Hamano [Mon, 7 May 2007 21:40:41 +0000 (14:40 -0700)]
Merge git://git2./pub/scm/gitk/gitk into maint

* git://git2.kernel.org/pub/scm/gitk/gitk:
  gitk: Allow user to choose whether to see the diff, old file, or new file

17 years agoAdded a reference to git-add in the documentation for git-update-index
Matthieu Moy [Sun, 6 May 2007 21:11:56 +0000 (23:11 +0200)]
Added a reference to git-add in the documentation for git-update-index

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument git add -u introduced earlier.
Matthieu Moy [Sun, 6 May 2007 21:11:55 +0000 (23:11 +0200)]
Document git add -u introduced earlier.

This command was implemented, but not documented in
dfdac5d9b877641d3aad8ec49f64c2730a3487e3.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: don't reference non-existent 'git-cvsapplycommit'
Jeff King [Mon, 7 May 2007 05:28:34 +0000 (01:28 -0400)]
Documentation: don't reference non-existent 'git-cvsapplycommit'

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agouser-manual: stop deprecating the manual
J. Bruce Fields [Mon, 7 May 2007 05:01:42 +0000 (01:01 -0400)]
user-manual: stop deprecating the manual

It's just as much a work-in-progress, but at least now it's gotten
enough technical review to shake out most of the really bad lies, so
hopefully it doesn't do any actual damage.  And if we encourage people
to read it, they'll be more likely to whine about it, which will help
get it fixed faster.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
17 years agouser-manual: miscellaneous editing
J. Bruce Fields [Mon, 7 May 2007 04:56:45 +0000 (00:56 -0400)]
user-manual: miscellaneous editing

I cherry-picked some additional miscellaneous fixes from those suggested
by Santi Béjar, including fixes to:

- correct discussion of repository/HEAD->repository shortcut
- add mention of git-mergetool
- add mention of --track
- mention "-f" as well as "+" for fetch

Cc: Santi Béjar <sbejar@gmail.com>
Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
17 years agouser-manual: fix .gitconfig editing examples
J. Bruce Fields [Mon, 7 May 2007 04:16:33 +0000 (00:16 -0400)]
user-manual: fix .gitconfig editing examples

Santi Béjar points out that when telling people how to "introduce
themselves" to git we're advising them to replace their entire
.gitconfig file.  Fix that.

Cc: "Santi Béjar <sbejar@gmail.com>
Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
17 years agouser-manual: clean up fast-forward and dangling-objects sections
J. Bruce Fields [Mon, 30 Apr 2007 15:11:02 +0000 (11:11 -0400)]
user-manual: clean up fast-forward and dangling-objects sections

The previous commit calls attention to the fact that we have two
sections each devoted to fast-forwards and to dangling objects.  Revise
and attempt to differentiate them a bit.  Some more reorganization may
be required later....

Signed-off-by: J. Bruce Fields
17 years agouser-manual: add section ID's
J. Bruce Fields [Wed, 18 Apr 2007 04:46:19 +0000 (00:46 -0400)]
user-manual: add section ID's

Any section lacking an id gets an annoying warning when you build
the manual.  More seriously, the table of contents then generates
volatile id's which change with every build, with the effect that
we get URL's that change all the time.

The ID's are manually generated and sometimes inconsistent, but
that's OK.

XXX: what to do about the preface?

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
17 years agouser-manual: more discussion of detached heads, fix typos
J. Bruce Fields [Wed, 18 Apr 2007 04:20:46 +0000 (00:20 -0400)]
user-manual: more discussion of detached heads, fix typos

Nicolas Pitre pointed out a couple typos and some room for improvement
in the discussion of detached heads.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Cc: Nicolas Pitre <nico@cam.org>
17 years agoGIT v1.5.2-rc2 v1.5.2-rc2
Junio C Hamano [Sun, 6 May 2007 08:07:04 +0000 (01:07 -0700)]
GIT v1.5.2-rc2

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Sun, 6 May 2007 07:21:03 +0000 (00:21 -0700)]
Merge branch 'maint'

* maint:
  Small correction in reading of commit headers
  Documentation: fix typo in git-remote.txt
  Add test for blame corner cases.
  blame: -C -C -C
  blame: Notice a wholesale incorporation of an existing file.
  Fix --boundary output
  diff format documentation: describe raw combined diff format
  Mention version 1.5.1 in tutorial and user-manual
  Add --no-rebase option to git-svn dcommit
  Fix markup in git-svn man page

17 years agoHandle return code of parse_commit in revision machinery
Alex Riesen [Fri, 4 May 2007 21:54:57 +0000 (23:54 +0200)]
Handle return code of parse_commit in revision machinery

This fixes a crash in broken repositories where random commits
suddenly disappear.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSmall correction in reading of commit headers
Alex Riesen [Fri, 4 May 2007 21:51:32 +0000 (23:51 +0200)]
Small correction in reading of commit headers

Check if a line of the header has enough characters to possibly
contain the requested prefix.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: fix typo in git-remote.txt
James Bowes [Sat, 5 May 2007 18:23:12 +0000 (14:23 -0400)]
Documentation: fix typo in git-remote.txt

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd test for blame corner cases.
Junio C Hamano [Sun, 6 May 2007 05:36:19 +0000 (22:36 -0700)]
Add test for blame corner cases.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoblame: -C -C -C
Junio C Hamano [Sun, 6 May 2007 04:18:57 +0000 (21:18 -0700)]
blame: -C -C -C

When you do this, existing "blame -C -C" would not find that the
latter half of the file2 came from the existing file1:

... both file1 and file2 are tracked ...
$ cat file1 >>file2
$ git add file1 file2
$ git commit

This is because we avoid the expensive find-copies-harder code
that makes unchanged file (in this case, file1) as a candidate
for copy & paste source when annotating an existing file
(file2).  The third -C now allows it.  However, this obviously
makes the process very expensive.  We've actually seen this
patch before, but I dismissed it because it covers such a narrow
(and arguably stupid) corner case.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoblame: Notice a wholesale incorporation of an existing file.
Junio C Hamano [Sat, 5 May 2007 16:13:26 +0000 (09:13 -0700)]
blame: Notice a wholesale incorporation of an existing file.

The -C option to blame tries to find a section of a preimage
file by running diff against the lines whose origin is still
unknown, and excluding the different parts.  The code however
did not cover the case where the tail part of the section
matched, which we handle for the normal non-move/copy codepath.

This breakage was most visible when preimage file matches in its
entirety and failed to pass blame in such a case.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix --boundary output
Linus Torvalds [Sat, 5 May 2007 22:18:03 +0000 (15:18 -0700)]
Fix --boundary output

"git log --boundary" incorrectly honoured the option only when
"left-right" was enabled.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodiff format documentation: describe raw combined diff format
Jakub Narebski [Fri, 4 May 2007 22:48:35 +0000 (00:48 +0200)]
diff format documentation: describe raw combined diff format

Add description of raw combined diff format to diff-formats.txt,
as "diff format for merges" section, before "Generating patches..."
section.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMention version 1.5.1 in tutorial and user-manual
Carl Worth [Fri, 4 May 2007 18:27:10 +0000 (11:27 -0700)]
Mention version 1.5.1 in tutorial and user-manual

Most other documentation will frequently be read from an installation
of git so will naturally be associated with the installed version.
But these two documents in particular are often read from web pages
while users are still exploring git. It's important to mention
version 1.5.1 since these documents provide example commands that
won't work with previous versions of git.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd --no-rebase option to git-svn dcommit
Karl Hasselström [Thu, 3 May 2007 05:51:35 +0000 (07:51 +0200)]
Add --no-rebase option to git-svn dcommit

git-svn dcommit exports commits to Subversion, then imports them back
to git again, and last but not least rebases or resets HEAD to the
last of the new commits. I guess this rebasing is convenient when
using just git, but when the commits to be exported are managed by
StGIT, it's really annoying. So add an option to disable this
behavior. And document it, too!

Signed-off-by: Karl Hasselström <kha@treskal.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix markup in git-svn man page
Karl Hasselström [Fri, 4 May 2007 07:03:22 +0000 (09:03 +0200)]
Fix markup in git-svn man page

Some of the existing markup was just plain broken, and some subcommand
options weren't indented properly.

Signed-off-by: Karl Hasselström <kha@treskal.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-tag(1): -v option is a subcommand; fix code block
Jonas Fonseca [Tue, 1 May 2007 07:24:59 +0000 (09:24 +0200)]
git-tag(1): -v option is a subcommand; fix code block

When the -v is passed, git-tag will exit after it is processed like it
does with the -d and -l options. Additionally, missing code block caused
wrong rendering of an option example.

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoImprove request-pull to handle non-rebased branches
Shawn O. Pearce [Tue, 1 May 2007 06:08:23 +0000 (02:08 -0400)]
Improve request-pull to handle non-rebased branches

This is actually a few different changes to request-pull,
making it slightly smarter:

 1) Minor cleanup of revision->base variable names, making it
    follow the head/headrev naming convention that is already
    in use.

 2) Compute the merge-base between the two revisions upfront
    and reuse that selected merge-base to create the diffstat.

 3) Refuse to generate a pull request for branches that have no
    existing relationship.  These aren't very common and would mess
    up our diffstat generation.

 4) Disable the PAGER when running shortlog and diff, as these
    would otherwise activate the pager for each command when
    git-request-pull is run on a tty.  Instead users can get the
    entire output paged (if desired) using `git -p request-pull`.

 5) Use shortlog rather than `git log | git shortlog` now that
    recent shortlog versions are able to run the revision listing
    internally.

 6) Attempt to resolve the input URL using the user's configured
    remotes.  This is useful if the URL you want the recipient to
    see is also the one you used to push your changes.  If not a
    config-file remote could easily be setup for the public URL
    and request-pull could be passed that name instead.

 7) Automatically guess and include the remote branch name in the
    body of the message.  We list the branch name immediately after
    the URL, making it easy for the recipient to copy and paste
    the entire line onto a `git pull` command line.  Rumor has it
    Linus likes this format, for exactly that reason.

    If multiple branches at the remote match $headrev we take the
    first one returned by peek-remote and assume it is suitable.

    If no branches are available we warn the user about the problem,
    but insert a static string that is not a valid branch name
    and would be obvious to anyone reading the message as being
    totally incorrect.  This allows users to still generate a
    template message without network access (for example) and
    hand-correct the bits that cannot be verified.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Fri, 4 May 2007 06:26:54 +0000 (23:26 -0700)]
Merge branch 'maint'

* maint:
  gitweb: use decode_utf8 directly
  posix compatibility for t4200
  Document 'opendiff' value in config.txt and git-mergetool.txt
  Allow PERL_PATH="/usr/bin/env perl"
  Make xstrndup common
  diff.c: fix "size cache" handling.
  http-fetch: Disable use of curl multi support for libcurl < 7.16.

17 years agogitweb: use decode_utf8 directly
Ismail Dönmez [Tue, 1 May 2007 21:12:13 +0000 (00:12 +0300)]
gitweb: use decode_utf8 directly

Using decode() tries to decode data that is already UTF-8 and
borks, but decode_utf8 from Encode.pm has a built-in safety
against that.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoposix compatibility for t4200
Bryan Larsen [Wed, 2 May 2007 21:53:23 +0000 (17:53 -0400)]
posix compatibility for t4200

Fix t4200 so that it also works on OS X by not relying on gnu
extensions to sed.

Signed-off-by: Bryan Larsen <bryan@larsen.st>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument 'opendiff' value in config.txt and git-mergetool.txt
Arjen Laarhoven [Thu, 3 May 2007 18:29:15 +0000 (20:29 +0200)]
Document 'opendiff' value in config.txt and git-mergetool.txt

Signed-off-by: Arjen Laarhoven <arjen@yaph.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow PERL_PATH="/usr/bin/env perl"
Bryan Larsen [Thu, 3 May 2007 22:58:56 +0000 (18:58 -0400)]
Allow PERL_PATH="/usr/bin/env perl"

There is a mechanism PERL_PATH in the Makefile to specify path to
Perl binary, but sometimes it is convenient to let 'env' figure
out where Perl comes from, with PERL_PATH="/usr/bin/env perl".

Allowing this would make things easier to MacPorts, where we wish
to work with the MacPorts perl if it is installed, but fall back
to the system perl if it isn't.

Signed-off-by: Bryan Larsen <bryan@larsen.st>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMake xstrndup common
Daniel Barkalow [Thu, 3 May 2007 02:49:41 +0000 (22:49 -0400)]
Make xstrndup common

This also improves the implementation to match how strndup is
specified (by GNU): if the length given is longer than the string,
only the string's length is allocated and copied, but the string need
not be null-terminated if it is at least as long as the given length.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodiff.c: fix "size cache" handling.
Junio C Hamano [Thu, 3 May 2007 20:00:43 +0000 (13:00 -0700)]
diff.c: fix "size cache" handling.

We broke the size-cache handling when we changed the function
signature of sha1_object_info() in 21666f1a.  We obviously
wanted to cache the size we obtained when sha1_object_info()
succeeded, not when it failed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agohttp-fetch: Disable use of curl multi support for libcurl < 7.16.
Alexandre Julliard [Wed, 2 May 2007 12:53:23 +0000 (14:53 +0200)]
http-fetch: Disable use of curl multi support for libcurl < 7.16.

curl_multi_remove_handle() is broken in libcurl < 7.16, in that it
doesn't correctly update the active handles count when a request is
aborted. This causes the transfer to hang forever waiting for the
handle count to become less than the number of active requests.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoblame: use .mailmap unconditionally
Junio C Hamano [Thu, 3 May 2007 06:58:14 +0000 (23:58 -0700)]
blame: use .mailmap unconditionally

There really isn't any point in turning off .mailmap.  The
number of mailmap lookups are bounded by number of lines in the
target file, and the real blame processing is much more
expensive.  If it turns out to be too costly, we should optimize
the mailmap lookup itself, instead of avoiding the call.

If the author information of commits of the project are
relatively clean, .mailmap would have only small number of
entries, and the overhead of looking it up will not be high.  On
the other hand, if the author information is really screwed up
that a good .mailmap needs to be maintained to run shortlog,
giving uncleaned names in blame output is not helpful at all
either.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 2 May 2007 18:27:31 +0000 (11:27 -0700)]
Merge branch 'maint'

* maint:
  cvsserver: Handle re-added files correctly
  Fix compilation of test-delta

17 years agoMerge branch 'maint' of git://repo.or.cz/git/fastimport into maint
Junio C Hamano [Wed, 2 May 2007 18:00:16 +0000 (11:00 -0700)]
Merge branch 'maint' of git://repo.or.cz/git/fastimport into maint

* 'maint' of git://repo.or.cz/git/fastimport:
  Teach import-tars about GNU tar's @LongLink extension.

17 years agocvsserver: Handle re-added files correctly
Frank Lichtenheld [Wed, 2 May 2007 00:43:14 +0000 (02:43 +0200)]
cvsserver: Handle re-added files correctly

We can't unconditionally assign revision 1.1 to
newly added files. In case the file did exist in the
past and was deleted we need to honor the old
revision number.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDon't use seq in tests, not everyone has it
Shawn O. Pearce [Wed, 2 May 2007 16:59:55 +0000 (12:59 -0400)]
Don't use seq in tests, not everyone has it

For example Mac OS X lacks the seq command.  So we cannot use it
there.  A good old while loop works just as good.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoReuse fixup_pack_header_footer in index-pack
Shawn O. Pearce [Wed, 2 May 2007 16:14:15 +0000 (12:14 -0400)]
Reuse fixup_pack_header_footer in index-pack

Now that fast-import is using a "library function" to handle
correcting its packfile's object count and trailing SHA-1 we
should reuse the same function in index-pack, to reduce the
size of the code we must maintain.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoCreate pack-write.c for common pack writing code
Dana L. How [Wed, 2 May 2007 16:13:14 +0000 (12:13 -0400)]
Create pack-write.c for common pack writing code

Include a generalized fixup_pack_header_footer() in this new file.
Needed by git-repack --max-pack-size feature in a later patchset.

[sp: Moved close(pack_fd) to callers, to support index-pack, and
     changed name to better indicate it is for packfiles.]

Signed-off-by: Dana L. How <danahow@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'gfi-maint' into gfi-master
Shawn O. Pearce [Wed, 2 May 2007 17:24:10 +0000 (13:24 -0400)]
Merge branch 'gfi-maint' into gfi-master

* gfi-maint:
  Teach import-tars about GNU tar's @LongLink extension.

17 years agoTeach import-tars about GNU tar's @LongLink extension.
Johannes Schindelin [Tue, 1 May 2007 21:42:44 +0000 (23:42 +0200)]
Teach import-tars about GNU tar's @LongLink extension.

This extension allows GNU tar to process file names in excess of the 100
characters defined by the original tar standard. It does this by faking a
file, named '././@LongLink' containing the true file name, and then adding
the file with a truncated name. The idea is that tar without this
extension will write out a file with the long file name, and write the
contents into a file with truncated name.

Unfortunately, GNU tar does a lousy job at times. When truncating results
in a _directory_ name, it will happily use _that_ as a truncated name for
the file.

An example where this actually happens is gcc-4.1.2, where the full path
of the file WeThrowThisExceptionHelper.java truncates _exactly_ before the
basename. So, we have to support that ad-hoc extension.

This bug was noticed by Chris Riddoch on IRC.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Track our own embedded values and rebuild when they change
Shawn O. Pearce [Sun, 29 Apr 2007 07:02:10 +0000 (03:02 -0400)]
git-gui: Track our own embedded values and rebuild when they change

Like core-Git we now track the values that we embed into our shell
script wrapper, and we "recompile" that wrapper if they are changed.
This concept was lifted from git.git's Makefile, where a similar
thing was done by Eygene Ryabinkin.  Too bad it wasn't just done
here in git-gui from the beginning, as the git.git Makefile support
for GIT-GUI-VARS was really just because git-gui doesn't do it on
its own.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Refactor to use our git proc more often
Shawn O. Pearce [Sun, 29 Apr 2007 05:54:57 +0000 (01:54 -0400)]
git-gui: Refactor to use our git proc more often

Whenever we want to execute a git subcommand from the plumbing
layer (and on rare occasion, the more porcelain-ish layer) we
tend to use our proc wrapper, just to make the code slightly
cleaner at the call sites.  I wasn't doing that in a couple of
places, so this is a simple cleanup to correct that.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Use option database defaults to set the font
Shawn O. Pearce [Sun, 29 Apr 2007 03:14:08 +0000 (23:14 -0400)]
git-gui: Use option database defaults to set the font

Rather than passing "-font font_ui" to every widget that we
create we can instead reconfigure the option database for
all widget classes to use our font_ui as the default widget
font.  This way Tk will automatically setup their defaults
for us, and we can reduce the size of the application.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Cleanup common font handling for font_ui
Shawn O. Pearce [Sun, 29 Apr 2007 02:00:02 +0000 (22:00 -0400)]
git-gui: Cleanup common font handling for font_ui

An earlier change tossed these optionMenu font configurations
all over the code, when really we can just rename the proc to
a hidden internal name and provide our own wrapper to install
the font configuration we really want.

We also don't need to set these option database entries in all
of the procedures that open dialogs; instead we should just set
one time, them after we have the font configuration ready for use.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Correct line wrapping for too many branch message
Shawn O. Pearce [Sun, 29 Apr 2007 01:32:27 +0000 (21:32 -0400)]
git-gui: Correct line wrapping for too many branch message

Since Tk automatically wraps lines for us in tk_messageBox
widgets we don't need to try to wrap them ourselves.  Its
actually worse that we linewrapped this here in the script,
as not all fonts will render this dialog nicely.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Warn users before making an octopus merge
Shawn O. Pearce [Sun, 29 Apr 2007 01:26:27 +0000 (21:26 -0400)]
git-gui: Warn users before making an octopus merge

A coworker who was new to git-gui recently tried to make an octopus
merge when he did not quite mean to.  Unfortunately in his case the
branches had file level conflicts and failed to merge with the octopus
strategy, and he didn't quite know why this happened.  Since most users
really don't want to perform an octopus merge this additional safety
valve in front of the merge process is a good thing.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agogit-gui: Include the subject in the status bar after commit
Shawn O. Pearce [Sun, 29 Apr 2007 00:49:22 +0000 (20:49 -0400)]
git-gui: Include the subject in the status bar after commit

Now that the command line git-commit has made displaying
the subject (first line) of the newly created commit popular
we can easily do the same thing here in git-gui, without the
ugly part of forking off a child process to obtain that first
line.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoMerge branch 'maint'
Shawn O. Pearce [Wed, 2 May 2007 16:45:31 +0000 (12:45 -0400)]
Merge branch 'maint'

* maint:
  git-gui: Allow spaces in path to 'wish'

17 years agogit-gui: Allow spaces in path to 'wish'
Shawn O. Pearce [Wed, 2 May 2007 16:44:44 +0000 (12:44 -0400)]
git-gui: Allow spaces in path to 'wish'

If the path of our wish executable that are running under
contains spaces we need to make sure they are escaped in
a proper Tcl list, otherwise we are unable to start gitk.

Reported by Randal L. Schwartz on #git.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoFix compilation of test-delta
Martin Koegler [Tue, 1 May 2007 09:47:55 +0000 (11:47 +0200)]
Fix compilation of test-delta

The code used write_in_full() without pulling its declarations from the
header file.  When header is included, usage[] collides with usage()
function.

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoGIT v1.5.2-rc1 v1.5.2-rc1
Junio C Hamano [Tue, 1 May 2007 00:30:02 +0000 (17:30 -0700)]
GIT v1.5.2-rc1

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Tue, 1 May 2007 00:16:19 +0000 (17:16 -0700)]
Merge branch 'maint'

* maint:
  GIT v1.5.1.3
  send-email documentation: clarify --smtp-server
  git.7: Mention preformatted html doc location
  Clarify SubmittingPatches Checklist
  git-svn: Add 'find-rev' command
  Fix symlink handling in git-svn, related to PerlIO

17 years agoGIT v1.5.1.3 v1.5.1.3
Junio C Hamano [Tue, 1 May 2007 00:09:48 +0000 (17:09 -0700)]
GIT v1.5.1.3

Signed-off-by: Junio C Hamano <junkio@cox.net>