git.git
17 years agogit-svn: Create leading directories in create-ignore
Brian Gernhardt [Thu, 19 Feb 2009 18:08:04 +0000 (13:08 -0500)]
git-svn: Create leading directories in create-ignore

Since SVN tracks empty directories and git does not, we can not assume
that the directory exists when creating .gitignore files.

Signed-off-by: Brian Gernhardt <redacted>
Acked-by: Eric Wong <redacted>
17 years agogit config: don't allow --get-color* and variable type
Felipe Contreras [Sat, 21 Feb 2009 00:49:29 +0000 (02:49 +0200)]
git config: don't allow --get-color* and variable type

Doing so would be incoherent since --get-color would pick a color slot
and ignore the variable type option (e.g. --bool), and the type would
require a variable name.

Suggested by Junio C Hamano.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: don't allow extra arguments for -e or -l.
Felipe Contreras [Sat, 21 Feb 2009 00:49:28 +0000 (02:49 +0200)]
git config: don't allow extra arguments for -e or -l.

As suggested by Johannes Schindelin.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: don't allow multiple variable types
Felipe Contreras [Sat, 21 Feb 2009 00:49:27 +0000 (02:49 +0200)]
git config: don't allow multiple variable types

Only --bool, --int, or --bool-or-int can be used, but not any
combination of them.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: don't allow multiple config file locations
Felipe Contreras [Sat, 21 Feb 2009 00:49:26 +0000 (02:49 +0200)]
git config: don't allow multiple config file locations

Either --global, --system, or --file can be used, but not any
combination.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: reorganize to use parseopt
Felipe Contreras [Sat, 21 Feb 2009 00:49:25 +0000 (02:49 +0200)]
git config: reorganize to use parseopt

This patch has benefited from comments by Johannes
Schindelin and Junio C Hamano.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: reorganize get_color*
Felipe Contreras [Sat, 21 Feb 2009 00:48:57 +0000 (02:48 +0200)]
git config: reorganize get_color*

In preparation for parseopt.

Also remove some unecessary comments since the usage is described in the
documentation.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: trivial rename in preparation for parseopt
Felipe Contreras [Sat, 21 Feb 2009 00:48:56 +0000 (02:48 +0200)]
git config: trivial rename in preparation for parseopt

Essentially this replaces 'file' with 'prefix' in the cases where the
variable is used as a prefix, which is consistent with other git
commands.

When using the --list option general errors where not properly reported,
only errors related with the 'file'. Now they are reported, and 'file'
is irrelevant.

That reduces the rest of 'file' usage to nothing, therefore now only
'prefix' remains.

Suggested by Johannes Schindelin.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit_config(): not having a per-repo config file is not an error
Felipe Contreras [Sat, 21 Feb 2009 00:48:55 +0000 (02:48 +0200)]
git_config(): not having a per-repo config file is not an error

Currently git_config() returns an error if there is no repo config file
available (cwd is not a git repo); it will correctly parse the system
and global config files, but still return an error.

It doesn't affect anything else since almost nobody is checking for the
return code (with the exception of 'git remote update').

A reorganization in 'git config' would benefit from being able to
properly detect errors in git_config() without the noise generated when
cwd is not a git repo.

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: trivial cleanup for editor action
Johannes Schindelin [Sat, 21 Feb 2009 00:48:54 +0000 (02:48 +0200)]
git config: trivial cleanup for editor action

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit config: codestyle cleanups
Felipe Contreras [Sat, 21 Feb 2009 00:48:53 +0000 (02:48 +0200)]
git config: codestyle cleanups

Signed-off-by: Felipe Contreras <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoformat-patch: support deep threading
Thomas Rast [Thu, 19 Feb 2009 21:26:33 +0000 (22:26 +0100)]
format-patch: support deep threading

