Code

git.git
16 years agoOnly use GIT_CONFIG in "git config", not other programs
Daniel Barkalow [Mon, 30 Jun 2008 07:37:47 +0000 (03:37 -0400)]
Only use GIT_CONFIG in "git config", not other programs

For everything other than using "git config" to read or write a
git-style config file that isn't the current repo's config file,
GIT_CONFIG was actively detrimental. Rather than argue over which
programs are important enough to have work anyway, just fix all of
them at the root.

Also removes GIT_LOCAL_CONFIG, which would only be useful for programs
that do want to use global git-specific config, but not the repo's own
git-specific config, and want to use some other, presumably
git-specific config. Despite being documented, I can't find any sign that
it was ever used.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Mon, 30 Jun 2008 07:44:19 +0000 (00:44 -0700)]
Merge branch 'maint'

* maint:
  doc/rev-parse: clarify reflog vs --until for specifying revisions

16 years agoAdd test results directory to t/.gitignore
Brian Gernhardt [Sun, 29 Jun 2008 20:47:56 +0000 (16:47 -0400)]
Add test results directory to t/.gitignore

We don't need test results to be committed if we're fixing a test.

Signed-off-by: Brian Gernhardt <benji@silverinsanity.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodoc/rev-parse: clarify reflog vs --until for specifying revisions
Jeff King [Mon, 30 Jun 2008 03:27:45 +0000 (23:27 -0400)]
doc/rev-parse: clarify reflog vs --until for specifying revisions

The rev-parse manpage introduces the branch@{date} syntax,
and mentions the reflog specifically. However, new users may
not be familiar with the distinction between the reflog and
the commit date, so let's help them out with a "you may be
interested in --until" pointer.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUpdate draft release notes for 1.6.0
Junio C Hamano [Sun, 29 Jun 2008 20:34:26 +0000 (13:34 -0700)]
Update draft release notes for 1.6.0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: don't assume git-sh-setup and git-parse-remote are in PATH
jrnieder@uchicago.edu [Sun, 29 Jun 2008 16:10:20 +0000 (11:10 -0500)]
Documentation: don't assume git-sh-setup and git-parse-remote are in PATH

When git-parse-remote and git-sh-setup are not installed in
$(bindir) anymore, the shell script library won't be found on
user's $PATH in general.

Signed-off-by: Jonathan Nieder <jrnieder@uchicago.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot9700: skip when Test::More is not available
Junio C Hamano [Sun, 29 Jun 2008 20:21:42 +0000 (13:21 -0700)]
t9700: skip when Test::More is not available

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Sun, 29 Jun 2008 04:08:35 +0000 (21:08 -0700)]
Merge branch 'maint'

* maint:
  git-svn: don't sanitize remote names in config
  git-svn: avoid filling up the disk with temp files.
  git cat-file: Fix memory leak in batch mode
  fix git config example syntax
  avoid off-by-one error in run_upload_archive

16 years agogit-svn: don't sanitize remote names in config
Eric Wong [Sun, 29 Jun 2008 03:40:32 +0000 (20:40 -0700)]
git-svn: don't sanitize remote names in config

The original sanitization code was just taken from the
remotes2config.sh shell script in contrib.

Credit to Avery Pennarun for noticing this mistake, and Junio
for clarifying the rules for config section names:

Junio C Hamano wrote in <7vfxr23s6m.fsf@gitster.siamese.dyndns.org>:

> In
>
>  [foo "bar"] baz = value
>
> foo and baz must be config.c::iskeychar() (and baz must be isalpha()), but
> "bar" can be almost anything.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoshow_stats(): fix stats width calculation
Olivier Marin [Fri, 27 Jun 2008 00:18:48 +0000 (02:18 +0200)]
show_stats(): fix stats width calculation

Before this patch, name_width becomes negative or null for width values
less than 15 and name_width values greater than 25 (default: 50). This
leads to output random data.

This patch checks for minimal width and name_width values.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: remove {show,whatchanged}.difftree config options
Olivier Marin [Fri, 27 Jun 2008 00:17:55 +0000 (02:17 +0200)]
Documentation: remove {show,whatchanged}.difftree config options

This removes, from the documentation and the bash completion script, the
two config options that were introduced by the git-whatchanged.sh script
and lost in the C rewrite. Today, we can use aliases as an alternative.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: avoid filling up the disk with temp files.
Avery Pennarun [Sat, 28 Jun 2008 23:33:56 +0000 (19:33 -0400)]
git-svn: avoid filling up the disk with temp files.

Commit ffe256f9bac8a40ff751a9341a5869d98f72c285 ("git-svn: Speed up fetch")
introduced changes that create a temporary file for each object fetched by
svn.  These files should be deleted automatically, but perl apparently
doesn't do this until the process exits (or perhaps when its garbage
collector runs).

This means that on a large fetch, especially with lots of branches, we
sometimes fill up /tmp completely, which prevents the next temp file from
being written completely.  This is aggravated by the fact that a new temp
file is created for each updated file, even if that update produces a file
identical to one already in git.  Thus, it can happen even if there's lots
of disk space to store the finished repository.

We weren't adequately checking for write errors, so this would result in an
invalid file getting committed, which caused git-svn to fail later with an
invalid checksum.

