Code

git.git
17 years agobranch -f: no reason to forbid updating the current branch in a bare repo.
Junio C Hamano [Sat, 20 Jan 2007 18:51:37 +0000 (10:51 -0800)]
branch -f: no reason to forbid updating the current branch in a bare repo.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-tag -d: allow deleting multiple tags at once.
Junio C Hamano [Sat, 20 Jan 2007 18:47:41 +0000 (10:47 -0800)]
git-tag -d: allow deleting multiple tags at once.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDo not verify filenames in a bare repository
Johannes Schindelin [Sat, 20 Jan 2007 02:09:34 +0000 (03:09 +0100)]
Do not verify filenames in a bare repository

For example, it makes no sense to check the presence of a file
named "HEAD" when calling "git log HEAD" in a bare repository.

Noticed by Han-Wen Nienhuys.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
17 years agoStop ignoring Documentation/README
Junio C Hamano [Sat, 20 Jan 2007 07:52:06 +0000 (23:52 -0800)]
Stop ignoring Documentation/README

We do not copy this file from elsewhere anymore.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoapply --cached: fix crash in subdirectory
Johannes Schindelin [Sun, 21 Jan 2007 01:17:19 +0000 (02:17 +0100)]
apply --cached: fix crash in subdirectory

The static variable "prefix" was shadowed by an unused parameter
of the same name. In case of execution in a subdirectory, the
static variable was accessed, leading to a crash.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
17 years agoshow-branch --reflog: fix show_date() call
Junio C Hamano [Sun, 21 Jan 2007 02:57:06 +0000 (18:57 -0800)]
show-branch --reflog: fix show_date() call

Not passing tz to show_date() is not a fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoshow_date(): fix relative dates
Johannes Schindelin [Sat, 20 Jan 2007 21:21:38 +0000 (22:21 +0100)]
show_date(): fix relative dates

We pass a timestamp (i.e. number of seconds elapsed since Jan 1 1970,
00:00:00 GMT) to the function. So there is no need to "fix" the
timestamp according to the timezone.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
17 years agoshow-branch --reflog: tighten input validation.
Junio C Hamano [Sat, 20 Jan 2007 06:51:49 +0000 (22:51 -0800)]
show-branch --reflog: tighten input validation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoshow-branch --reflog: show the reflog message at the top.
Junio C Hamano [Fri, 19 Jan 2007 09:20:23 +0000 (01:20 -0800)]
show-branch --reflog: show the reflog message at the top.

This changes the output so the list at the top shows the reflog
message, along with their relative timestamps.

You can use --reflog=<n> to show <n> most recent log entries, or
use --reflog=<n>,<b> to show <n> entries going back from the
entry <b>.  <b> can be either a number (so --reflog=4,20 shows 4
records starting from @{20}) or a timestamp (e.g. --reflog='4,1 day').

Here is a sample output (with --list option):

  $ git show-branch --reflog=10 --list jc/show-reflog
    [jc/show-reflog@{0}] (3 minutes ago) commit (amend): show-branch --ref
    [jc/show-reflog@{1}] (5 minutes ago) reset HEAD^
    [jc/show-reflog@{2}] (14 minutes ago) commit: show-branch --reflog: sho
    [jc/show-reflog@{3}] (14 minutes ago) commit: show-branch --reflog: sho
    [jc/show-reflog@{4}] (18 minutes ago) commit (amend): Extend read_ref_a
    [jc/show-reflog@{5}] (18 minutes ago) commit (amend): Extend read_ref_a
    [jc/show-reflog@{6}] (18 minutes ago) commit (amend): Extend read_ref_a
    [jc/show-reflog@{7}] (18 minutes ago) am: read_ref_at(): allow retrievi
    [jc/show-reflog@{8}] (18 minutes ago) reset --hard HEAD~4
    [jc/show-reflog@{9}] (61 minutes ago) commit: show-branch --reflog: use

This shows what I did more cleanly:

  $ git show-branch --reflog=10 jc/show-reflog
  ! [jc/show-reflog@{0}] (3 minutes ago) commit (amend): show-branch --ref
   ! [jc/show-reflog@{1}] (5 minutes ago) reset HEAD^
    ! [jc/show-reflog@{2}] (14 minutes ago) commit: show-branch --reflog:
     ! [jc/show-reflog@{3}] (14 minutes ago) commit: show-branch --reflog:
      ! [jc/show-reflog@{4}] (18 minutes ago) commit (amend): Extend read_
       ! [jc/show-reflog@{5}] (18 minutes ago) commit (amend): Extend read
        ! [jc/show-reflog@{6}] (18 minutes ago) commit (amend): Extend rea
         ! [jc/show-reflog@{7}] (18 minutes ago) am: read_ref_at(): allow
          ! [jc/show-reflog@{8}] (18 minutes ago) reset --hard HEAD~4
           ! [jc/show-reflog@{9}] (61 minutes ago) commit: show-branch --r
  ----------
  +          [jc/show-reflog@{0}] show-branch --reflog: show the reflog
    +        [jc/show-reflog@{2}] show-branch --reflog: show the reflog
   +++       [jc/show-reflog@{1}] show-branch --reflog: show the reflog
  +++++      [jc/show-reflog@{4}] Extend read_ref_at() to be usable fro
       +     [jc/show-reflog@{5}] Extend read_ref_at() to be usable fro
        +    [jc/show-reflog@{6}] Extend read_ref_at() to be usable fro
         +   [jc/show-reflog@{7}] read_ref_at(): allow retrieving the r
           + [jc/show-reflog@{9}] show-branch --reflog: use updated rea
           + [jc/show-reflog@{9}^] read_ref_at(): allow reporting the c
           + [jc/show-reflog@{9}~2] show-branch --reflog: show the refl
           + [jc/show-reflog@{9}~3] read_ref_at(): allow retrieving the
  ++++++++++ [jc/show-reflog@{8}] dwim_ref(): Separate name-to-ref DWIM