For deep threading mode, i.e., the mode that gives a thread structured
like

  + [PATCH 0/n] Cover letter
   `-+ [PATCH 1/n] First patch
      `-+ [PATCH 2/n] Second patch
         `-+ ...

we currently have to use 'git send-email --thread' (the default).  On
the other hand, format-patch also has a --thread option which gives
shallow mode, i.e.,

  + [PATCH 0/n] Cover letter
  |-+ [PATCH 1/n] First patch
  |-+ [PATCH 2/n] Second patch
  ...

To reduce the confusion resulting from having two indentically named
features in different tools giving different results, let format-patch
take an optional argument '--thread=deep' that gives the same output
as 'send-mail --thread'.  With no argument, or 'shallow', behave as
before.  Also add a configuration variable format.thread with the same
semantics.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoformat-patch: thread as reply to cover letter even with in-reply-to
Thomas Rast [Thu, 19 Feb 2009 21:26:32 +0000 (22:26 +0100)]
format-patch: thread as reply to cover letter even with in-reply-to

Currently, format-patch --thread --cover-letter --in-reply-to $parent
makes all mails, including the cover letter, a reply to $parent.
However, we would want the reader to consider the cover letter above
all the patches.

This changes the semantics so that only the cover letter is a reply to
$parent, while all the patches are formatted as replies to the cover
letter.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoformat-patch: track several references
Thomas Rast [Thu, 19 Feb 2009 21:26:31 +0000 (22:26 +0100)]
format-patch: track several references

Currently, format-patch can only track a single reference (the
In-Reply-To:) for each mail.  To ensure proper threading, we should
list all known references for every mail.

Change the rev_info.ref_message_id field to a string_list, so that we
can append references at will, and change the output formatting
routines to print all of them in the References: header.  The last
entry in the list is implicitly assumed to be the In-Reply-To:, which
gives output consistent with RFC 2822:

   The "References:" field will contain the contents of the parent's
   "References:" field (if any) followed by the contents of the
   parent's "Message-ID:" field (if any).

Note that this is just preparatory work; nothing uses it yet, so all
"References:" fields in the output are still only one deep.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'for-junio' of git://source.winehq.org/~julliard/git/git
Junio C Hamano [Sat, 21 Feb 2009 18:38:04 +0000 (10:38 -0800)]
Merge branch 'for-junio' of git://source.winehq.org/~julliard/git/git

* 'for-junio' of git://source.winehq.org/~julliard/git/git:
  Add a README in the contrib/emacs directory.
  git.el: Improve the confirmation message on remove and revert.
  git.el: Make sure that file lists are sorted as they are created.

17 years agoAdd a README in the contrib/emacs directory.
Alexandre Julliard [Mon, 16 Feb 2009 10:40:29 +0000 (11:40 +0100)]
Add a README in the contrib/emacs directory.

Signed-off-by: Alexandre Julliard <redacted>
17 years agogit.el: Improve the confirmation message on remove and revert.
Alexandre Julliard [Mon, 16 Feb 2009 10:40:08 +0000 (11:40 +0100)]
git.el: Improve the confirmation message on remove and revert.

If there's only one file, print its name instead of just "1 file".

Signed-off-by: Alexandre Julliard <redacted>
17 years agogit.el: Make sure that file lists are sorted as they are created.
Alexandre Julliard [Mon, 16 Feb 2009 10:39:11 +0000 (11:39 +0100)]
git.el: Make sure that file lists are sorted as they are created.

This avoids a possibly redundant sort in git-update-status-files and
git-status-filenames-map, and allows callers to continue using the
list without having to copy it.

It also fixes the confusing success messages reported by Brent
Goodrick.

Signed-off-by: Alexandre Julliard <redacted>
17 years agoSupport 'raw' date format
Linus Torvalds [Fri, 20 Feb 2009 22:15:22 +0000 (14:15 -0800)]
Support 'raw' date format

Talking about --date, one thing I wanted for the 1234567890 date was to
get things in the raw format. Sure, you get them with --pretty=raw, but it
felt a bit sad that you couldn't just ask for the date in raw format.

So here's a throw-away patch (meaning: I won't be re-sending it, because I
really don't think it's a big deal) to add "--date=raw". It just prints
out the internal raw git format - seconds since epoch plus timezone (put
another way: 'date +"%s %z"' format)

Signed-off-by: Linus Torvalds <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest git-patch-id
Thomas Rast [Thu, 19 Feb 2009 11:13:42 +0000 (12:13 +0100)]
Test git-patch-id

So far, git-patch-id was untested.  Add some simple checks for output
format and patch (in)equality.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest rev-list --parents/--children
Thomas Rast [Thu, 19 Feb 2009 11:13:41 +0000 (12:13 +0100)]
Test rev-list --parents/--children

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest log --decorate
Thomas Rast [Thu, 19 Feb 2009 11:13:40 +0000 (12:13 +0100)]
Test log --decorate

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest fsck a bit harder
Thomas Rast [Thu, 19 Feb 2009 11:13:39 +0000 (12:13 +0100)]
Test fsck a bit harder

git-fsck, of all tools, has very few tests.  This adds some more:
* a corrupted object;
* a branch pointing to a non-commit;
* a tag pointing to a nonexistent object;
* and a tag pointing to an object of a type other than what the tag
  itself claims.

Only the first two are caught.  At least the third probably should,
too, but currently slips through.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest log --graph
Thomas Rast [Thu, 19 Feb 2009 11:13:38 +0000 (12:13 +0100)]
Test log --graph

So far there were no tests checking that log --graph actually works.

Note that the tests strip trailing whitespace, as the current --graph
emits trailing whitespace on lines that do not contain anything but
graph lines.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest diff --dirstat functionality
Thomas Rast [Thu, 19 Feb 2009 11:13:37 +0000 (12:13 +0100)]
Test diff --dirstat functionality

This is only a very rudimentary test, but it was untested before.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTest that diff can read from stdin
Thomas Rast [Thu, 19 Feb 2009 11:13:36 +0000 (12:13 +0100)]
Test that diff can read from stdin

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoSupport coverage testing with GCC/gcov
Thomas Rast [Thu, 19 Feb 2009 11:13:35 +0000 (12:13 +0100)]
Support coverage testing with GCC/gcov

With gcc's --coverage option, we can perform automatic coverage data
collection for the test suite.

Add a new Makefile target 'coverage' that scraps all previous coverage
results, recompiles git with the required compiler/linker flags (in
addition to any flags you specify manually), then runs the test suite
and compiles a report.

The compilation must be done with all optimizations disabled, since
inlined functions (and for line-by-line coverage, also optimized
branches/loops) break coverage tracking.

The tests are run serially (with -j1).  The coverage code should
theoretically allow concurrent access to its data files, but the
author saw random test failures.  Obviously this could be improved.

The report currently consists of a list of functions that were never
executed during the tests, which is written to
'coverage-untested-functions'.  Once this list becomes reasonably
short, we would also want to look at branches that were never taken.

Currently only toplevel *.c files are considered.  It would be nice to
at least include xdiff, but --coverage did not save data to
subdirectories on the system used to write this (gcc 4.3.2).

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'maint'
Junio C Hamano [Fri, 20 Feb 2009 07:44:07 +0000 (23:44 -0800)]
Merge branch 'maint'

* maint:
  More friendly message when locking the index fails.
  Document git blame --reverse.
  Documentation: Note file formats send-email accepts

17 years agoMore friendly message when locking the index fails.
Matthieu Moy [Thu, 19 Feb 2009 12:54:18 +0000 (13:54 +0100)]
More friendly message when locking the index fails.

Just saying that index.lock exists doesn't tell the user _what_ to do
to fix the problem. We should give an indication that it's normally
safe to delete index.lock after making sure git isn't running here.

Signed-off-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoDocument git blame --reverse.
Matthieu Moy [Thu, 19 Feb 2009 12:34:48 +0000 (13:34 +0100)]
Document git blame --reverse.

This was introduced in 85af7929ee125385c2771fa4eaccfa2f29dc63c9 but
not documented outside the commit message.

Signed-off-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogitweb: Hyperlink multiple git hashes on the same commit message line
Marcel M. Cary [Wed, 18 Feb 2009 03:00:43 +0000 (19:00 -0800)]
gitweb: Hyperlink multiple git hashes on the same commit message line

The current implementation only hyperlinks the first hash on
a given line of the commit message.  It seems sensible to
highlight all of them if there are multiple, and it seems
plausible that there would be multiple even with a tidy line
length limit, because they can be abbreviated as short as 8
characters.

Benchmark:

I wanted to make sure that using the 'e' switch to the Perl regex
wasn't going to kill performance, since this is called once per commit
message line displayed.

In all three A/B scenarios I tried, the A and B yielded the same
results within 2%, where A is the version of code before this patch
and B is the version after.

1: View a commit message containing the last 1000 commit hashes
2: View a commit message containing 1000 lines of 40 dots to avoid
   hyperlinking at the same message length
3: View a short merge commit message with a few lines of text and
   no hashes

All were run in CGI mode on my sub-production hardware on a recent
clone of git.git.  Numbers are the average of 10 reqests per second
with the first request discarded, since I expect this change to affect
primarily CPU usage.  Measured with ApacheBench.

Note that the web page rendered was the same; while the new code
supports multiple hashes per line, there was at most one per line.

The primary purpose of scenarios 2 and 3 were to verify that the
addition of 1000 commit messages had an impact on how much of the time
was spent rendering commit messages.  They were all within 2% of 0.80
requests per second (much faster).

So I think the patch has no noticeable effect on performance.

Signed-off-by: Marcel M. Cary <redacted>
Acked-by: Jakub Narebski <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agosystem_path(): simplify using strip_path_suffix(), and add suffix "git"
Johannes Schindelin [Thu, 19 Feb 2009 19:10:53 +0000 (20:10 +0100)]
system_path(): simplify using strip_path_suffix(), and add suffix "git"

At least for the author of this patch, the logic in system_path() was
too hard to understand.  Using the function strip_path_suffix() documents
the idea of the code better.

The real change is to add the suffix "git", so that a runtime prefix will
be computed correctly even when the executable was called in /git/ as is
the case in msysGit (Windows insists to search the current directory
before the PATH when looking for an executable).

Signed-off-by: Johannes Schindelin <redacted>
Acked-by: Johannes Sixt <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoIntroduce the function strip_path_suffix()
Johannes Schindelin [Thu, 19 Feb 2009 19:10:49 +0000 (20:10 +0100)]
Introduce the function strip_path_suffix()

The function strip_path_suffix() will try to strip a given suffix from
a given path.  The suffix must start at a directory boundary (i.e. "core"
is not a path suffix of "libexec/git-core", but "git-core" is).

Arbitrary runs of directory separators ("slashes") are assumed identical.

Example:

strip_path_suffix("C:\\msysgit/\\libexec\\git-core",
"libexec///git-core", &prefix)

will set prefix to "C:\\msysgit" and return 0.

Signed-off-by: Johannes Schindelin <redacted>
Acked-by: Johannes Sixt <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoformat-patch: threading test reactivation
Thomas Rast [Thu, 19 Feb 2009 21:26:30 +0000 (22:26 +0100)]
format-patch: threading test reactivation

t4014 tests format-patch --thread since 7d812145, but the tests were
ineffective right from the start at least for bash and dash.  The
loops of the form

  for ...; do something || break; done

introduced by 7d812145 and 5d02294 always exit with status 0, even if
'something' failed, because 'break' returns 0 unless there was no loop
to break.

We take a rather different approach that uses an admittedly heinous
inline Perl script to mangle all interesting information into a format
that is invariant between runs.  We can then test the full patch
sequence in one go (with --stdout), doing away with the loop problem.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoverify_uptodate(): add ce_uptodate(ce) test
Kjetil Barvik [Thu, 19 Feb 2009 20:08:30 +0000 (21:08 +0100)]
verify_uptodate(): add ce_uptodate(ce) test

If we inside verify_uptodate() can already tell from the ce entry that
it is already uptodate by testing it with ce_uptodate(ce), there is no
need to call lstat(2) and ie_match_stat() afterwards.

And, reading from the commit log message from:

    commit eadb5831342bb2e756fa05c03642c4aa1929d4f5
    Author: Junio C Hamano <redacted>
    Date:   Fri Jan 18 23:45:24 2008 -0800

    Avoid running lstat(2) on the same cache entry.

this also seems to be correct usage of the ce_uptodate() macro
introduced by that patch.

This will avoid lots of lstat(2) calls in some cases, for example
by running the 'git checkout' command.

Signed-off-by: Kjetil Barvik <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agomake USE_NSEC work as expected
Kjetil Barvik [Thu, 19 Feb 2009 20:08:29 +0000 (21:08 +0100)]
make USE_NSEC work as expected

Since the filesystem ext4 is now defined as stable in Linux v2.6.28,
and ext4 supports nanonsecond resolution timestamps natively, it is
time to make USE_NSEC work as expected.

This will make racy git situations less likely to happen.  For 'git
checkout' this means it will be less likely that we have to open, read
the contents of the file into RAM, and check if file is really
modified or not.  The result sould be a litle less used CPU time, less
pagefaults and a litle faster program, at least for 'git checkout'.

Since the number of possible racy git situations would increase when
disks gets faster, this patch would be more and more helpfull as times
go by.  For a fast Solid State Disk, this patch should be helpfull.

Note that, when file operations starts to take less than 1 nanosecond,
one would again start to get more racy git situations.

For more info on racy git, see Documentation/technical/racy-git.txt
For more info on ext4, see http://kernelnewbies.org/Ext4

Signed-off-by: Kjetil Barvik <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agofix compile error when USE_NSEC is defined
Kjetil Barvik [Thu, 19 Feb 2009 20:08:28 +0000 (21:08 +0100)]
fix compile error when USE_NSEC is defined

'struct cache' does not have a 'usec' member, but a 'unsigned int
nsec' member.  Simmilar 'struct stat' does not have a 'st_mtim.usec'
member, and we should instead use 'st_mtim.tv_nsec'.

Signed-off-by: Kjetil Barvik <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoDocumentation: Note file formats send-email accepts
Todd Zullinger [Thu, 19 Feb 2009 03:51:06 +0000 (22:51 -0500)]
Documentation: Note file formats send-email accepts

Signed-off-by: Todd Zullinger <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoadd basic branch display tests
Jeff King [Thu, 19 Feb 2009 03:34:44 +0000 (22:34 -0500)]
add basic branch display tests

We were not testing the output of "git branch" anywhere.
Not only does this not protect us against regressions in the
output, but we are not exercising code paths which may have
bugs (such as the one fixed by 45e2b61).

Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobranch: clean up repeated strlen
Jeff King [Thu, 19 Feb 2009 03:35:45 +0000 (22:35 -0500)]
branch: clean up repeated strlen

Commit 45e2b61 fixed the initialization of a "len" struct
parameter via strlen. We can use that to clean up what is
now 3 strlens in a 6-line sequence.

Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agocheck_updates(): effective removal of cache entries marked CE_REMOVE
Kjetil Barvik [Wed, 18 Feb 2009 22:18:03 +0000 (23:18 +0100)]
check_updates(): effective removal of cache entries marked CE_REMOVE

Below is oprofile output from GIT command 'git chekcout -q my-v2.6.25'
(move from tag v2.6.27 to tag v2.6.25 of the Linux kernel):

CPU: Core 2, speed 1999.95 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit
                         mask of 0x00 (Unhalted core cycles) count 20000
Counted INST_RETIRED_ANY_P events (number of instructions retired) with a
                           unit mask of 0x00 (No unit mask) count 20000
CPU_CLK_UNHALT...|INST_RETIRED:2...|
  samples|      %|  samples|      %|
------------------------------------
   409247 100.000    342878 100.000 git
        CPU_CLK_UNHALT...|INST_RETIRED:2...|
          samples|      %|  samples|      %|
        ------------------------------------
           260476 63.6476    257843 75.1996 libz.so.1.2.3
           100876 24.6492     64378 18.7758 kernel-2.6.28.4_2.vmlinux
            30850  7.5382      7874  2.2964 libc-2.9.so
            14775  3.6103      8390  2.4469 git
             2020  0.4936      4325  1.2614 libcrypto.so.0.9.8
              191  0.0467        32  0.0093 libpthread-2.9.so
               58  0.0142        36  0.0105 ld-2.9.so
                1 2.4e-04         0       0 libldap-2.3.so.0.2.31

Detail list of the top 20 function entries (libz counted in one blob):

CPU_CLK_UNHALTED  INST_RETIRED_ANY_P
samples  %        samples  %        image name               symbol name
260476   63.6862  257843   75.2725  libz.so.1.2.3            /lib/libz.so.1.2.3
16587     4.0555  3636      1.0615  libc-2.9.so              memcpy
7710      1.8851  277       0.0809  libc-2.9.so              memmove
3679      0.8995  1108      0.3235  kernel-2.6.28.4_2.vmlinux d_validate
3546      0.8670  2607      0.7611  kernel-2.6.28.4_2.vmlinux __getblk
3174      0.7760  1813      0.5293  libc-2.9.so              _int_malloc
2396      0.5858  3681      1.0746  kernel-2.6.28.4_2.vmlinux copy_to_user
2270      0.5550  2528      0.7380  kernel-2.6.28.4_2.vmlinux __link_path_walk
2205      0.5391  1797      0.5246  kernel-2.6.28.4_2.vmlinux ext4_mark_iloc_dirty
2103      0.5142  1203      0.3512  kernel-2.6.28.4_2.vmlinux find_first_zero_bit
2077      0.5078  997       0.2911  kernel-2.6.28.4_2.vmlinux do_get_write_access
2070      0.5061  514       0.1501  git                      cache_name_compare
2043      0.4995  1501      0.4382  kernel-2.6.28.4_2.vmlinux rcu_irq_exit
2022      0.4944  1732      0.5056  kernel-2.6.28.4_2.vmlinux __ext4_get_inode_loc
2020      0.4939  4325      1.2626  libcrypto.so.0.9.8       /usr/lib/libcrypto.so.0.9.8
1965      0.4804  1384      0.4040  git                      patch_delta
1708      0.4176  984       0.2873  kernel-2.6.28.4_2.vmlinux rcu_sched_grace_period
1682      0.4112  727       0.2122  kernel-2.6.28.4_2.vmlinux sysfs_slab_alias
1659      0.4056  290       0.0847  git                      find_pack_entry_one
1480      0.3619  1307      0.3816  kernel-2.6.28.4_2.vmlinux ext4_writepage_trans_blocks

Notice the memmove line, where the CPU did 7710 / 277 = 27.8 cycles
per instruction, and compared to the total cycles spent inside the
source code of GIT for this command, all the memmove() calls
translates to (7710 * 100) / 14775 = 52.2% of this.

Retesting with a GIT program compiled for gcov usage, I found out that
the memmove() calls came from remove_index_entry_at() in read-cache.c,
where we have:

        memmove(istate->cache + pos,
                istate->cache + pos + 1,
                (istate->cache_nr - pos) * sizeof(struct cache_entry *));

remove_index_entry_at() is called 4902 times from check_updates() in
unpack-trees.c, and each time called we move each cache_entry pointers
(from the removed one) one step to the left.

Since we have 28828 entries in the cache this time, and if we on
average move half of them each time, we in total move approximately
4902 * 0.5 * 28828 * 4 = 282 629 712 bytes, or twice this amount if
each pointer is 8 bytes (64 bit).

OK, is seems that the function check_updates() is called 28 times, so
the estimated guess above had been more correct if check_updates() had
been called only once, but the point is: we get lots of bytes moved.

To fix this, and use an O(N) algorithm instead, where N is the number
of cache_entries, we delete/remove all entries in one loop through all
entries.

From a retest, the new remove_marked_cache_entries() from the patch
below, ended up with the following output line from oprofile:

46        0.0105  15        0.0041  git                      remove_marked_cache_entries

If we can trust the numbers from oprofile in this case, we saved
approximately ((7710 - 46) * 20000) / (2 * 1000 * 1000 * 1000) = 0.077
seconds CPU time with this fix for this particular test.  And notice
that now the CPU did only 46 / 15 = 3.1 cycles/instruction.

Signed-off-by: Kjetil Barvik <redacted>
Acked-by: Linus Torvalds <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 18 Feb 2009 19:31:52 +0000 (11:31 -0800)]
Merge branch 'maint'

* maint:
  tests: fix "export var=val"
  Skip timestamp differences for diff --no-index
  Documentation/git-push: --all, --mirror, --tags can not be combined

17 years agotests: fix "export var=val"
Junio C Hamano [Wed, 18 Feb 2009 19:17:27 +0000 (11:17 -0800)]
tests: fix "export var=val"

Some shells do not like "export var=val"; the right way to write
it is to do an assignment and then export just the variable name.

Signed-off-by: Junio C Hamano <redacted>
17 years agofilter-branch -d: Export GIT_DIR earlier
Lars Noschinski [Wed, 18 Feb 2009 08:35:36 +0000 (09:35 +0100)]
filter-branch -d: Export GIT_DIR earlier

The improved error handling catches a bug in filter-branch when using
-d pointing to a path outside any git repository:

$ git filter-branch -d /tmp/foo master
fatal: Not a git repository (or any of the parent directories): .git

This error message comes from git for-each-ref in line 224. GIT_DIR is
set correctly by git-sh-setup (to the foo.git repository), but not
exported (yet).

Signed-off-by: Lars Noschinski <redacted>
Acked-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agodisallow providing multiple upstream branches to rebase, pull --rebase
Jay Soffian [Wed, 18 Feb 2009 13:44:02 +0000 (08:44 -0500)]
disallow providing multiple upstream branches to rebase, pull --rebase

It does not make sense to provide multiple upstream branches to either
git pull --rebase, or to git rebase, so disallow both.

Signed-off-by: Jay Soffian <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoparse-opt: migrate builtin-ls-files.
Miklos Vajna [Tue, 17 Feb 2009 14:27:11 +0000 (15:27 +0100)]
parse-opt: migrate builtin-ls-files.

Signed-off-by: Miklos Vajna <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTurn the flags in struct dir_struct into a single variable
Johannes Schindelin [Mon, 16 Feb 2009 12:20:25 +0000 (13:20 +0100)]
Turn the flags in struct dir_struct into a single variable

By having flags represented as bits in the new member variable 'flags',
it will be easier to use parse_options when dir_struct is involved.

Signed-off-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoSkip timestamp differences for diff --no-index
Michael Spang [Wed, 18 Feb 2009 06:48:06 +0000 (01:48 -0500)]
Skip timestamp differences for diff --no-index

We display empty diffs for files whose timestamps have changed.
Usually, refreshing the index makes those empty diffs go away.
However, when not using the index they are not very useful and
there is no option to suppress them.

This forces on the skip_stat_unmatch option for diff --no-index,
suppressing any empty diffs. This option is also used for diffs
against the index when "diff.autorefreshindex" is set, but that
option does not apply to diff --no-index.

Signed-off-by: Michael Spang <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit-add -i/-p: learn to unwrap C-quoted paths
Junio C Hamano [Tue, 17 Feb 2009 06:43:43 +0000 (22:43 -0800)]
git-add -i/-p: learn to unwrap C-quoted paths

The underlying plumbing commands are not run with -z option, so the paths
returned from them need to be unquoted as needed.

Remove the now stale BUGS section from git-add documentaiton as suggested
by Teemu Likonen.

Signed-off-by: Junio C Hamano <redacted>
17 years agogit-svn: fix parsing of timestamp obtained from svn
Junio C Hamano [Wed, 18 Feb 2009 18:48:01 +0000 (10:48 -0800)]
git-svn: fix parsing of timestamp obtained from svn

Ward Wouts reports that git-svn barfed like this:

    Unable to parse date: 2004-03-09T09:44:33.Z at /usr/bin/git-svn line 3995

The parse_svn_date sub expects there always are one or more digits after
the decimal point to record fractional seconds, but this example does not
and results in a failure like this.

The fix is based on the original fix by the reporter, further cleaned up.

Signed-off-by: Junio C Hamano <redacted>
Acked-by: Eric Wong <redacted>
17 years agogitweb: Fix warnings with override permitted but no repo override
Marcel M. Cary [Wed, 18 Feb 2009 13:09:41 +0000 (14:09 +0100)]
gitweb: Fix warnings with override permitted but no repo override

When a feature like "blame" is permitted to be overridden in the
repository configuration but it is not actually set in the repository,
a warning is emitted due to the undefined value of the repository
configuration, even though it's a perfectly normal condition.
Emitting warning is grounds for test failure in the gitweb test
script.

This error was caused by rewrite of git_get_project_config from using
"git config [<type>] <name>" for each individual configuration
variable checked to parsing "git config --list --null" output in
commit b201927 (gitweb: Read repo config using 'git config -z -l').
Earlier version of git_get_project_config was returning empty string
if variable do not exist in config; newer version is meant to return
undef in this case, therefore change in feature_bool was needed.

Additionally config_to_* subroutines were meant to be invoked only if
configuration variable exists; therefore we added early return to
git_get_project_config: it now returns no value if variable does not
exists in config.  Otherwise config_to_* subroutines (config_to_bool
in paryicular) wouldn't be able to distinguish between the case where
variable does not exist and the case where variable doesn't have value
(the "[section] noval" case, which evaluates to true for boolean).

While at it fix bug in config_to_bool, where checking if $val is
defined (if config variable has value) was done _after_ stripping
leading and trailing whitespace, which lead to 'Use of uninitialized
value' warning.

Add test case for features overridable but not overriden in repo
config, and case for no value boolean configuration variable.

Signed-off-by: Marcel M. Cary <redacted>
Signed-off-by: Jakub Narebski <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoDocumentation/git-push: --all, --mirror, --tags can not be combined
Gerrit Pape [Tue, 17 Feb 2009 09:25:02 +0000 (09:25 +0000)]
Documentation/git-push: --all, --mirror, --tags can not be combined

While b259f09 made git-push output a better error message for 'git-push
--all --tags', this commit fixes the synopsis in the documentation.

Inconsistency spotted and fix suggested by Jari Aalto through
 http://bugs.debian.org/502567

Signed-off-by: Gerrit Pape <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash completion: only show 'log --merge' if merging
Thomas Rast [Mon, 16 Feb 2009 16:34:57 +0000 (17:34 +0100)]
bash completion: only show 'log --merge' if merging

The gitk completion only shows --merge if MERGE_HEAD is present.
Do it the same way for git-log completion.

Signed-off-by: Thomas Rast <redacted>
Acked-by: Shawn O. Pearce <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash completion: refactor common log, shortlog and gitk options
Thomas Rast [Mon, 16 Feb 2009 16:34:56 +0000 (17:34 +0100)]
bash completion: refactor common log, shortlog and gitk options

Refactor options that are useful for more than one of them into a
variable used by the relevant completions.  This has the effect of
adding the following options to git-log:

  --branches --tags --remotes --first-parent --dense --sparse
  --simplify-merges --simplify-by-decoration --first-parent
  --no-merges

The following to git-shortlog:

  --branches --tags --remotes --first-parent

And the following to gitk:

  --branches --tags --remotes --first-parent --no-merges --max-count=
  --max-age= --since= --after= --min-age= --until= --before= --dense
  --sparse --full-history --simplify-merges --simplify-by-decoration
  --left-right

Signed-off-by: Thomas Rast <redacted>
Acked-by: Shawn O. Pearce <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoAvoid segfault with 'git branch' when the HEAD is detached
Johannes Schindelin [Wed, 18 Feb 2009 18:14:59 +0000 (19:14 +0100)]
Avoid segfault with 'git branch' when the HEAD is detached

A recent addition to the ref_item struct was not taken care of, leading
to a segmentation fault when accessing the (uninitialized) "dest" member.

Signed-off-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogitweb: fix wrong base URL when non-root DirectoryIndex
Giuseppe Bilotta [Sun, 15 Feb 2009 09:18:36 +0000 (10:18 +0100)]
gitweb: fix wrong base URL when non-root DirectoryIndex

CGI::url() has some issues when rebuilding the script URL if the script
is a DirectoryIndex.

One of these issue is the inability to strip PATH_INFO, which is why
we had to do it ourselves.

Another issue is that the resulting URL cannot be used for the <base>
tag: it works if we're the DirectoryIndex at the root level, but not
otherwise.

We fix this by building the proper base URL ourselves, and improve the
comment about the need to strip PATH_INFO manually while we're at it.

Additionally t/t9500-gitweb-standalone-no-errors.sh had to be modified
to set SCRIPT_NAME variable (CGI standard states that it MUST be set,
and now gitweb uses it if PATH_INFO is not empty, as is the case for
some of tests in t9500).

Signed-off-by: Giuseppe Bilotta <redacted>
Signed-off-by: Jakub Narebski <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash: update 'git svn' options
SZEDER Gábor [Sat, 14 Feb 2009 16:21:53 +0000 (17:21 +0100)]
bash: update 'git svn' options

'git svn' got some new subcommands and otions in the last couple of
months.  This patch adds completion support for them.

In particular:

  * 'fetch', 'clone', etc.: '--ignore-paths='
  * 'init' and 'clone': '--prefix=', '--use-log-author',
                        '--add-author-from'
  * 'dcommit': '--commit-url', '--revision'
  * 'log': '--color'
  * 'rebase': '--dry-run'
  * 'branch', 'tag', 'blame', 'migrate' subcommands and their options

Signed-off-by: SZEDER Gábor <redacted>
Acked-by: Shawn O. Pearce <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash: add missing 'git merge' options
SZEDER Gábor [Sun, 15 Feb 2009 13:25:11 +0000 (14:25 +0100)]
bash: add missing 'git merge' options

Namely: '--commit', '--stat', '--no-squash', '--ff', '--no-ff'.

One might wonder why add options that specify the default behaviour
anyway (e.g. '--commit', '--no-squash', etc.).  Users can override the
default with config options (e.g. 'branch.<name>.mergeoptions',
'merge.log'), but sometimes might still need the default behaviour.

Signed-off-by: SZEDER Gábor <redacted>
Acked-by: Shawn O. Pearce <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit-svn: Fix for rewriteRoot URL containing username.
Dévai Tamás [Wed, 11 Feb 2009 23:14:02 +0000 (00:14 +0100)]
git-svn: Fix for rewriteRoot URL containing username.

If the new svn root URL given with the svn-remote.<repo>.rewriteRoot config option
(or by the --rewrite-root option to 'git svn init') contains a username
(such as 'svn+ssh://username@example.com/repo'), find_by_url() cannot find
the repository URL, because the URL contained in the commit message does have
the username removed.

Signed-off-by: Dévai Tamás <redacted>
Acked-by: Eric Wong <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobuiltin-receive-pack.c: fix compiler warnings about format string
René Scharfe [Sun, 15 Feb 2009 18:18:58 +0000 (19:18 +0100)]
builtin-receive-pack.c: fix compiler warnings about format string

While all of the strings passed to warning() are, in fact, literals, the
compiler doesn't recognize them as such because it doesn't see through
the loop used to iterate over them:

   builtin-receive-pack.c: In function 'warn_unconfigured_deny':
   builtin-receive-pack.c:247: warning: format not a string literal and no format arguments
   builtin-receive-pack.c: In function 'warn_unconfigured_deny_delete_current':
   builtin-receive-pack.c:273: warning: format not a string literal and no format arguments

Calm the compiler by adding easily recognizable format string literals.

Signed-off-by: Rene Scharfe <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoRelNotes Update
Junio C Hamano [Sun, 15 Feb 2009 08:15:52 +0000 (00:15 -0800)]
RelNotes Update

Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'mc/setup-cd-p'
Junio C Hamano [Sun, 15 Feb 2009 09:44:58 +0000 (01:44 -0800)]
Merge branch 'mc/setup-cd-p'

* mc/setup-cd-p:
  git-sh-setup: Use "cd" option, not /bin/pwd, for symlinked work tree

17 years agoMerge branch 'ff/submodule-no-fetch'
Junio C Hamano [Sun, 15 Feb 2009 09:44:20 +0000 (01:44 -0800)]
Merge branch 'ff/submodule-no-fetch'

* ff/submodule-no-fetch:
  submodule: add --no-fetch parameter to update command

17 years agoMerge branch 'ms/mailmap'
Junio C Hamano [Sun, 15 Feb 2009 09:44:15 +0000 (01:44 -0800)]
Merge branch 'ms/mailmap'

* ms/mailmap:
  Move mailmap documentation into separate file
  Change current mailmap usage to do matching on both name and email of author/committer.
  Add map_user() and clear_mailmap() to mailmap
  Add find_insert_index, insert_at_index and clear_func functions to string_list
  Add mailmap.file as configurational option for mailmap location

17 years agoMerge branch 'jn/gitweb-committag'
Junio C Hamano [Sun, 15 Feb 2009 09:44:11 +0000 (01:44 -0800)]
Merge branch 'jn/gitweb-committag'

* jn/gitweb-committag:
  gitweb: Better regexp for SHA-1 committag match

17 years agoMerge branch 'rc/http-push'
Junio C Hamano [Sun, 15 Feb 2009 09:43:57 +0000 (01:43 -0800)]
Merge branch 'rc/http-push'

* rc/http-push:
  use a hash of the lock token as the suffix for PUT/MOVE

17 years agouse a hash of the lock token as the suffix for PUT/MOVE
Tay Ray Chuan [Sat, 14 Feb 2009 09:52:14 +0000 (17:52 +0800)]
use a hash of the lock token as the suffix for PUT/MOVE

After 753bc91 ("Remove the requirement opaquelocktoken uri scheme"),
lock tokens are in the URI forms in which they are received from the
server, eg. 'opaquelocktoken:', 'urn:uuid:'.

However, "start_put" (and consequently "start_move"), which attempts to
create a unique temporary file using the UUID of the lock token,
inadvertently uses the lock token in its URI form. These file
operations on the server may not be successful (specifically, in
Windows), due to the colon ':' character from the URI form of the lock
token in the file path.

This patch uses a hash of the lock token instead, guaranteeing only
"safe" characters (a-f, 0-9) are used in the file path.

The token's hash is generated when the lock token is received from the
server in handle_new_lock_ctx, minimizing the number of times of
hashing.

Signed-off-by: Tay Ray Chuan <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoimap.preformattedHTML to tell Thunderbird to send non-flowed text
Jeremy White [Thu, 12 Feb 2009 14:58:12 +0000 (08:58 -0600)]
imap.preformattedHTML to tell Thunderbird to send non-flowed text

Many e-mail based development communities require non-flowed text to carry
patches to prevent whitespaces from getting mangled, but there is no easy
way to tell Thunderbird MUA not to use format=flowed, unless you configure
it to do so unconditionally for all outgoing mails.

A workaround for users who use git-imap-send is to wrap the patch in "pre"
element in the draft folder as an HTML message, and tell Thunderbird to
send "text only".  Thunderbird turns such a message into a non-flowed
plain text when sending it out, which is what we want for patch e-mails.

Signed-off-by: Jeremy White <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'js/gc-prune'
Junio C Hamano [Sun, 15 Feb 2009 08:05:11 +0000 (00:05 -0800)]
Merge branch 'js/gc-prune'

* js/gc-prune:
  gc: make --prune useful again by accepting an optional parameter

17 years agoMerge branch 'tr/abbrev-commit-no-ellipses'
Junio C Hamano [Sun, 15 Feb 2009 08:03:43 +0000 (00:03 -0800)]
Merge branch 'tr/abbrev-commit-no-ellipses'

* tr/abbrev-commit-no-ellipses:
  log: do not print ellipses with --abbrev-commit

17 years agoMerge branch 'jc/branch-previous'
Junio C Hamano [Sun, 15 Feb 2009 08:03:29 +0000 (00:03 -0800)]
Merge branch 'jc/branch-previous'

* jc/branch-previous:
  Teach @{-1} to git merge
  Teach the "@{-1} syntax to "git branch"

17 years agosend-email: --suppress-cc improvements
Jay Soffian [Sun, 15 Feb 2009 04:32:15 +0000 (23:32 -0500)]
send-email: --suppress-cc improvements

Since 6564828 (git-send-email: Generalize auto-cc recipient
mechanism., 2007-12-25) we can suppress automatic Cc generation
separately for each of the possible address sources.  However,
--suppress-cc=sob suppressed both SOB lines and body (but not header)
Cc lines, contrary to the name.

Change --suppress-cc=sob to mean only SOB lines, and add separate
choices 'bodycc' (body Cc lines) and 'body' (both 'sob' and 'bodycc').
The option --no-signed-off-by-cc now acts like --suppress-cc=sob,
which is not backwards compatible but matches the name of the option.

Also update the documentation and add a few tests.

Original patch by me. Revised by Thomas Rast, who contributed the
documentation and test updates.

Signed-off-by: Jay Soffian <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agosend-email: handle multiple Cc addresses when reading mbox message
Jay Soffian [Sun, 15 Feb 2009 04:32:14 +0000 (23:32 -0500)]
send-email: handle multiple Cc addresses when reading mbox message

When git format-patch is given multiple --cc arguments, it generates a
Cc header that looks like:

Cc: first@example.com,
     second@example.com,
     third@example.com

Before this commit, send-email was unable to handle such a message as it
did not handle folded header lines, nor multiple recipients in a Cc
line.

This patch:

- Unfolds header lines by pre-processing the header before extracting
  any of its fields.

- Handles Cc lines with multiple recipients.

- Adds use of Mail::Address if available for splitting Cc line and
  the "Who should the emails be sent to?" prompt", with fall back to
  existing split_addrs() function.

- Tests the new functionality and adds two tests for detecting whether
  "From:" appears correctly in message body when patch author differs
  from patch sender.

Signed-off-by: Jay Soffian <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agosend-email: allow send-email to run outside a repo
Jay Soffian [Sun, 15 Feb 2009 04:32:13 +0000 (23:32 -0500)]
send-email: allow send-email to run outside a repo

send-email is supposed to be able to run from outside a repo. This
ability was broken by commits caf0c3d6 (make the message file name more
specific) and 5df9fcf6 (interpret unknown files as revision lists).

This commit provides a fix for both.

Signed-off-by: Jay Soffian <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash: fix misspelled 'git svn' option
SZEDER Gábor [Sat, 14 Feb 2009 16:21:52 +0000 (17:21 +0100)]
bash: fix misspelled 'git svn' option

'--user-log-author' -> '--use-log-author'

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agot1500: more 'git rev-parse --git-dir' tests
SZEDER Gábor [Sat, 14 Feb 2009 16:16:29 +0000 (17:16 +0100)]
t1500: more 'git rev-parse --git-dir' tests

Extend t1500 with tests of 'git rev-parse --git-dir' when invoked from
other directories of the repository or the work tree.

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMove 'rev-parse --git-dir' test to t1500
SZEDER Gábor [Sat, 14 Feb 2009 16:16:28 +0000 (17:16 +0100)]
Move 'rev-parse --git-dir' test to t1500

Commit 72183cb2 (Fix gitdir detection when in subdir of
gitdir, 2009-01-16) added a test to 't1501-worktree' to check the
behaviour of 'git rev-parse --git-dir' in a special case.  However,
t1501 is about testing separate work tree setups, and not about basic
'rev-parse' functionality, which is tested in t1500-rev-parse.
Therefore, this patch moves that test to t1500.

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agorerere: remove duplicated functions
SZEDER Gábor [Sat, 14 Feb 2009 22:21:04 +0000 (23:21 +0100)]
rerere: remove duplicated functions

Both rerere.c and builtin-rerere.c define the static functions
rr_path() and has_resolution() the exact same way.  To eliminate this
code duplication this patch turns the functions in rerere.c
non-static, and makes builtin-rerere.c use them.  Also, since this
puts these two functions into the global namespace, rename them to
rerere_path() and has_rerere_resolution(), respectively, and rename
their "name" parameter to "hex", because it better reflects what that
parameter actually is.

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoDocumentation: pruning recipe for destructive filter-branch
Thomas Rast [Sat, 14 Feb 2009 20:56:51 +0000 (21:56 +0100)]
Documentation: pruning recipe for destructive filter-branch

Add a section about how to shrink a repository's size after running
git-filter-branch to remove large blobs from history.

This comes up every week or so on IRC, and the commands required to
handle every case are not very newbie-friendly, so hopefully writing
them down somewhere leads to fewer questions.

It may seem contradictory to document fallbacks for older Gits in
newer docs, but we want to point people at this as a FAQ answer, and
they will frequently not have the newest version installed.

Thanks to Björn Steinbrink and Junio C Hamano for comments and
corrections.

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogc: make --prune useful again by accepting an optional parameter
Johannes Schindelin [Sat, 14 Feb 2009 22:10:10 +0000 (23:10 +0100)]
gc: make --prune useful again by accepting an optional parameter

With this patch, "git gc --no-prune" will not prune any loose (and
dangling) object, and "git gc --prune=5.minutes.ago" will prune
all loose objects older than 5 minutes.

This patch benefitted from suggestions by Thomas Rast and Jan Krᅵger.

Signed-off-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTeach @{-1} to git merge
Junio C Hamano [Sat, 14 Feb 2009 07:26:12 +0000 (23:26 -0800)]
Teach @{-1} to git merge

1.6.2 will have @{-1} syntax advertised as "usable anywhere you can use
a branch name".  However, "git merge @{-1}" did not work.

Signed-off-by: Junio C Hamano <redacted>
17 years agoTeach the "@{-1} syntax to "git branch"
Junio C Hamano [Sat, 14 Feb 2009 07:08:05 +0000 (23:08 -0800)]
Teach the "@{-1} syntax to "git branch"

This teaches the new "@{-1} syntax to refer to the previous branch to "git
branch".  After looking at somebody's faulty patch series on a topic
branch too long, if you decide it is not worth merging, you can just say:

    $ git checkout master
    $ git branch -D @{-1}

to get rid of it without having to type the name of the topic you now hate
so much for wasting a lot of your time.

Signed-off-by: Junio C Hamano <redacted>
17 years agosymbolic-ref: allow refs/<whatever> in HEAD
Jeff King [Fri, 13 Feb 2009 18:26:09 +0000 (13:26 -0500)]
symbolic-ref: allow refs/<whatever> in HEAD

Commit afe5d3d5 introduced a safety valve to symbolic-ref to
disallow installing an invalid HEAD. It was accompanied by
b229d18a, which changed validate_headref to require that
HEAD contain a pointer to refs/heads/ instead of just refs/.
Therefore, the safety valve also checked for refs/heads/.

As it turns out, topgit is using refs/top-bases/ in HEAD,
leading us to re-loosen (at least temporarily) the
validate_headref check made in b229d18a. This patch does the
corresponding loosening for the symbolic-ref safety valve,
so that the two are in agreement once more.

Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoRemove redundant bit clears from diff_setup()
Keith Cascio [Fri, 13 Feb 2009 17:33:34 +0000 (09:33 -0800)]
Remove redundant bit clears from diff_setup()

All bits already clear after memset(0).

Signed-off-by: Junio C Hamano <redacted>
17 years agobuiltin-branch.c: Rename branch category color names
Arjen Laarhoven [Fri, 13 Feb 2009 21:53:41 +0000 (22:53 +0100)]
builtin-branch.c: Rename branch category color names

The branch color constants have the form COLOR_BRANCH_$category.  Rename
them to BRANCH_COLOR_$category as this conveys their meaning better.

Signed-off-by: Arjen Laarhoven <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoClean up use of ANSI color sequences
Arjen Laarhoven [Fri, 13 Feb 2009 21:53:40 +0000 (22:53 +0100)]
Clean up use of ANSI color sequences

Remove the literal ANSI escape sequences and replace them by readable
constants.

Signed-off-by: Arjen Laarhoven <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agolog: do not print ellipses with --abbrev-commit
Thomas Rast [Fri, 13 Feb 2009 22:10:41 +0000 (23:10 +0100)]
log: do not print ellipses with --abbrev-commit

'git log --abbrev-commit' added an ellipsis to all commit names that
were abbreviated.  This was particularly annoying if you wanted to
cut&paste the sha1 from the terminal, since selecting by word would
pick up '...'  too.

So use find_unique_abbrev() instead of diff_unique_abbrev() in all
log-related commit sha1 printing routines, and also change the
formatting of the 'Merge: parent1 parent2' line output via
pretty_print_commit().

Signed-off-by: Thomas Rast <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoTeach rebase to rebase even if upstream is up to date
Sverre Rabbelier [Fri, 13 Feb 2009 22:48:01 +0000 (23:48 +0100)]
Teach rebase to rebase even if upstream is up to date

Normally, if the current branch is up to date, the rebase is aborted.
However, it may be desirable to allow rebasing even if the current
branch is up to date. When using the '--whitespace=fix' option -f is
implied.

Signed-off-by: Sverre Rabbelier <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobuiltin-branch: improve output when displaying remote branches
Jay Soffian [Fri, 13 Feb 2009 09:40:18 +0000 (04:40 -0500)]
builtin-branch: improve output when displaying remote branches

When encountering a symref (typically refs/remotes/<remote>/HEAD),
display the ref target.

When displaying local and remote branches, prefix the remote branch
names with "remotes/" to make the remote branches clear from the local
branches. If displaying only the remote branches, the prefix is not
shown since it would be redundant.

Sample output:

$ git branch
  foo -> master
* master
  rather-long-branch-name

$ git branch -v
  foo                     -> master
* master                  51cecb2 initial
  rather-long-branch-name 51cecb2 initial

$ git branch -v --no-abbrev
  foo                     -> master
* master                  51cecb2dbb1a1902bb4df79b543c8f951ee59d83 initial
  rather-long-branch-name 51cecb2dbb1a1902bb4df79b543c8f951ee59d83 initial

$ git branch -r
  frotz/HEAD -> frotz/master
  frotz/master
  origin/HEAD -> origin/master
  origin/UNUSUAL -> refs/heads/master
  origin/master

$ git branch -a
  foo -> master
* master
  rather-long-branch-name
  remotes/frotz/HEAD -> frotz/master
  remotes/frotz/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/UNUSUAL -> refs/heads/master
  remotes/origin/master

$ git branch -rv
  frotz/HEAD     -> frotz/master
  frotz/master   e1d8130 added file2
  origin/HEAD    -> origin/master
  origin/UNUSUAL -> refs/heads/master
  origin/master  e1d8130 added file2

$ git branch -av
  foo                     -> master
* master                  51cecb2 initial
  rather-long-branch-name 51cecb2 initial
  remotes/frotz/HEAD      -> frotz/master
  remotes/frotz/master    e1d8130 added file2
  remotes/origin/HEAD     -> origin/master
  remotes/origin/UNUSUAL  -> refs/heads/master
  remotes/origin/master   e1d8130 added file2

Signed-off-by: Jay Soffian <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agobash-completion: Complete the values of color.interactive, color.ui, color.pager
Matt Kraai [Thu, 12 Feb 2009 15:55:54 +0000 (07:55 -0800)]
bash-completion: Complete the values of color.interactive, color.ui, color.pager

Signed-off-by: Matt Kraai <redacted>
Acked-by: Shawn O. Pearce <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoInstall the default "master" branch configuration after cloning a void
Junio C Hamano [Thu, 12 Feb 2009 06:42:27 +0000 (22:42 -0800)]
Install the default "master" branch configuration after cloning a void

After "cloning from an empty repository", we have a configuration to
describe the remote's URL and the default ref mappings, but we lack the
branch configuration for the default branch we create on our end,
"master".

It is likely that the empty repository we cloned from will point the
default "master" branch with its HEAD, so prepare the local configuration
to match.

Signed-off-by: Junio C Hamano <redacted>
17 years agoUpdate documentation to add further information about using Thunderbird with git...
Jeremy White [Thu, 12 Feb 2009 21:17:04 +0000 (15:17 -0600)]
Update documentation to add further information about using Thunderbird with git-imap-send.

Signed-off-by: Jeremy White <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agogit-rebase.txt: --interactive does not work with --whitespace
Mark Burton [Thu, 12 Feb 2009 10:21:19 +0000 (10:21 +0000)]
git-rebase.txt: --interactive does not work with --whitespace

Signed-off-by: Mark Burton <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoAdd 'rm -f' equivalent to 'git rm' example of filter-branch --index-filter
Jacob Helwig [Thu, 12 Feb 2009 18:01:10 +0000 (10:01 -0800)]
Add 'rm -f' equivalent to 'git rm' example of filter-branch --index-filter

Signed-off-by: Jacob Helwig <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoEnable setting attach as the default in .gitconfig for git-format-patch.
Jeremy White [Thu, 12 Feb 2009 15:51:55 +0000 (09:51 -0600)]
Enable setting attach as the default in .gitconfig for git-format-patch.

Signed-off-by: Jeremy White <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoRevert "validate_headref: tighten ref-matching to just branches"
Junio C Hamano [Thu, 12 Feb 2009 21:02:09 +0000 (13:02 -0800)]
Revert "validate_headref: tighten ref-matching to just branches"

This reverts commit b229d18a809c169314b7f0d048dc5a7632e8f916, at least
until we figure out how to work better with TopGit that points HEAD to
refs/top-bases/ hierarchy.

17 years agoBugfix: GIT_EXTERNAL_DIFF with more than one changed files
Nazri Ramliy [Thu, 12 Feb 2009 13:36:14 +0000 (21:36 +0800)]
Bugfix: GIT_EXTERNAL_DIFF with more than one changed files

When there is more than one file that are changed, running git diff with
GIT_EXTERNAL_DIFF incorrectly diagnoses an programming error and dies.
The check introduced in 479b0ae (diff: refactor tempfile cleanup handling,
2009-01-22) to detect a temporary file slot that forgot to remove its
temporary file was inconsistent with the way the codepath to remove the
temporary to mark the slot that it is done with it.

This patch fixes this problem and adds a test case for it.

Signed-off-by: Nazri Ramliy <redacted>
Acked-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoSupport "\" in non-wildcard exclusion entries
Finn Arne Gangstad [Tue, 10 Feb 2009 14:20:17 +0000 (15:20 +0100)]
Support "\" in non-wildcard exclusion entries

"\" was treated differently in exclude rules depending on whether a
wildcard match was done. For wildcard rules, "\" was de-escaped in
fnmatch, but this was not done for other rules since they used strcmp
instead.  A file named "#foo" would not be excluded by "\#foo", but would
be excluded by "\#foo*".

We now treat all rules with "\" as wildcard rules.

Another solution could be to de-escape all non-wildcard rules as we
read them, but we would have to do the de-escaping exactly as fnmatch
does it to avoid inconsistencies.

Signed-off-by: Finn Arne Gangstad <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoadd -i: revisit hunk on editor failure
Deskin Miller [Thu, 12 Feb 2009 05:19:41 +0000 (00:19 -0500)]
add -i: revisit hunk on editor failure

Similar to the behaviour for editing a commit message, let terminating
the editor with a failure abort the current hunk edit and revisit the
option selection for the hunk.

Signed-off-by: Deskin Miller <redacted>
Signed-off-by: Junio C Hamano <redacted>
17 years agoMerge branch 'maint'
Junio C Hamano [Thu, 12 Feb 2009 02:47:30 +0000 (18:47 -0800)]
Merge branch 'maint'

* maint:
  Prepare for 1.6.1.4.
  Make repack less likely to corrupt repository
  fast-export: ensure we traverse commits in topological order
  Clear the delta base cache if a pack is rebuilt

Conflicts:
RelNotes

git clone https://git.99rst.org/PROJECT