This patch adds a check to syswrite() so similar problems don't lead to
corruption in the future.  It also unlink()'s each temp file explicitly
when we're done with it, so the disk doesn't need to fill up.

Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
Tested-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit cat-file: Fix memory leak in batch mode
Björn Steinbrink [Sun, 29 Jun 2008 01:21:25 +0000 (03:21 +0200)]
git cat-file: Fix memory leak in batch mode

When run in batch mode, git cat-file never frees the memory for the blob
contents it is printing. This quickly adds up and causes git-svn to be
hardly usable for imports of large svn repos, because it uses cat-file in
batch mode and cat-file's memory usage easily reaches several hundred MB
without any good reason.

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agofix git config example syntax
Joey Hess [Sat, 28 Jun 2008 20:02:47 +0000 (16:02 -0400)]
fix git config example syntax

git-config expects a space, not '=' between option and value.

Also, quote the value since it contains globs, which some shells will not
pass through unchanged, or will abort if the glob doesn't expand.

Signed-off-by: Joey Hess <joey@kitenet.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoavoid off-by-one error in run_upload_archive
Jochen Voss [Sat, 28 Jun 2008 16:04:24 +0000 (17:04 +0100)]
avoid off-by-one error in run_upload_archive

Make sure that buf has enough space to store the trailing \0 of
the command line argument, too.

Signed-off-by: Jochen Voss <voss@seehuhn.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT-VERSION-GEN: do not fail if a 'HEAD' file exists in the working copy
Lea Wiemann [Sat, 28 Jun 2008 17:13:29 +0000 (19:13 +0200)]
GIT-VERSION-GEN: do not fail if a 'HEAD' file exists in the working copy

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocommit-tree: lift completely arbitrary limit of 16 parents
Johannes Schindelin [Fri, 27 Jun 2008 12:24:47 +0000 (13:24 +0100)]
commit-tree: lift completely arbitrary limit of 16 parents

There is no really good reason to have a merge with more than 16
parents, but we have a history of giving our users rope.

Combined with the fact that there was no good reason for that
arbitrary limit in the first place, here is an all-too-easy to fix.

Kind of wished-for by Len Brown.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoshrink git-shell by avoiding redundant dependencies
Dmitry Potapov [Fri, 27 Jun 2008 20:46:42 +0000 (00:46 +0400)]
shrink git-shell by avoiding redundant dependencies

A lot of modules that have nothing to do with git-shell functionality
were linked in, bloating git-shell more than 8 times.

This patch cuts off redundant dependencies by:
1. providing stubs for three functions that make no sense for git-shell;
2. moving quote_path_fully from environment.c to quote.c to make the
   later self sufficient;
3. moving make_absolute_path into a new separate file.

The following numbers have been received with the default optimization
settings on master using GCC 4.1.2:

Before:
   text    data     bss     dec     hex filename
 143915    1348   93168  238431   3a35f git-shell

After:
   text    data     bss     dec     hex filename
  17670     788    8232   26690    6842 git-shell

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agohelp: check early if we have a command, if not try a documentation topic
Christian Couder [Sat, 28 Jun 2008 04:35:03 +0000 (06:35 +0200)]
help: check early if we have a command, if not try a documentation topic

Before this patch, something like "git help tutorial" did not work,
people had to use "git help gittutorial" which is not very intuitive.

This patch uses the "is_git_command" function to test early if the
argument passed to "git help" is a git command, and if this is not the
case then we prefix the argument with "git" instead of "git-".

This way, things like "git help tutorial" or "git help glossary" will
work fine.

The little downside of this patch is that the "is_git_command" is a
little bit slow.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocument the double-dash "rev -- path" disambiguator
Junio C Hamano [Thu, 26 Jun 2008 05:16:37 +0000 (22:16 -0700)]
Document the double-dash "rev -- path" disambiguator

This is a very well established command line convention that old residents
of the git mailing list knew by heart and nobody even thought about
documenting it explicitly, which was not very nice.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDon't use dash commands (git-foo) in tutorial-2
Ted Percival [Thu, 26 Jun 2008 13:22:19 +0000 (23:22 +1000)]
Don't use dash commands (git-foo) in tutorial-2

Signed-off-by: Ted Percival <ted@midg3t.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agotest-lib.sh: show git init output when in verbose mode
Lea Wiemann [Thu, 26 Jun 2008 18:35:19 +0000 (20:35 +0200)]
test-lib.sh: show git init output when in verbose mode

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Fri, 27 Jun 2008 01:12:47 +0000 (18:12 -0700)]
Merge branch 'maint'

* maint:
  GIT 1.5.5.5
  GIT 1.5.4.6
  git-shell: accept "git foo" form
  diff --check: do not discard error status upon seeing a good line

16 years agoMerge branch 'maint-1.5.5' into maint
Junio C Hamano [Fri, 27 Jun 2008 01:08:51 +0000 (18:08 -0700)]
Merge branch 'maint-1.5.5' into maint

* maint-1.5.5:
  GIT 1.5.5.5
  GIT 1.5.4.6
  git-shell: accept "git foo" form

Conflicts:

GIT-VERSION-GEN
RelNotes

16 years agoGIT 1.5.5.5 v1.5.5.5
Junio C Hamano [Fri, 27 Jun 2008 00:16:50 +0000 (17:16 -0700)]
GIT 1.5.5.5

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint-1.5.4' into maint-1.5.5
Junio C Hamano [Fri, 27 Jun 2008 00:14:03 +0000 (17:14 -0700)]
Merge branch 'maint-1.5.4' into maint-1.5.5