At @{9}, I had a commit to complete 5 patch series, but I wanted
to consolidate two commits that enhances read_ref_at() into one
(they were @{9}^ and @{9}~3), and another two that touch show-branch
into one (@{9} and @{9}~2).

I first saved them with "format-patch -4", and then did a reset
at @{8}.  At @{7}, I applied one of them with "am", and then
used "git-apply" on the other one, and amended the commit at
@{6} (so @{6} and @{7} has the same parent).  I did not like the
log message, so I amended again at @{5}.

Then I cherry-picked @{9}~2 to create @{3} (the log message
shows that it needs to learn to set GIT_REFLOG_ACTION -- it uses
"git-commit" and the log entry is attributed for it).  Another
cherry-pick built @{2} out of @{9}, but what I wanted to do was
to squash these two into one, so I did a "reset HEAD^" at @{1}
and then made the final commit by amending what was at the top.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoExtend read_ref_at() to be usable from places other than sha1_name.
Junio C Hamano [Fri, 19 Jan 2007 09:19:05 +0000 (01:19 -0800)]
Extend read_ref_at() to be usable from places other than sha1_name.

You can pass an extra argument to the function to receive the
reflog message information.  Also when the log does not go back
beyond the point the user asked, the cut-off time and count are
given back to the caller for emitting the error messages as
appropriately.

We could later add configuration for get_sha1_basic() to make it
an error instead of it being just a warning.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodwim_ref(): Separate name-to-ref DWIM code out.
Junio C Hamano [Fri, 19 Jan 2007 09:15:15 +0000 (01:15 -0800)]
dwim_ref(): Separate name-to-ref DWIM code out.

I'll be using this in another function to figure out what to
pass to resolve_ref().

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoconfig_set_multivar(): disallow newlines in keys
Johannes Schindelin [Sat, 20 Jan 2007 01:25:37 +0000 (02:25 +0100)]
config_set_multivar(): disallow newlines in keys

This will no longer work:

$ git repo-config 'key.with
newline' some-value

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
17 years agorename --exec to --receive-pack for push and send-pack
Uwe Kleine-König [Fri, 19 Jan 2007 12:49:27 +0000 (13:49 +0100)]
rename --exec to --receive-pack for push and send-pack

For now it's just to get a more descriptive name.  Later we might update the
push protocol to run more than one program on the other end.  Moreover this
matches better the corresponding config option remote.<name>. receivepack.

--exec continues to work

Signed-off-by: Uwe Kleine-König <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomake --exec=... option to git-push configurable
Uwe Kleine-König [Fri, 19 Jan 2007 12:46:16 +0000 (13:46 +0100)]
make --exec=... option to git-push configurable

Having to specify git push --exec=... is annoying if you cannot have
git-receivepack in your PATH on the remote side (or don't want to).

This introduces the config item remote.<name>.receivepack to override
the default value (which is "git-receive-pack").

Signed-off-by: Uwe Kleine-König <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate documentation of fetch-pack, push and send-pack
Uwe Kleine-König [Fri, 19 Jan 2007 12:43:00 +0000 (13:43 +0100)]
Update documentation of fetch-pack, push and send-pack

add all supported options to Documentation/git-....txt and the usage strings.

Signed-off-by: Uwe Kleine-König <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git.txt: command re-classification
Junio C Hamano [Fri, 19 Jan 2007 06:32:38 +0000 (22:32 -0800)]
Documentation/git.txt: command re-classification

This adds two new classes (pure-helpers and "Interacting with
Others") to the command list in the main manual page.  The
latter class is primarily about foreign SCM interface and is
placed before low-level (plumbing) commands.

Also it promotes a handful commands to mainporcelain category
while demoting some others.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: generated cmds-*.txt does not depend on git.txt
Junio C Hamano [Fri, 19 Jan 2007 19:33:27 +0000 (11:33 -0800)]
Documentation: generated cmds-*.txt does not depend on git.txt

Pointed out by Santi.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agorefs.c::read_ref_at(): fix bogus munmap() call.
Junio C Hamano [Fri, 19 Jan 2007 08:39:32 +0000 (00:39 -0800)]
refs.c::read_ref_at(): fix bogus munmap() call.

The code uses mmap() to read reflog data, but moves the pointer around
while reading, and uses that updated pointer in the call to munmap().

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agofor_each_reflog_ent: do not leak FILE *
Junio C Hamano [Fri, 19 Jan 2007 07:25:54 +0000 (23:25 -0800)]
for_each_reflog_ent: do not leak FILE *

The callback function can signal an early return by returning non-zero,
but the function leaked the FILE * opened on the reflog when doing so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: Generate command lists.
Junio C Hamano [Fri, 19 Jan 2007 00:02:13 +0000 (16:02 -0800)]
Documentation: Generate command lists.

This moves the source of the list of commands and categorization
to the end of Documentation/cmd-list.perl, so that re-categorization
and re-ordering would become easier to manage.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: sync git.txt command list and manual page title
Junio C Hamano [Thu, 18 Jan 2007 23:53:37 +0000 (15:53 -0800)]
Documentation: sync git.txt command list and manual page title

Also reorders a handful entries to make each list sorted
alphabetically.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: move command list in git.txt into separate files.
Junio C Hamano [Thu, 18 Jan 2007 23:03:13 +0000 (15:03 -0800)]
Documentation: move command list in git.txt into separate files.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoprune-packed: add -q to usage
Matthias Lederhofer [Thu, 18 Jan 2007 16:11:13 +0000 (17:11 +0100)]
prune-packed: add -q to usage

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument --ignore-if-in-upstream in git-format-patch
David Kågedal [Thu, 18 Jan 2007 11:27:35 +0000 (12:27 +0100)]
Document --ignore-if-in-upstream in git-format-patch

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoShell syntax fix in git-reset
David Kågedal [Thu, 18 Jan 2007 11:15:13 +0000 (12:15 +0100)]
Shell syntax fix in git-reset

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse standard -t option for touch.
Simon 'corecode' Schubert [Thu, 18 Jan 2007 10:18:51 +0000 (11:18 +0100)]
Use standard -t option for touch.

Non-GNU touch do not have the -d option to take free form
date strings.  The POSIX -t option should be more widespread.
For this to work, date needs to output YYYYMMDDHHMM.SS date strings.

Signed-off-by: Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse fixed-size integers for .idx file I/O
Junio C Hamano [Thu, 18 Jan 2007 07:17:28 +0000 (23:17 -0800)]
Use fixed-size integers for .idx file I/O

This attempts to finish what Simon started in the previous commit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse fixed-size integers for the on-disk pack structure.
Simon 'corecode' Schubert [Wed, 17 Jan 2007 08:07:23 +0000 (09:07 +0100)]
Use fixed-size integers for the on-disk pack structure.

Plain integer types without a fixed size can vary between platforms.  Even
though all common platforms use 32-bit ints, there is no guarantee that
this won't change at some point.  Furthermore, specifying an integer type
with explicit size makes the definition of structures more obvious.

Signed-off-by: Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-format-patch: the default suffix is now .patch, not .txt
Junio C Hamano [Wed, 17 Jan 2007 23:03:39 +0000 (15:03 -0800)]
git-format-patch: the default suffix is now .patch, not .txt

Editors often give easier handling of patch files if the
filename ends with .patch, so use it instead of .txt.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-format-patch: make --binary on by default
Junio C Hamano [Wed, 17 Jan 2007 22:32:52 +0000 (14:32 -0800)]
git-format-patch: make --binary on by default

It does not make much sense to generate a patch that cannot be
applied.  If --text is specified on the command line it still
takes precedence.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd --summary to git-format-patch by default
Junio C Hamano [Wed, 17 Jan 2007 21:51:44 +0000 (13:51 -0800)]
Add --summary to git-format-patch by default

This adds --summary output in addition to the --stat to the
output from git-format-patch by default.

I think additions, removals and filemode changes are rare but
notable events and always showing it makes sense.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-format-patch -3
Junio C Hamano [Wed, 17 Jan 2007 21:35:13 +0000 (13:35 -0800)]
git-format-patch -3

This teaches "git-format-patch" to honor the --max-count
parameter revision traversal machinery takes, so that you can
say "git-format-patch -3" to process the three topmost commits
from the current HEAD (or "git-format-patch -2 topic" to name a
specific branch).

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument pack .idx file format upgrade strategy.
Shawn O. Pearce [Thu, 18 Jan 2007 01:43:57 +0000 (20:43 -0500)]
Document pack .idx file format upgrade strategy.

Way back when Junio developed the 64 bit index topic he came up
with a means of changing the .idx file format so that older Git
clients would recognize that they don't understand the file and
refuse to read it, while newer clients could tell the difference
between the old-style and new-style .idx files.  Unfortunately
this wasn't recorded anywhere.

This change documents how we might go about changing the .idx
file format by using a special signature in the first four bytes.
Credit (and possible blame) goes completely to Junio for thinking
up this technique.

The change also modifies the error message of the current Git code
so that users get a recommendation to upgrade their Git software
should this version or later encounter a new-style .idx which it
cannot process.  We already do this for the .pack files, but since
we usually process the .idx files first its important that these
files are recognized and encourage an upgrade.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRefer users to git-rev-parse for revision specification syntax.
Shawn O. Pearce [Thu, 18 Jan 2007 02:08:09 +0000 (21:08 -0500)]
Refer users to git-rev-parse for revision specification syntax.

The revision specification syntax (sometimes referred to as
SHA1-expressions) is accepted almost everywhere in Git by
almost every tool.  Unfortunately it is only documented in
git-rev-parse.txt, and most users don't know to look there.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument the master@{n} reflog query syntax.
Shawn O. Pearce [Thu, 18 Jan 2007 02:08:04 +0000 (21:08 -0500)]
Document the master@{n} reflog query syntax.

In ab2a1a32 Junio improved the reflog query logic to support
obtaining the n-th prior value of a ref, but this was never
documented in git-rev-parse.  Now it is.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-parse-remote.txt: we deal with config vars as well
Junio C Hamano [Wed, 17 Jan 2007 21:06:32 +0000 (13:06 -0800)]
Documentation/git-parse-remote.txt: we deal with config vars as well

... but we never documented it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: m can be relative in "git-blame -Ln,m"
Junio C Hamano [Wed, 17 Jan 2007 21:04:15 +0000 (13:04 -0800)]
Documentation: m can be relative in "git-blame -Ln,m"

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: suggest corresponding Porcelain-level in plumbing docs.
Junio C Hamano [Wed, 17 Jan 2007 21:03:29 +0000 (13:03 -0800)]
Documentation: suggest corresponding Porcelain-level in plumbing docs.

Instead of keeping the confused end user reading low-level
documentation, suggest the higher level commands that implement
what the user may want to do using them upfront.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-resolve: deprecated.
Junio C Hamano [Wed, 17 Jan 2007 21:00:23 +0000 (13:00 -0800)]
Documentation/git-resolve: deprecated.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agosanitize content of README file
Nicolas Pitre [Wed, 17 Jan 2007 18:04:39 +0000 (13:04 -0500)]
sanitize content of README file

Current README content is way too esoteric for someone looking at GIT
for the first time. Instead it should provide a quick summary of what
GIT is with a few pointers to other resources.

The bulk of the previous README content is moved to
Documentation/core-intro.txt.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-format-patch: do not crash with format.headers without value.
Junio C Hamano [Wed, 17 Jan 2007 19:13:02 +0000 (11:13 -0800)]
git-format-patch: do not crash with format.headers without value.

An incorrect config file can say:

[format]
headers

and crash the parsing.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoIntroduce 'git-format-patch --suffix=.patch'
Junio C Hamano [Wed, 17 Jan 2007 19:12:03 +0000 (11:12 -0800)]
Introduce 'git-format-patch --suffix=.patch'

The default can also be changed with "format.suffix" configuration.
Leaving it empty would not add any suffix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/glossary.txt: describe remotes/ tracking and packed-refs
Junio C Hamano [Wed, 17 Jan 2007 18:54:58 +0000 (10:54 -0800)]
Documentation/glossary.txt: describe remotes/ tracking and packed-refs

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/glossary.txt: unpacked objects are loose.
Junio C Hamano [Wed, 17 Jan 2007 18:54:18 +0000 (10:54 -0800)]
Documentation/glossary.txt: unpacked objects are loose.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: describe shallow repository
Junio C Hamano [Wed, 17 Jan 2007 18:53:31 +0000 (10:53 -0800)]
Documentation: describe shallow repository

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMake a short-and-sweet "git-add -i" synonym for "git-add --interactive"
Junio C Hamano [Wed, 17 Jan 2007 18:52:36 +0000 (10:52 -0800)]
Make a short-and-sweet "git-add -i" synonym for "git-add --interactive"

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: detached HEAD
Junio C Hamano [Wed, 17 Jan 2007 18:43:50 +0000 (10:43 -0800)]
Documentation: detached HEAD

Add discussion section to git-checkout documentation and mention
detached HEAD in repository-layout document.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: a few spelling fixes
René Scharfe [Wed, 17 Jan 2007 15:32:41 +0000 (16:32 +0100)]
Documentation: a few spelling fixes

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-sh-setup.txt: programmer's docs
Junio C Hamano [Wed, 17 Jan 2007 09:13:05 +0000 (01:13 -0800)]
Documentation/git-sh-setup.txt: programmer's docs

Clarify that this is not meant for end users, and list what
shell functions are defined.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-whatchanged.txt: show -<n> instead of --max-count.
Junio C Hamano [Wed, 17 Jan 2007 09:11:56 +0000 (01:11 -0800)]
Documentation/git-whatchanged.txt: show -<n> instead of --max-count.

... to match the change we did earlier to git-log documentation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-status.txt: mention color configuration
Junio C Hamano [Wed, 17 Jan 2007 09:11:01 +0000 (01:11 -0800)]
Documentation/git-status.txt: mention color configuration

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-tar-tree.txt: default umask is now 002
Junio C Hamano [Wed, 17 Jan 2007 09:10:13 +0000 (01:10 -0800)]
Documentation/git-tar-tree.txt: default umask is now 002

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-tools.txt: mention tig and refer to wiki
Junio C Hamano [Wed, 17 Jan 2007 09:09:41 +0000 (01:09 -0800)]
Documentation/git-tools.txt: mention tig and refer to wiki

In general list at Wiki seems to be maintained a lot better than
this list.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/git-tag: the command can be used to also verify a tag.
Junio C Hamano [Wed, 17 Jan 2007 09:08:30 +0000 (01:08 -0800)]
Documentation/git-tag: the command can be used to also verify a tag.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/SubmittingPatches: Gnus tips
Junio C Hamano [Wed, 17 Jan 2007 09:07:27 +0000 (01:07 -0800)]
Documentation/SubmittingPatches: Gnus tips

Also warn about format=flowed (aka 'flawed').

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-commit: document log message formatting convention
Junio C Hamano [Wed, 17 Jan 2007 06:53:28 +0000 (22:53 -0800)]
git-commit: document log message formatting convention

Take it from the tutorial, since not everybody necessarily reads it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agocache.h; fix a couple of prototypes
Chris Wedgwood [Wed, 17 Jan 2007 06:28:02 +0000 (22:28 -0800)]
cache.h; fix a couple of prototypes

Trivial patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument where configuration files are in config.txt
Junio C Hamano [Wed, 17 Jan 2007 06:45:35 +0000 (22:45 -0800)]
Document where configuration files are in config.txt

Talking about what the files contain without talking about where
they are does not help new users.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse merge-recursive in git-checkout -m (branch switching)
Junio C Hamano [Wed, 17 Jan 2007 04:46:39 +0000 (20:46 -0800)]
Use merge-recursive in git-checkout -m (branch switching)

This allows "git checkout -m <other-branch>" to notice renames and
carry local changes in the working tree forward.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-commit documentation: remove comment on unfixed git-rm
Junio C Hamano [Wed, 17 Jan 2007 00:36:54 +0000 (16:36 -0800)]
git-commit documentation: remove comment on unfixed git-rm

... which was fixed since then.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agotutorial: shorthand for remotes but show distributed nature of git
Junio C Hamano [Wed, 17 Jan 2007 00:10:14 +0000 (01:10 +0100)]
tutorial: shorthand for remotes but show distributed nature of git

* Promiscous pull shows the distributed nature of git better.
* Add a new step after that to teach "remote add".
* Highlight that with the shorthand defined you will get
  remote tracking branches for free.
* Fix Alice's workflow.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agotutorial: Use only separate layout
Santi Béjar [Wed, 17 Jan 2007 00:09:12 +0000 (01:09 +0100)]
tutorial: Use only separate layout

Then the newbies only have to understand one layout.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix spurious compile error
Johannes Schindelin [Tue, 16 Jan 2007 21:10:54 +0000 (22:10 +0100)]
Fix spurious compile error

From time to time, I would get this error:

[...]
sed: -e expression #8, char 41: Unterminated `s' command
make: *** [git-add--interactive] Error 1

Turns out that the function WriteMakefile() called in Makefile.PL
outputs the message "Writing perl.mak for Git" to stdout! Thus,
the output of "make -C perl -s --no-print-directory instlibdir"
would be prefixed by that message whenever Makefile.PL was newer
than perl.mak.

This is fixed by redirecting stdout to stderr in Makefile.PL.

Signed-off-by: Johannes E. Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-rm documentation: remove broken behaviour from the example.
Junio C Hamano [Tue, 16 Jan 2007 19:50:29 +0000 (11:50 -0800)]
git-rm documentation: remove broken behaviour from the example.

The example section were talking about the old broken default
behaviour.  Correct it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-push documentation: remaining bits
Junio C Hamano [Tue, 16 Jan 2007 19:46:03 +0000 (11:46 -0800)]
git-push documentation: remaining bits

Mention --thin, --no-thin, --repo and -v.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodocument --exec for git-push
Uwe Kleine-K\e,Av\e(Bnig [Tue, 16 Jan 2007 15:02:02 +0000 (16:02 +0100)]
document --exec for git-push

The text is just copied from git-send-pack.txt.

Signed-off-by: Uwe Kleine-K\e,Av\e(Bnig <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-svn: print and flush authentication prompts to STDERR
Eric Wong [Tue, 16 Jan 2007 04:15:55 +0000 (20:15 -0800)]
git-svn: print and flush authentication prompts to STDERR

People that redirect STDOUT output should always see STDERR
prompts interactively.

STDERR should always be flushed without buffering, so
they should always show up.  If that is unset, we still
explicitly flush by calling STDERR->flush.

The svn command-line client prompts to STDERR, too.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSolaris 5.8 returns ENOTDIR for inappropriate renames.
Jason Riedy [Tue, 16 Jan 2007 01:30:59 +0000 (17:30 -0800)]
Solaris 5.8 returns ENOTDIR for inappropriate renames.

The reflog code clears empty directories when rename returns
either EISDIR or ENOTDIR.  Seems to be the only place.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoReplace "echo -n" with printf in shell scripts.
Jason Riedy [Tue, 16 Jan 2007 01:31:29 +0000 (17:31 -0800)]
Replace "echo -n" with printf in shell scripts.

Not all echos know -n.  This was causing a test failure in
t5401-update-hooks.sh, but not t3800-mktag.sh for some reason.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSet _ALL_SOURCE for AIX, but avoid its struct list.
Jason Riedy [Tue, 16 Jan 2007 01:34:49 +0000 (17:34 -0800)]
Set _ALL_SOURCE for AIX, but avoid its struct list.

AIX 5.3 seems to need _ALL_SOURCE for struct addrinfo, but that
introduces a struct list in grp.h.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoStart all test scripts with /bin/sh.
Jason Riedy [Tue, 16 Jan 2007 01:31:49 +0000 (17:31 -0800)]
Start all test scripts with /bin/sh.

My bash refused to run the two scripts missing a #!, and it's
better to use the same line for all the scripts.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pull: disallow implicit merging to detached HEAD
Jeff King [Mon, 15 Jan 2007 22:25:33 +0000 (17:25 -0500)]
git-pull: disallow implicit merging to detached HEAD

Instead, we complain to the user and suggest that they explicitly
specify the remote and branch. We depend on the exit status of
git-symbolic-ref, so let's go ahead and document that.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix git-fetch while on detached HEAD not to give needlessly alarming errors
Junio C Hamano [Mon, 15 Jan 2007 21:56:05 +0000 (13:56 -0800)]
Fix git-fetch while on detached HEAD not to give needlessly alarming errors

When we are on a detached HEAD, there is no current branch.
There is no reason to leak the error messages to the end user
since this is a situation we expect to see.

This adds -q option to git-symbolic-ref to exit without issuing
an error message if the given name is not a symbolic ref.

By the way, with or without this patch, there currently is no
good way to tell failure modes between "git symbolic-ref HAED"
and "git symbolic-ref HEAD".  Both says "is not a symbolic ref".

We may want to do something about it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit reflog expire: document --stale-fix option.
Junio C Hamano [Mon, 15 Jan 2007 22:43:03 +0000 (14:43 -0800)]
git reflog expire: document --stale-fix option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge git://git.kernel.org/pub/scm/gitk/gitk
Junio C Hamano [Mon, 15 Jan 2007 07:43:47 +0000 (23:43 -0800)]
Merge git://git.kernel.org/pub/scm/gitk/gitk

* git://git.kernel.org/pub/scm/gitk/gitk:
  [PATCH] Make gitk work when launched in a subdirectory
  [PATCH] gitk: add current directory to main window title

17 years agoUse nice names in conflict markers during cherry-pick/revert.
Shawn O. Pearce [Mon, 15 Jan 2007 06:41:22 +0000 (01:41 -0500)]
Use nice names in conflict markers during cherry-pick/revert.

Always call the current HEAD 'HEAD', and name the patch being
cherry-picked or reverted by its oneline subject rather than
its SHA1.  This matches git am's behavior and is done because
users most commonly are cherry-picking by SHA1 rather than by
ref name.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse merge-recursive in git-revert/git-cherry-pick
Junio C Hamano [Mon, 15 Jan 2007 06:00:02 +0000 (22:00 -0800)]
Use merge-recursive in git-revert/git-cherry-pick

This makes revert and cherry-pick to use merge-recursive, to
allow them to notice renames.  A pair of test scripts
demonstrate that an old change before a rename happened can be
applied (reverted) after a rename with cherry-pick (with revert).

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: merge-output is not too verbose now.
Junio C Hamano [Mon, 15 Jan 2007 05:31:30 +0000 (21:31 -0800)]
Documentation: merge-output is not too verbose now.

We've squelched output from merge-recursive, and git-merge when
used with recursive does not attempt the trivial one first
anymore, so there won't be "Trying ... Nope." messages now.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove hash in git-describe in favor of util slot.
Shawn O. Pearce [Mon, 15 Jan 2007 03:16:55 +0000 (22:16 -0500)]
Remove hash in git-describe in favor of util slot.

Currently we don't use the util field of struct commit but we want
fast access to the highest priority name that references any given
commit object during our matching loop.  A really simple approach
is to just store the name directly in the util field.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoCorrect priority of lightweight tags in git-describe.
Shawn O. Pearce [Sun, 14 Jan 2007 09:37:44 +0000 (04:37 -0500)]
Correct priority of lightweight tags in git-describe.

We really want to always favor an annotated tag over a lightweight
tag when describing a commit.  Unfortunately git-describe wasn't
doing this as it was favoring the depth attribute of a possible_tag
over the priority.  Now priority is the highest sort and we only
consider a lightweight tag if no annotated tags were identified.

Rather than searching for the minimum tag using a simple loop we
now sort them using a stable sort algorithm, this way the possible
tags display in order if --debug gets used.  The stable sort helps
to preseve the inherit topology/date order that we obtain during
our search loop.

This fix allows the tests in t6120-describe.sh to pass.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd describe test.
Junio C Hamano [Sun, 14 Jan 2007 02:37:32 +0000 (18:37 -0800)]
Add describe test.

... with help from Shawn.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoImprove git-describe performance by reducing revision listing.
Shawn O. Pearce [Sat, 13 Jan 2007 22:30:53 +0000 (17:30 -0500)]
Improve git-describe performance by reducing revision listing.

My prior version of git-describe ran very slowly on even reasonably
sized projects like git.git and linux.git as it tended to identify
a large number of possible tags and then needed to generate the
revision list for each of those tags to sort them and select the
best tag to describe the input commit.

All we really need is the number of commits in the input revision
which are not in the tag.  We can generate these counts during
the revision walking and tag matching loop by assigning a color to
each tag and coloring the commits as we walk them.  This limits us
to identifying no more than 26 possible tags, as there is limited
space available within the flags field of struct commit.

The limitation of 26 possible tags is hopefully not going to be a
problem in real usage, as most projects won't create 26 maintenance
releases and merge them back into a development trunk after the
development trunk was tagged with a release candidate tag.  If that
does occur git-describe will start to revert to its old behavior of
using the newer maintenance release tag to describe the development
trunk, rather than the development trunk's own tag.  The suggested
workaround would be to retag the development trunk's tip.

However since even 26 possible tags can take a while to generate a
description for on some projects I'm defaulting the limit to 10 but
offering the user --candidates to increase the number of possible
matches if they need a more accurate result.  I specifically chose
10 for the default as it seems unlikely projects will have more
than 10 maintenance releases merged into a development trunk before
retagging the development trunk, and it seems to perform about the
same on linux.git as v1.4.4.4 git-describe.

A large amount of debugging information was also added during
the development of this change, so I've left it in to be toggled
on with --debug.  It may be useful to the end user to help them
understand why git-describe took one particular tag over another.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse binary searching on large buckets in git-describe.
Shawn O. Pearce [Sat, 13 Jan 2007 22:29:00 +0000 (17:29 -0500)]
Use binary searching on large buckets in git-describe.

If a project has a really huge number of tags (such as several
thousand tags) then we are likely to have nearly a hundred tags in
some buckets.  Scanning those buckets as linked lists could take
a large amount of time if done repeatedly during history traversal.

Since we are searching for a unique commit SHA1 we can sort all
tags by commit SHA1 and perform a binary search within the bucket.
Once we identify a particular tag as matching this commit we walk
backwards within the bucket matches to make sure we pick up the
highest priority tag for that commit, as the binary search may
have landed us in the middle of a set of tags which point at the
same commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoHash tags by commit SHA1 in git-describe.
Shawn O. Pearce [Sat, 13 Jan 2007 22:28:16 +0000 (17:28 -0500)]
Hash tags by commit SHA1 in git-describe.

If a project has a very large number of tags then git-describe
will spend a good part of its time looping over the tags testing
them one at a time to determine if it matches a given commit.
For 10 tags this is not a big deal, but for hundreds of tags the
time could become considerable if we don't find an exact match for
the input commit and we need to walk back along the history chain.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAlways perfer annotated tags in git-describe.
Shawn O. Pearce [Sat, 13 Jan 2007 22:27:52 +0000 (17:27 -0500)]
Always perfer annotated tags in git-describe.

Several people have suggested that its always better to describe
a commit using an annotated tag, and to only use a lightweight tag
if absolutely no annotated tag matches the input commit.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agosome doc updates
Nicolas Pitre [Mon, 15 Jan 2007 03:44:18 +0000 (22:44 -0500)]
some doc updates

1) talk about "git merge" instead of "git pull ."

2) suggest "git repo-config" instead of directly editing config files

3) echo "URL: blah" > .git/remotes/foo is obsolete and should be
   "git repo-config remote.foo.url blah"

4) support for partial URL prefix has been removed (see commit
   ea560e6d64374ec1f6c163c276319a3da21a1345) so drop mention of it.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit log documentation: teach -<n> form.