* maint-1.5.4:
  GIT 1.5.4.6
  git-shell: accept "git foo" form

Conflicts:

GIT-VERSION-GEN
RelNotes

16 years agoGIT 1.5.4.6 v1.5.4.6
Junio C Hamano [Fri, 27 Jun 2008 00:11:21 +0000 (17:11 -0700)]
GIT 1.5.4.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-shell: accept "git foo" form
Junio C Hamano [Sun, 2 Dec 2007 06:16:19 +0000 (22:16 -0800)]
git-shell: accept "git foo" form

This is a backport of 0a47dc110e042b5bcc63dc94c8d517e67efe9306
to 'maint' to be included in 1.5.6.2 so that older server side
can accept dashless form of request when clients are updated.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodiff --check: do not discard error status upon seeing a good line
Junio C Hamano [Thu, 26 Jun 2008 20:16:33 +0000 (13:16 -0700)]
diff --check: do not discard error status upon seeing a good line

"git diff --check" should return non-zero when there was any whitespace
error but the code only paid attention to the error status of the last
new line in the patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoimprove for-each-ref test script
Jeff King [Thu, 26 Jun 2008 08:08:41 +0000 (04:08 -0400)]
improve for-each-ref test script

Previously, we did a sanity check by doing for-each-ref
using each possible format atom. However, we never checked
the actual output produced by that atom, which recently let
an obvious bug go undetected for some time.

While we're at it, also clean up a few '!' into
test_must_fail.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd 'git-p4.allowSubmit' to git-p4
Jing Xue [Sun, 22 Jun 2008 18:12:39 +0000 (14:12 -0400)]
Add 'git-p4.allowSubmit' to git-p4

I'm working with a perforce repo using git-p4. There are some config
files which I need to change locally according to my environment. I'm
using a 'local' git branch to park these changes. And I want to avoid
accidentally checking them into p4 just by doing "git p4 submit"
mindlessly without realizing which branch I'm actually on.

This patch adds a new git config, 'git-p4.allowSubmit', which is a
whitelist of branch names. "git p4 submit" will only allow submissions
from local branches on the list. Useful for preventing inadvertently
submitting from a strictly local branch.

For backward compatibility, if this config is not set at all,
submissions from all branches are allowed.

Signed-off-by: Jing Xue <jingxue@digizenstudio.com>
Acked-By: Simon Hausmann <simon@lst.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoStart draft release notes for 1.6.0
Junio C Hamano [Thu, 26 Jun 2008 07:13:37 +0000 (00:13 -0700)]
Start draft release notes for 1.6.0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoupdate-hook-example: optionally allow non-fast-forward
Dmitry Potapov [Wed, 25 Jun 2008 23:14:31 +0000 (03:14 +0400)]
update-hook-example: optionally allow non-fast-forward

Sometimes it is desirable to have non-fast-forward branches in a
shared repository. A typical example of that is the 'pu' branch.
This patch extends the format of allowed-users and allow-groups
files by using the '+' sign at the beginning as the mark that
non-fast-forward pushes are permitted to the branch.

Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Thu, 26 Jun 2008 01:29:14 +0000 (18:29 -0700)]
Merge branch 'maint'

* maint:
  GIT 1.5.6.1
  fix update-hook-example to work with packed tag references
  clone: create intermediate directories of destination repo
  for-each-ref: implement missing tag values
  git-rebase.sh: Add check if rebase is in progress

16 years agoFix use of "perl -i" on Windows
Alex Riesen [Wed, 25 Jun 2008 18:35:13 +0000 (20:35 +0200)]
Fix use of "perl -i" on Windows

The perldiag(1) has following to say about this:

    "Can't do inplace edit without backup"

(F) You're on a system such as MS-DOS that gets confused if
you try reading from a deleted (but still opened) file. You
have to say -i.bak, or some such.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT 1.5.6.1 v1.5.6.1
Junio C Hamano [Thu, 26 Jun 2008 00:09:40 +0000 (17:09 -0700)]
GIT 1.5.6.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'sb/rebase'
Junio C Hamano [Wed, 25 Jun 2008 20:20:26 +0000 (13:20 -0700)]
Merge branch 'sb/rebase'

* sb/rebase:
  t3404: stricter tests for git-rebase--interactive
  api-builtin.txt: update and fix typo

16 years agoMerge branch 'lw/gitweb'
Junio C Hamano [Wed, 25 Jun 2008 20:19:53 +0000 (13:19 -0700)]
Merge branch 'lw/gitweb'

* lw/gitweb:
  gitweb: standarize HTTP status codes

16 years agoMerge branch 'lt/config-fsync'
Junio C Hamano [Wed, 25 Jun 2008 20:19:49 +0000 (13:19 -0700)]
Merge branch 'lt/config-fsync'

* lt/config-fsync:
  Add config option to enable 'fsync()' of object files
  Split up default "i18n" and "branch" config parsing into helper routines
  Split up default "user" config parsing into helper routine
  Split up default "core" config parsing into helper routine

16 years agoMerge branch 'sr/tests'
Junio C Hamano [Wed, 25 Jun 2008 20:19:22 +0000 (13:19 -0700)]
Merge branch 'sr/tests'