Junio C Hamano [Mon, 15 Jan 2007 02:23:22 +0000 (18:23 -0800)]
git log documentation: teach -<n> form.

We say "this shows only the most often used ones"; so instead of
teaching --max-number=<n> form, list -<n> form which is much
easier to type.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoConvert output messages in merge-recursive to past tense.
Shawn O. Pearce [Sun, 14 Jan 2007 08:11:28 +0000 (03:11 -0500)]
Convert output messages in merge-recursive to past tense.

Now that we are showing the output messages for verbosity levels
<5 after all actions have been performed (due to the progress meter
running during the actions) it can be confusing to see messages in
the present tense when the user is looking at a '100% done' message
right above them.  Converting the messages to past tense will appear
more correct in this case, and shouldn't affect a developer who is
debugging the application and running it at a verbosity level >=5.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDisplay a progress meter during merge-recursive.
Shawn O. Pearce [Sun, 14 Jan 2007 05:28:58 +0000 (00:28 -0500)]
Display a progress meter during merge-recursive.

Because large merges on slow systems can take up to a minute to
execute we should try to keep the user entertained with a progress
meter to let them know how far we have progressed through the
current merge.

The progress meter considers each entry in the in-memory index to
be a unit, which means a single recursive merge will double the
number of units in the progress meter.  Files which are unmerged
after the 3-way tree merge are also considered a unit within the
progress meter.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoEnable output buffering in merge-recursive.
Shawn O. Pearce [Sun, 14 Jan 2007 05:28:53 +0000 (00:28 -0500)]
Enable output buffering in merge-recursive.

Buffering all message output until a merge invocation is complete is
necessary to prevent intereferring with a progress meter that would
indicate the number of files completely merged, and how many remain.
This change does not introduce a progress meter, but merely lays
the groundwork to buffer the output.

To aid debugging output buffering is only enabled if verbosity
is lower than 5.  When using verbosity levels above 5 the user is
probably debugging the merge program itself and does not want to
see the output delayed, especially if they are stepping through
portions of the code in a debugger.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow the user to control the verbosity of merge-recursive.
Shawn O. Pearce [Sun, 14 Jan 2007 05:28:48 +0000 (00:28 -0500)]
Allow the user to control the verbosity of merge-recursive.

Junio C Hamano <junkio@cox.net> writes:
>
> I think the output from merge-recursive can be categorized into 5
> verbosity levels:
>
> 1. "CONFLICT", "Rename", "Adding here instead due to D/F conflict"
> (outermost)
>
> 2. "Auto-merged successfully" (outermost)
>
> 3. The first "Merging X with Y".
>
> 4. outermost "Merging:\ntitle1\ntitle2".
>
> 5. outermost "found N common ancestors\nancestor1\nancestor2\n..."
> and anything from inner merge.
>
> I would prefer the default verbosity level to be 2 (that is, show
> both 1 and 2).