* sr/tests:
  Hook up the result aggregation in the test makefile.
  A simple script to parse the results from the testcases
  Modify test-lib.sh to output stats to t/test-results/*

Conflicts:

t/test-lib.sh

16 years agoMerge branch 'jh/clone-packed-refs'
Junio C Hamano [Wed, 25 Jun 2008 20:18:54 +0000 (13:18 -0700)]
Merge branch 'jh/clone-packed-refs'

* jh/clone-packed-refs:
  Teach "git clone" to pack refs
  Prepare testsuite for a "git clone" that packs refs
  Move pack_refs() and friends into libgit
  Incorporate fetched packs in future object traversal

16 years agoMerge branch 'lw/perlish'
Junio C Hamano [Wed, 25 Jun 2008 20:18:46 +0000 (13:18 -0700)]
Merge branch 'lw/perlish'

* lw/perlish:
  Git.pm: add test suite
  t/test-lib.sh: add test_external and test_external_without_stderr

16 years agofix update-hook-example to work with packed tag references
Dmitry Potapov [Wed, 25 Jun 2008 08:26:55 +0000 (12:26 +0400)]
fix update-hook-example to work with packed tag references

The update-hook-example used 'test -f' to check the tag present, which
does not work if the checked reference is packed. This check has been
changed to use 'git rev-parse $tag' instead.

Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoclone: create intermediate directories of destination repo
Jeff King [Wed, 25 Jun 2008 05:41:34 +0000 (01:41 -0400)]
clone: create intermediate directories of destination repo

The shell version used to use "mkdir -p" to create the repo
path, but the C version just calls "mkdir". Let's replicate
the old behavior. We have to create the git and worktree
leading dirs separately; while most of the time, the
worktree dir contains the git dir (as .git), the user can
override this using GIT_WORK_TREE.

We can reuse safe_create_leading_directories, but we need to
make a copy of our const buffer to do so. Since
merge-recursive uses the same pattern, we can factor this
out into a global function. This has two other cleanup
advantages for merge-recursive:

  1. mkdir_p wasn't a very good name. "mkdir -p foo/bar" actually
     creates bar, but this function just creates the leading
     directories.

  2. mkdir_p took a mode argument, but it was completely
     ignored.

Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'jc/maint-combine-diff-pre-context' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:20:01 +0000 (11:20 -0700)]
Merge branch 'jc/maint-combine-diff-pre-context' into maint

* jc/maint-combine-diff-pre-context:
  diff -c/--cc: do not include uninteresting deletion before leading context

16 years agoMerge branch 'lt/maint-gitdir-relative' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:19:33 +0000 (11:19 -0700)]
Merge branch 'lt/maint-gitdir-relative' into maint

* lt/maint-gitdir-relative:
  Make git_dir a path relative to work_tree in setup_work_tree()

16 years agoMerge branch 'sb/maint-rebase' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:18:39 +0000 (11:18 -0700)]
Merge branch 'sb/maint-rebase' into maint

* sb/maint-rebase:
  git-rebase.sh: Add check if rebase is in progress

16 years agofor-each-ref: implement missing tag values
Jeff King [Wed, 25 Jun 2008 16:08:15 +0000 (12:08 -0400)]
for-each-ref: implement missing tag values

The "type" and "object" fields for tags were accepted as
valid atoms, but never implemented. Consequently, they
simply returned the empty string, even for valid tags.

Noticed by Lea Wiemann.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoverify-pack: test for detection of index v2 object CRC mismatch
Nicolas Pitre [Wed, 25 Jun 2008 03:19:44 +0000 (23:19 -0400)]
verify-pack: test for detection of index v2 object CRC mismatch

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoverify-pack: check packed object CRC when using index version 2
Nicolas Pitre [Wed, 25 Jun 2008 03:19:02 +0000 (23:19 -0400)]
verify-pack: check packed object CRC when using index version 2

To do so, check_pack_crc() moved from builtin-pack-objects.c to
pack-check.c where it is more logical to share.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agomove show_pack_info() where it belongs
Nicolas Pitre [Wed, 25 Jun 2008 03:18:17 +0000 (23:18 -0400)]
move show_pack_info() where it belongs

This is called when verify_pack() has its verbose argument set, and
verbose in this context makes sense only for the actual 'git verify-pack'
command.  Therefore let's move show_pack_info() to builtin-verify-pack.c
instead and remove useless verbose argument from verify_pack().

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agooptimize verify-pack a bit
Nicolas Pitre [Wed, 25 Jun 2008 03:17:12 +0000 (23:17 -0400)]
optimize verify-pack a bit

Using find_pack_entry_one() to get object offsets is rather suboptimal
when nth_packed_object_offset() can be used directly.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoclone: create intermediate directories of destination repo
Jeff King [Wed, 25 Jun 2008 05:41:34 +0000 (01:41 -0400)]
clone: create intermediate directories of destination repo

The shell version used to use "mkdir -p" to create the repo
path, but the C version just calls "mkdir". Let's replicate
the old behavior. We have to create the git and worktree
leading dirs separately; while most of the time, the
worktree dir contains the git dir (as .git), the user can
override this using GIT_WORK_TREE.

We can reuse safe_create_leading_directories, but we need to
make a copy of our const buffer to do so. Since
merge-recursive uses the same pattern, we can factor this
out into a global function. This has two other cleanup
advantages for merge-recursive:

  1. mkdir_p wasn't a very good name. "mkdir -p foo/bar" actually
     creates bar, but this function just creates the leading
     directories.

  2. mkdir_p took a mode argument, but it was completely
     ignored.

Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoShip sample hooks with .sample suffix
Junio C Hamano [Wed, 25 Jun 2008 01:45:21 +0000 (18:45 -0700)]
Ship sample hooks with .sample suffix

We used to mark hooks we ship as samples by making them unexecutable, but
some filesystems cannot tell what is executable and what is not.

This makes it much more explicit.  The hooks are suffixed with .sample
(but now are made executable), so enabling it is still one step operation
(instead of "chmod +x $hook", you would do "mv $hook.sample $hook") but
now they won't get accidentally enabled on systems without executable bit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agopre-rebase hook update
Junio C Hamano [Wed, 25 Jun 2008 02:05:45 +0000 (19:05 -0700)]
pre-rebase hook update

This hook is what I have been using to manage topic branches in git.git,
but have not been updated to the Real Thing for a while.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agorefactor pack structure allocation
Nicolas Pitre [Tue, 24 Jun 2008 22:58:06 +0000 (18:58 -0400)]
refactor pack structure allocation

New pack structures are currently allocated in 2 different places
and all members have to be initialized explicitly.  This is prone
to errors leading to segmentation faults as found by Teemu Likonen.

Let's have a common place where this structure is allocated, and have
all members explicitly initialized to zero.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agotest case for pack resilience against corruptions
Nicolas Pitre [Tue, 24 Jun 2008 01:24:28 +0000 (21:24 -0400)]
test case for pack resilience against corruptions

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoimplement some resilience against pack corruptions
Nicolas Pitre [Tue, 24 Jun 2008 01:23:39 +0000 (21:23 -0400)]
implement some resilience against pack corruptions

We should be able to fall back to loose objects or alternative packs when
a pack becomes corrupted.  This is especially true when an object exists
in one pack only as a delta but its base object is corrupted.  Currently
there is no way to retrieve the former object even if the later is
available in another pack or loose.

This patch allows for a delta to be resolved (with a performance cost)
using a base object from a source other than the pack where that delta
is located.  Same thing for non-delta objects: rather than failing
outright, a search is made in other packs or used loose when the
currently active pack has it but corrupted.

Of course git will become extremely noisy with error messages when that
happens.  However, if the operation succeeds nevertheless, a simple
'git repack -a -f -d' will "fix" the corrupted repository given that all
corrupted objects have a good duplicate somewhere in the object store,
possibly manually copied from another source.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocall init_pack_revindex() lazily
Nicolas Pitre [Tue, 24 Jun 2008 01:22:14 +0000 (21:22 -0400)]
call init_pack_revindex() lazily

This makes life much easier for next patch, as well as being more efficient
when the revindex is actually not used.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Tue, 24 Jun 2008 00:52:02 +0000 (17:52 -0700)]
Merge branch 'maint'

* maint:
  git-svn: make rebuild respect rewriteRoot option
  Workaround for AIX mkstemp()

16 years agogit-svn: make rebuild respect rewriteRoot option
Jan Krüger [Tue, 24 Jun 2008 00:17:36 +0000 (02:17 +0200)]
git-svn: make rebuild respect rewriteRoot option

Suppose someone fetches git-svn-ified commits from another repo and then
attempts to use 'git-svn init --rewrite-root=foo bar'. Using git svn rebase
after that will fail badly:

 * For each commit tried by working_head_info, rebuild is called indirectly.
 * rebuild will iterate over all commits and skip all of them because the
   URL does not match. Because of that no rev_map file is generated at all.
 * Thus, rebuild will run once for every commit. This takes ages.
 * In the end there still isn't any rev_map file and thus working_head_info
   fails.

Addressing this behaviour fixes an apparently not too uncommon problem with
providing git-svn mirrors of Subversion repositories. Some repositories are
accessed using different URLs depending on whether the user has push
privileges or not. In the latter case, an anonymous URL is often used that
differs from the push URL. Providing a mirror that is usable in both cases
becomes a lot more possible with this change.

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoWorkaround for AIX mkstemp()
Patrick Higgins [Mon, 23 Jun 2008 21:33:41 +0000 (15:33 -0600)]
Workaround for AIX mkstemp()

The AIX mkstemp will modify it's template parameter to an empty string if
the call fails. This caused a subsequent mkdir to fail.

Signed-off-by: Patrick Higgins <patrick.higgins@cexp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot9301-fast-export.sh: Remove debug line
Michele Ballabio [Mon, 23 Jun 2008 16:19:23 +0000 (18:19 +0200)]
t9301-fast-export.sh: Remove debug line

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoShrink the git binary a bit by avoiding unnecessary inline functions
Linus Torvalds [Sun, 22 Jun 2008 19:19:25 +0000 (12:19 -0700)]
Shrink the git binary a bit by avoiding unnecessary inline functions

So I was looking at the disgusting size of the git binary, and even with
the debugging removed, and using -Os instead of -O2, the size of the text
section was pretty high. In this day and age I guess almost a megabyte of
text isn't really all that surprising, but it still doesn't exactly make
me think "lean and mean".

With -Os, a surprising amount of text space is wasted on inline functions
that end up just being replicated multiple times, and where performance
really isn't a valid reason to inline them. In particular, the trivial
wrapper functions like "xmalloc()" are used _everywhere_, and making them
inline just duplicates the text (and the string we use to 'die()' on
failure) unnecessarily.

So this just moves them into a "wrapper.c" file, getting rid of a tiny bit
of unnecessary bloat. The following numbers are both with "CFLAGS=-Os":

Before:
[torvalds@woody git]$ size git
   text    data     bss     dec     hex filename
 700460   15160  292184 1007804   f60bc git

After:
[torvalds@woody git]$ size git
   text    data     bss     dec     hex filename
 670540   15160  292184  977884   eebdc git

so it saves almost 30k of text-space (it actually saves more than that
with the default -O2, but I don't think that's necessarily a very relevant
number from a "try to shrink git" standpoint).

It might conceivably have a performance impact, but none of this should be
_that_ performance critical. The real cost is not generally in the wrapper
anyway, but in the code it wraps (ie the cost of "xread()" is all in the
read itself, not in the trivial wrapping of it).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Mon, 23 Jun 2008 01:39:37 +0000 (18:39 -0700)]
Merge branch 'maint'

* maint:
  Extend parse-options test suite
  api-parse-options.txt: Introduce documentation for parse options API
  parse-options.c: fix documentation syntax of optional arguments
  api-builtin.txt: update and fix typo

16 years agoExtend parse-options test suite
Stephan Beyer [Sun, 22 Jun 2008 15:04:26 +0000 (17:04 +0200)]
Extend parse-options test suite

This patch serves two purposes:
 1. test-parse-option.c should be a more complete
    example for the parse-options API, and
 2. there have been no tests for OPT_CALLBACK,
    OPT_DATE, OPT_BIT, OPT_SET_INT and OPT_SET_PTR
    before.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoapi-parse-options.txt: Introduce documentation for parse options API
Stephan Beyer [Sun, 22 Jun 2008 15:04:25 +0000 (17:04 +0200)]
api-parse-options.txt: Introduce documentation for parse options API

Add some documentation of basics, macros and callback
implementation of the parse-options API.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoparse-options.c: fix documentation syntax of optional arguments
Michele Ballabio [Sun, 22 Jun 2008 14:39:04 +0000 (16:39 +0200)]
parse-options.c: fix documentation syntax of optional arguments

When an argument for an option is optional, short options don't need a
space between the option and the argument, and long options need a "=".
Otherwise, arguments are misinterpreted.

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoapi-builtin.txt: update and fix typo
Stephan Beyer [Sat, 21 Jun 2008 23:54:36 +0000 (01:54 +0200)]
api-builtin.txt: update and fix typo

Mention NEED_WORK_TREE flag and command-list.txt.
Fix "bulit-in" typo and AsciiDoc-formatting of a paragraph.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-rebase.sh: Add check if rebase is in progress
Stephan Beyer [Sun, 22 Jun 2008 14:07:02 +0000 (16:07 +0200)]
git-rebase.sh: Add check if rebase is in progress

"git rebase --continue" and friends gave nonsense errors when there is no
rebase in progress.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot3404: stricter tests for git-rebase--interactive
Stephan Beyer [Sat, 21 Jun 2008 23:55:50 +0000 (01:55 +0200)]
t3404: stricter tests for git-rebase--interactive

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoapi-builtin.txt: update and fix typo
Stephan Beyer [Sat, 21 Jun 2008 23:54:36 +0000 (01:54 +0200)]
api-builtin.txt: update and fix typo

Mention NEED_WORK_TREE flag and command-list.txt.
Fix "bulit-in" typo and AsciiDoc-formatting of a paragraph.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'rs/archive-ignore'
Junio C Hamano [Sun, 22 Jun 2008 21:46:11 +0000 (14:46 -0700)]
Merge branch 'rs/archive-ignore'

* rs/archive-ignore:
  Teach new attribute 'export-ignore' to git-archive

16 years agoMerge branch 'lt/racy-empty'
Junio C Hamano [Sun, 22 Jun 2008 21:34:20 +0000 (14:34 -0700)]
Merge branch 'lt/racy-empty'

* lt/racy-empty:
  racy-git: an empty blob has a fixed object name

16 years agoMerge branch 'sn/static'
Junio C Hamano [Sun, 22 Jun 2008 21:34:09 +0000 (14:34 -0700)]
Merge branch 'sn/static'

* sn/static:
  config.c: make git_env_bool() static
  environment.c: remove unused function

16 years agoMerge branch 'jc/maint-combine-diff-pre-context'
Junio C Hamano [Sun, 22 Jun 2008 21:33:56 +0000 (14:33 -0700)]
Merge branch 'jc/maint-combine-diff-pre-context'

* jc/maint-combine-diff-pre-context:
  diff -c/--cc: do not include uninteresting deletion before leading context

16 years agoMerge branch 'lt/maint-gitdir-relative'
Junio C Hamano [Sun, 22 Jun 2008 21:33:53 +0000 (14:33 -0700)]
Merge branch 'lt/maint-gitdir-relative'

* lt/maint-gitdir-relative:
  Make git_dir a path relative to work_tree in setup_work_tree()

16 years agoMerge branch 'jk/test'
Junio C Hamano [Sun, 22 Jun 2008 21:33:02 +0000 (14:33 -0700)]
Merge branch 'jk/test'

* jk/test:
  enable whitespace checking of test scripts
  avoid trailing whitespace in zero-change diffstat lines
  avoid whitespace on empty line in automatic usage message
  mask necessary whitespace policy violations in test scripts
  fix whitespace violations in test scripts

16 years agoMerge branch 'pb/fast-export'
Junio C Hamano [Sun, 22 Jun 2008 21:32:58 +0000 (14:32 -0700)]
Merge branch 'pb/fast-export'

* pb/fast-export:
  builtin-fast-export: Add importing and exporting of revision marks

16 years agoMerge branch 'mo/status-untracked'
Junio C Hamano [Sun, 22 Jun 2008 21:32:27 +0000 (14:32 -0700)]
Merge branch 'mo/status-untracked'

* mo/status-untracked:
  Add configuration option for default untracked files mode
  Add argument 'no' commit/status option -u|--untracked-files
  Add an optional <mode> argument to commit/status -u|--untracked-files option

Conflicts:

Documentation/git-commit.txt

16 years agoMerge branch 'kh/update-ref'
Junio C Hamano [Sun, 22 Jun 2008 21:31:57 +0000 (14:31 -0700)]
Merge branch 'kh/update-ref'

* kh/update-ref:
  Make old sha1 optional with git update-ref -d
  Clean up builtin-update-ref's option parsing

16 years agoMerge branch 'jn/web'
Junio C Hamano [Sun, 22 Jun 2008 21:31:49 +0000 (14:31 -0700)]
Merge branch 'jn/web'

* jn/web:
  gitweb: Separate generating 'sort by' table header
  gitweb: Separate filling list of projects info

16 years agoMerge branch 'rg/gitweb'
Junio C Hamano [Sun, 22 Jun 2008 21:31:44 +0000 (14:31 -0700)]
Merge branch 'rg/gitweb'

* rg/gitweb:
  gitweb: remove git_blame and rename git_blame2 to git_blame

16 years agoCorrect documentation for git-push --mirror
Shawn O. Pearce [Sat, 21 Jun 2008 03:25:25 +0000 (23:25 -0400)]
Correct documentation for git-push --mirror

This option behaves more like:

  git push $url +refs/*:refs/*

than it does like:

  git push $url +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*

so we should document it to be more clear about that.

Suggested-by: Marek Zawirski <marek.zawirski@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot/README: Add 'Skipping Tests' section below 'Running Tests'
Jakub Narebski [Fri, 20 Jun 2008 21:10:50 +0000 (23:10 +0200)]
t/README: Add 'Skipping Tests' section below 'Running Tests'

Add description of GIT_SKIP_TESTS variable, taken almost verbatim
(adjusting for conventions in t/README) from the commit message in

   04ece59 (GIT_SKIP_TESTS: allow users to omit tests that are known to break)

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoPrint errno upon failure to open the COMMIT_EDITMSG file
Cristian Peraferrer [Fri, 20 Jun 2008 15:24:20 +0000 (17:24 +0200)]
Print errno upon failure to open the COMMIT_EDITMSG file

When the COMMIT_EDITMSG cannot be opened, give more information to the user
by giving the 'errno' information.

Signed-off-by: Cristian Peraferrer <corellian.c@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd target "install-html" the the top level Makefile
Teemu Likonen [Tue, 10 Jun 2008 08:34:25 +0000 (11:34 +0300)]
Add target "install-html" the the top level Makefile

This makes it possible to install html documents from the top level
directory. Previously such target was only in Documentation/Makefile.

Signed-off-by: Teemu Likonen <tlikonen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobash: Add more option completions for 'git log'
Teemu Likonen [Fri, 20 Jun 2008 13:02:10 +0000 (16:02 +0300)]
bash: Add more option completions for 'git log'

Options added: --walk-reflogs --stat --numstat --shortstat
--decorate --diff-filter= --color-words

Signed-off-by: Teemu Likonen <tlikonen@iki.fi>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd a helper script to send patches with Mozilla Thunderbird
Lukas Sandström [Thu, 19 Jun 2008 23:21:33 +0000 (01:21 +0200)]
Add a helper script to send patches with Mozilla Thunderbird

The script appp.sh can be used with the External Editor extension for
Mozilla Thunderbird in order to be able to send inline patches in an
easy way.

Signed-off-by: Lukas Sandström <lukass@etek.chalmers.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitweb: standarize HTTP status codes
Lea Wiemann [Thu, 19 Jun 2008 20:03:21 +0000 (22:03 +0200)]
gitweb: standarize HTTP status codes

Many error status codes simply default to 403 Forbidden, which is not
correct in most cases.  This patch makes gitweb return semantically
correct status codes.

For convenience the die_error function now only takes the status code
without reason as first parameter (e.g. 404 instead of "404 Not
Found"), and it now defaults to 500 (Internal Server Error), even
though the default is not used anywhere.

Also documented status code conventions in die_error.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoconfig.c: make git_env_bool() static
しらいしななこ [Wed, 18 Jun 2008 23:21:11 +0000 (08:21 +0900)]
config.c: make git_env_bool() static

This function is not used by any other file.

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoenvironment.c: remove unused function
しらいしななこ [Wed, 18 Jun 2008 23:21:09 +0000 (08:21 +0900)]
environment.c: remove unused function

get_refs_directory() is not used anywhere.

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake git_dir a path relative to work_tree in setup_work_tree()
Linus Torvalds [Thu, 19 Jun 2008 19:34:06 +0000 (12:34 -0700)]
Make git_dir a path relative to work_tree in setup_work_tree()

Once we find the absolute paths for git_dir and work_tree, we can make
git_dir a relative path since we know pwd will be work_tree. This should
save the kernel some time traversing the path to work_tree all the time
if git_dir is inside work_tree.

Daniel's patch didn't apply for me as-is, so I recreated it with some
differences, and here are the numbers from ten runs each.

There is some IO for me - probably due to more-or-less random flushing of
the journal - so the variation is bigger than I'd like, but whatever:

Before:
real    0m8.135s
real    0m7.933s
real    0m8.080s
real    0m7.954s
real    0m7.949s
real    0m8.112s
real    0m7.934s
real    0m8.059s
real    0m7.979s
real    0m8.038s

After:
real    0m7.685s
real    0m7.968s
real    0m7.703s
real    0m7.850s
real    0m7.995s
real    0m7.817s
real    0m7.963s
real    0m7.955s
real    0m7.848s
real    0m7.969s

Now, going by "best of ten" (on the assumption that the longer numbers
are all due to IO), I'm saying a 7.933s -> 7.685s reduction, and it does
seem to be outside of the noise (ie the "after" case never broke 8s, while
the "before" case did so half the time).

So looks like about 3% to me.

Doing it for a slightly smaller test-case (just the "arch" subdirectory)
gets more stable numbers probably due to not filling the journal with
metadata updates, so we have:

Before:
real    0m1.633s
real    0m1.633s
real    0m1.633s
real    0m1.632s
real    0m1.632s
real    0m1.630s
real    0m1.634s
real    0m1.631s
real    0m1.632s
real    0m1.632s

After:
real    0m1.610s
real    0m1.609s
real    0m1.610s
real    0m1.608s
real    0m1.607s
real    0m1.610s
real    0m1.609s
real    0m1.611s
real    0m1.608s
real    0m1.611s

where I'ld just take the averages and say 1.632 vs 1.610, which is just
over 1% peformance improvement.

So it's not in the noise, but it's not as big as I initially thought and
measured.

(That said, it obviously depends on how deep the working directory path is
too, and whether it is behind NFS or something else that might need to
cause more work to look up).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Thu, 19 Jun 2008 23:30:48 +0000 (16:30 -0700)]
Merge branch 'maint'

* maint:
  Documentation: fix formatting in git-svn
  t7502-commit.sh: test_must_fail doesn't work with inline environment variables
  completion: add --graph to log command completion
  git-merge.sh: fix typo in usage message: sucesses --> succeeds

16 years agoDocumentation: fix formatting in git-svn
Jan Krüger [Thu, 19 Jun 2008 22:41:42 +0000 (00:41 +0200)]
Documentation: fix formatting in git-svn

Due to a misplaced list block separator, general hints about the config
file options got indented at the same level as the description of the last
option, making it easy to miss them.

Signed-off-by: Jan Krüger <jk@jk.gs>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot7502-commit.sh: test_must_fail doesn't work with inline environment variables
Brandon Casey [Thu, 19 Jun 2008 17:32:02 +0000 (12:32 -0500)]
t7502-commit.sh: test_must_fail doesn't work with inline environment variables

When the arguments to test_must_fail() begin with a variable assignment,
test_must_fail() attempts to execute the variable assignment as a command.
This fails, and so test_must_fail returns with a successful status value
without running the command it was intended to test.

For example, the following script:

#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
test_must_fail foo='yo adrian' sh -c 'echo foo: $foo'

always exits zero and prints the message:

test.sh: line 3: foo=yo adrian: command not found

Test 16 calls test_must_fail in such a way and therefore has not been
testing whether git 'do[es] not fire editor in the presence of conflicts'.

A workaround is to set and export the variable in a normal way, not
using one-shot notation.  Because this would affect the remainder of
the process, the test is done inside a subshell.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocompletion: add --graph to log command completion
Dan McGee [Thu, 19 Jun 2008 21:15:53 +0000 (16:15 -0500)]
completion: add --graph to log command completion

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTeach "git clone" to pack refs
Johan Herland [Sun, 15 Jun 2008 14:06:16 +0000 (16:06 +0200)]
Teach "git clone" to pack refs

In repos with many refs, it is unlikely that most refs will ever change.
This fact is already exploited by "git gc" by executing "git pack-refs"
to consolidate all refs into a single file.

When cloning a repo with many refs, it does not make sense to create the
loose refs in the first place, just to have the next "git gc" consolidate
them into one file. Instead, make "git clone" create the packed refs file
immediately, and forego the loose refs completely.

Signed-off-by: Johan Herland <johan@herland.net>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoPrepare testsuite for a "git clone" that packs refs
Johan Herland [Sun, 15 Jun 2008 23:16:53 +0000 (01:16 +0200)]
Prepare testsuite for a "git clone" that packs refs

t5515-fetch-merge-logic removes many, but not all, refs between each test.
This is done by removing the corresponding refs/foo/* files in the .git/refs
hierarchy. However, once "git clone" starts producing packed refs, these refs
will no longer be in the .git/refs hierarchy, but rather listed in
.git/packed-refs. This patch teaches t5515-fetch-merge-logic to remove the
refs using "git update-ref -d" which properly handles packed refs.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMove pack_refs() and friends into libgit
Johan Herland [Sun, 15 Jun 2008 14:05:06 +0000 (16:05 +0200)]
Move pack_refs() and friends into libgit

This moves pack_refs() and underlying functionality into the library,
to make pack-refs functionality easily available to all git programs.

Most of builtin-pack-refs.c has been moved verbatim into a new file
pack-refs.c that is compiled into libgit.a. A corresponding header
file, pack-refs.h, has also been added, declaring pack_refs() and
the #defines associated with the flags parameter to pack_refs().

This patch introduces no other changes in functionality.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>