and this change makes it so.  I think level 3 is probably pointless
as its only one line of output above level 2, but I can see how some
users may want to view it but not view the slightly more verbose
output of level 4.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove unnecessary call_depth parameter in merge-recursive.
Shawn O. Pearce [Sun, 14 Jan 2007 05:28:33 +0000 (00:28 -0500)]
Remove unnecessary call_depth parameter in merge-recursive.

Because the output_indent always matches the call_depth value
there is no reason to pass around the call_depth to the merge
function during each recursive invocation.

This is a simple refactoring that will make the code easier to
follow later on as I start to add output verbosity controls.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'jc/int'
Junio C Hamano [Sun, 14 Jan 2007 20:04:25 +0000 (12:04 -0800)]
Merge branch 'jc/int'

* jc/int:
  More tests in t3901.
  Consistent message encoding while reusing log from an existing commit.
  t3901: test "format-patch | am" pipe with i18n
  Use log output encoding in --pretty=email headers.

17 years agoMerge branch 'sp/merge' (early part)
Junio C Hamano [Sun, 14 Jan 2007 20:03:53 +0000 (12:03 -0800)]
Merge branch 'sp/merge' (early part)

* 'sp/merge' (early part):
  Improve merge performance by avoiding in-index merges.

17 years agoMerge branch 'jc/subdir'
Junio C Hamano [Sun, 14 Jan 2007 19:41:36 +0000 (11:41 -0800)]
Merge branch 'jc/subdir'

* jc/subdir:
  Allow whole-tree operations to be started from a subdirectory
  Use cd_to_toplevel in scripts that implement it by hand.
  Define cd_to_toplevel shell function in git-sh-setup

17 years agoRemove read_or_die in favor of better error messages.
Shawn O. Pearce [Sun, 14 Jan 2007 06:01:49 +0000 (01:01 -0500)]
Remove read_or_die in favor of better error messages.

Originally I introduced read_or_die for the purpose of reading
the pack header and trailer, and I was too lazy to print proper
error messages.

Linus Torvalds <torvalds@osdl.org>:
> For a read error, at the very least you have to say WHICH FILE
> couldn't be read, because it's usually a matter of some file just
> being too short, not some system-wide problem.

and of course Linus is right. Make it so.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoHide output about SVN::Core not being found during tests.
Shawn O. Pearce [Sun, 14 Jan 2007 08:22:47 +0000 (03:22 -0500)]
Hide output about SVN::Core not being found during tests.

If the user doesn't have SVN::Core installed or working then the
SVN tests properly turn themselves off.  But the user doesn't need
to know that SVN::Core isn't loadable as a Perl module.  Unless of
course they are trying to debug the test, so lets relegate the Perl
failures to --verbose only.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agosimplify the "no changes added to commit" message
Nicolas Pitre [Sun, 14 Jan 2007 02:23:55 +0000 (21:23 -0500)]
simplify the "no changes added to commit" message

Suggesting the use of [-a|-i|-o] with git-commit is unnecessarily
complex and confusing.  In this context -o is totally useless and -i
requires extra arguments which are not mentioned.  The only sensible
hint (besides reading the man page but let's not go there) is
"commit -a".

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMore tests in t3901.
Junio C Hamano [Sat, 13 Jan 2007 21:34:44 +0000 (13:34 -0800)]
More tests in t3901.

This adds tests for "cherry-pick" and "rebase --merge" (and
indirectly "commit -C" since it is used in the latter) to make
sure they create a new commit with correct encoding.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoConsistent message encoding while reusing log from an existing commit.
Junio C Hamano [Sat, 13 Jan 2007 21:33:07 +0000 (13:33 -0800)]
Consistent message encoding while reusing log from an existing commit.

The following commands can reuse log message from an existing
commit while creating a new commit:

git-cherry-pick
git-rebase (both with and without --merge)
git-commit (-c and -C)

When the original commit was made in a different encoding from
the current i18n.commitencoding, "cat-file commit" would give a
string that is inconsistent with what the resulting commit will
claim to be in.  Replace them with "git show -s --encoding".

"git-rebase" without --merge is "git format-patch" piped to "git
am" in essence, and has been taken care of before this commit.

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