Code

git.git
17 years agoGIT 1.4.3-rc1 v1.4.4-rc1
Junio C Hamano [Wed, 8 Nov 2006 00:36:11 +0000 (16:36 -0800)]
GIT 1.4.3-rc1

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 8 Nov 2006 00:34:30 +0000 (16:34 -0800)]
Merge branch 'maint'

* maint:
  remove an unneeded test

17 years agoMerge branch 'jc/pickaxe'
Junio C Hamano [Wed, 8 Nov 2006 00:33:59 +0000 (16:33 -0800)]
Merge branch 'jc/pickaxe'

17 years agogit-pickaxe: allow "-L <something>,+N"
Junio C Hamano [Wed, 8 Nov 2006 00:20:02 +0000 (16:20 -0800)]
git-pickaxe: allow "-L <something>,+N"

With this,

git pickaxe -L '/--progress/,+20' v1.4.0 -- pack-objects.c

gives you 20 lines starting from the first occurrence of
'--progress' in pack-objects, digging from v1.4.0 version.

You can also say

git pickaxe -L '/--progress/,-5' v1.4.0 -- pack-objects.c

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pack-objects progress flag documentation and cleanup
Nicolas Pitre [Tue, 7 Nov 2006 15:51:23 +0000 (10:51 -0500)]
git-pack-objects progress flag documentation and cleanup

This adds documentation for --progress and --all-progress, remove a
duplicate --progress handling and make usage string more readable.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoremove an unneeded test
Tero Roponen [Tue, 7 Nov 2006 10:44:33 +0000 (12:44 +0200)]
remove an unneeded test

In wt-status.c there is a test which does nothing.
This patch removes it.

Signed-off-by: Tero Roponen <teanropo@jyu.fi>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'jc/read-tree'
Junio C Hamano [Tue, 7 Nov 2006 23:41:34 +0000 (15:41 -0800)]
Merge branch 'jc/read-tree'

* jc/read-tree:
  t6022: ignoring untracked files by merge-recursive when they do not matter
  merge-recursive: adjust to loosened "working file clobbered" check
  merge-recursive: make a few functions static.
  merge-recursive: use abbreviated commit object name.
  merge: loosen overcautious "working file will be lost" check.

17 years agoMerge branch 'np/index-pack'
Junio C Hamano [Tue, 7 Nov 2006 23:39:56 +0000 (15:39 -0800)]
Merge branch 'np/index-pack'

* np/index-pack:
  remove .keep pack lock files when done with refs update
  have index-pack create .keep file more carefully
  improve fetch-pack's handling of kept packs
  git-fetch can use both --thin and --keep with fetch-pack now
  Teach receive-pack how to keep pack files based on object count.
  Allow pack header preprocessing before unpack-objects/index-pack.
  Remove unused variable in receive-pack.
  Revert "send-pack --keep: do not explode into loose objects on the receiving end."
  missing small substitution
  Teach git-index-pack how to keep a pack file.
  Only repack active packs by skipping over kept packs.
  Allow short pack names to git-pack-objects --unpacked=.
  send-pack --keep: do not explode into loose objects on the receiving end.
  index-pack: minor fixes to comment and function name
  enhance clone and fetch -k experience
  mimic unpack-objects when --stdin is used with index-pack
  add progress status to index-pack
  make index-pack able to complete thin packs.
  enable index-pack streaming capability

17 years agoMerge branch 'maint'
Junio C Hamano [Tue, 7 Nov 2006 06:56:07 +0000 (22:56 -0800)]
Merge branch 'maint'

* maint:
  Documentation: Transplanting branch with git-rebase --onto
  merge-recursive implicitely depends on trust_executable_bit
  adjust_shared_perm: chmod() only when needed.
  Fix git-runstatus for repositories containing a file named HEAD

17 years agogit-pickaxe: -L /regexp/,/regexp/
Junio C Hamano [Tue, 7 Nov 2006 01:08:32 +0000 (17:08 -0800)]
git-pickaxe: -L /regexp/,/regexp/

With this change, you can specify the beginning and the ending
line of the range you wish to inspect with pattern matching.

For example, these are equivalent with the git.git sources:

    git pickaxe -L 7,21                       v1.4.0 -- commit.c
    git pickaxe -L '/^struct sort_node/,/^}/' v1.4.0 -- commit.c
    git pickaxe -L '7,/^}/'                   v1.4.0 -- commit.c
    git pickaxe -L '/^struct sort_node/,21'   v1.4.0 -- commit.c

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: Transplanting branch with git-rebase --onto
Jakub Narebski [Mon, 6 Nov 2006 18:12:45 +0000 (19:12 +0100)]
Documentation: Transplanting branch with git-rebase --onto

Added example of transplantig feature branch from one development
branch (for example "next") into the other development branch (for
example "master").

[jc: talking Carl's advice this contains both examples sent to
 the list by Jakub in his original message.]

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument git-pack-refs and link it to git(7).
Junio C Hamano [Mon, 6 Nov 2006 08:28:52 +0000 (00:28 -0800)]
Document git-pack-refs and link it to git(7).

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomerge-recursive implicitely depends on trust_executable_bit
Alex Riesen [Mon, 6 Nov 2006 10:38:52 +0000 (11:38 +0100)]
merge-recursive implicitely depends on trust_executable_bit

Read the configuration in to get core.filemode value for this
particular repository.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoadjust_shared_perm: chmod() only when needed.
Junio C Hamano [Sat, 4 Nov 2006 20:24:05 +0000 (12:24 -0800)]
adjust_shared_perm: chmod() only when needed.

When widening permission for files and directories in a 'shared'
repository for a user with inappropriate umask() setting for
shared work, make sure we call chmod() only when we actually
need to.

The primary idea owes credit to Johannes.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix git-runstatus for repositories containing a file named HEAD
Jeff King [Sun, 5 Nov 2006 22:22:15 +0000 (17:22 -0500)]
Fix git-runstatus for repositories containing a file named HEAD

The wt_status_print_updated() and wt_status_print_untracked() routines
call setup_revisions() with 'HEAD' being the reference to the tip of the
current branch. However, setup_revisions() gets confused if the branch
also contains a file named 'HEAD' resulting in a fatal error.

Instead, don't pass an argv to setup_revisions() at all; simply give it no
arguments, and make 'HEAD' the default revision.

Bug noticed by Rocco Rutte <pdmef@gmx.net>.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove more sed invocations from within bash completion.
Shawn O. Pearce [Sun, 5 Nov 2006 11:25:25 +0000 (06:25 -0500)]
Remove more sed invocations from within bash completion.

This change removes between 1 and 4 sed invocations per completion
entered by the user.  In the case of cat-file the 4 invocations per
completion can take a while on Cygwin; running these replacements
directly within bash saves some time for the end user.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSupport bash completion on symmetric difference operator.
Shawn O. Pearce [Sun, 5 Nov 2006 11:24:56 +0000 (06:24 -0500)]
Support bash completion on symmetric difference operator.

Now that log, whatchanged, rev-list, etc. support the symmetric
difference operator '...' we should provide bash completion for it
just like we do for '..'.

While we are at it we can remove two sed invocations during the
interactive prompt and replace them with internal bash operations.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoTake --git-dir into consideration during bash completion.
Shawn O. Pearce [Sun, 5 Nov 2006 11:21:57 +0000 (06:21 -0500)]
Take --git-dir into consideration during bash completion.

If the user has setup a command line of "git --git-dir=baz" then
anything we complete must be performed within the scope of "baz"
and not the current working directory.

This is useful with commands such as "git --git-dir=git.git log m"
to complete out "master" and view the log for the master branch of
the git.git repository.  As a nice side effect this also works for
aliases within the target repository, just as git would honor them.

Unfortunately because we still examine arguments by absolute position
in most of the more complex commands (e.g. git push) using --git-dir
with those commands will probably still cause completion to fail.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoBash completion support for remotes in .git/config.
Shawn O. Pearce [Sun, 5 Nov 2006 11:21:03 +0000 (06:21 -0500)]
Bash completion support for remotes in .git/config.

Now that Git natively supports remote specifications within the
config file such as:

[remote "origin"]
url = ...

we should provide bash completion support "out of the box" for
these remotes, just like we do for the .git/remotes directory.

Also cleaned up the __git_aliases expansion to use the same form
of querying and filtering repo-config as this saves two fork/execs
in the middle of a user prompted completion.  Finally also forced
the variable 'word' to be local within __git_aliased_command.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoOnly load .exe suffix'd completions on Cygwin.
Shawn O. Pearce [Sun, 5 Nov 2006 11:20:25 +0000 (06:20 -0500)]
Only load .exe suffix'd completions on Cygwin.

The only platform which actually needs to define .exe suffixes as
part of its completion set is Cygwin.  So don't define them on any
other platform.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdded missing completions for show-branch and merge-base.
Shawn O. Pearce [Sun, 5 Nov 2006 11:20:02 +0000 (06:20 -0500)]
Added missing completions for show-branch and merge-base.

The show-branch and merge-base commands were partially supported
when it came to bash completions as they were only specified in
one form another.  Now we specify them in both forms.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: optimize by avoiding repeated read_sha1_file().
Junio C Hamano [Sun, 5 Nov 2006 19:51:41 +0000 (11:51 -0800)]
git-pickaxe: optimize by avoiding repeated read_sha1_file().

It turns out that pickaxe reads the same blob repeatedly while
blame can reuse the blob already read for the parent when
handling a child commit when it's parent's turn to pass its
blame to the grandparent.  Have a cache in the origin structure
to keep the blob there, which will be garbage collected when the
origin loses the last reference to it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-blame: add internal statistics to count read blobs.
Junio C Hamano [Sun, 5 Nov 2006 19:47:53 +0000 (11:47 -0800)]
git-blame: add internal statistics to count read blobs.

17 years agocherry is built-in, do not ship git-cherry.sh
Junio C Hamano [Sun, 5 Nov 2006 19:26:21 +0000 (11:26 -0800)]
cherry is built-in, do not ship git-cherry.sh

Noticed by Rene; Makefile now has another maintainer's check
target to catch this kind of mistakes.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Sun, 5 Nov 2006 07:52:32 +0000 (23:52 -0800)]
Merge branch 'maint'

* maint:
  Remove unsupported C99 style struct initializers in git-archive.
  Remove SIMPLE_PROGRAMS and make git-daemon a normal program.
  Use ULONG_MAX rather than implicit cast of -1.

17 years agoRemove unsupported C99 style struct initializers in git-archive. v1.4.3.4
Shawn O. Pearce [Sun, 5 Nov 2006 05:37:23 +0000 (00:37 -0500)]
Remove unsupported C99 style struct initializers in git-archive.

At least one older version of the Solaris C compiler doesn't support
the newer C99 style struct initializers.  To allow Git to compile
on those systems use an archive description struct which is easier
to initialize without the C99 struct initializer syntax.

Also since the archives array is not used by anyone other than
archive.c we can make it static.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove SIMPLE_PROGRAMS and make git-daemon a normal program.
Shawn O. Pearce [Sun, 5 Nov 2006 07:28:25 +0000 (02:28 -0500)]
Remove SIMPLE_PROGRAMS and make git-daemon a normal program.

Some platforms (Solaris in particular) appear to require -lz as
part of the link line for git-daemon, due to it linking against
sha1_file.o and that module requiring inflate/deflate support.

So its time to retire SIMPLE_PROGRAMS and move its last remaining
member into the standard PROGRAMS list, allowing it to link against
all libraries used by the rest of Git.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse ULONG_MAX rather than implicit cast of -1.
Shawn O. Pearce [Sun, 5 Nov 2006 07:27:07 +0000 (02:27 -0500)]
Use ULONG_MAX rather than implicit cast of -1.

At least one (older) version of the Solaris C compiler won't allow
'unsigned long x = -1' without explicitly casting -1 to a type of
unsigned long.  So instead use ULONG_MAX, which is really the
correct constant anyway.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-svn: don't die on rebuild when --upgrade is specified
Eric Wong [Sun, 5 Nov 2006 05:51:11 +0000 (21:51 -0800)]
git-svn: don't die on rebuild when --upgrade is specified

--copy-remote and --upgrade are rarely (never?) used together,
so if --copy-remote is specified, that means the user really
wanted to copy the remote ref, and we should fail if that fails.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-svn: avoid printing filenames of files we're not tracking
Eric Wong [Sun, 5 Nov 2006 05:51:10 +0000 (21:51 -0800)]
git-svn: avoid printing filenames of files we're not tracking

This is purely an aesthetic change, we already skip importing of
files that don't affect the subdirectory we import.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: fix origin refcounting
Junio C Hamano [Sun, 5 Nov 2006 03:18:50 +0000 (19:18 -0800)]
git-pickaxe: fix origin refcounting

When we introduced the cached origin per commit, we gave up proper
garbage collecting because it meant that commits hold onto their
cached copy.  There is no need to do so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'np/verbose-push'
Junio C Hamano [Sun, 5 Nov 2006 01:22:14 +0000 (17:22 -0800)]
Merge branch 'np/verbose-push'

* np/verbose-push:
  make git-push a bit more verbose

17 years agoMerge branch 'lt/push-config'
Junio C Hamano [Sun, 5 Nov 2006 01:18:29 +0000 (17:18 -0800)]
Merge branch 'lt/push-config'

* lt/push-config:
  git push: add verbose flag and allow overriding of default target repository
  Allow '-' in config variable names

17 years agoAdded bash completion support for git-reset.
Shawn O. Pearce [Sat, 4 Nov 2006 18:57:44 +0000 (13:57 -0500)]
Added bash completion support for git-reset.

Completion for the --hard/--soft/--mixed modes of operation as
well as a ref name for <commit-ish> can be very useful and save
some fingers.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdded completion support for git-branch.exe.
Shawn O. Pearce [Sat, 4 Nov 2006 18:57:18 +0000 (13:57 -0500)]
Added completion support for git-branch.exe.

On Cygwin a user might complete the new git-branch builtin as
git-branch.exe, at which point bash requires a new completion
registration for the command.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'pb/web'
Junio C Hamano [Sun, 5 Nov 2006 01:13:38 +0000 (17:13 -0800)]
Merge branch 'pb/web'

* pb/web:
  gitweb: Support for 'forks'

17 years agogit-pickaxe: re-scan the blob after making progress with -C
Junio C Hamano [Sun, 5 Nov 2006 00:39:03 +0000 (16:39 -0800)]
git-pickaxe: re-scan the blob after making progress with -C

The reason to do this is the same as in the previous change for
line copy detection within the same file (-M).

Also this fixes -C and -C -C (aka find-copies-harder) logic; in
this application we are not interested in the similarity
matching diffcore-rename makes, because we are only interested
in scanning files that were modified, or in the case of -C -C,
scanning all files in the parent and we want to do that
ourselves.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: re-scan the blob after making progress with -M
Junio C Hamano [Sat, 4 Nov 2006 20:37:02 +0000 (12:37 -0800)]
git-pickaxe: re-scan the blob after making progress with -M

Otherwise we would miss copied lines that are contained in the
parts before or after the part that we find after splitting the
blame_entry (i.e. split[0] and split[2]).

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: simplify Octopus merges further
Junio C Hamano [Sat, 4 Nov 2006 20:20:09 +0000 (12:20 -0800)]
git-pickaxe: simplify Octopus merges further

If more than one parents in an Octopus merge have the same
origin, ignore later ones because it would not make any
difference in the outcome.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: rename detection optimization
Junio C Hamano [Thu, 2 Nov 2006 08:02:11 +0000 (00:02 -0800)]
git-pickaxe: rename detection optimization

The idea is that we are interested in renaming into only one path, so
we do not care about renames that happen elsewhere.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Sat, 4 Nov 2006 11:54:20 +0000 (03:54 -0800)]
Merge branch 'maint'

* maint:
  apply: handle "traditional" creation/deletion diff correctly.

17 years agoapply: handle "traditional" creation/deletion diff correctly.
Junio C Hamano [Sat, 4 Nov 2006 10:28:53 +0000 (02:28 -0800)]
apply: handle "traditional" creation/deletion diff correctly.

We deduced a GNU diff output that does not use /dev/null convention
as creation (deletion) diff correctly by looking at the lack of context
and deleted lines (added lines), but forgot to reset the new (old) name
field properly.

This was a regression when we added a workaround for --unified=0 insanity.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Remove extra "/" in path names for git_get_project_list
Aneesh Kumar K.V [Fri, 3 Nov 2006 05:11:45 +0000 (10:41 +0530)]
gitweb: Remove extra "/" in path names for git_get_project_list

Without this change we get a wrong $pfxlen value and the check_export_ok()
checks with with a wrong directory name. Without this patch the below
$projects_list fails with gitweb

$projects_list = "/tmp/a/b/";

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit.el: Include MERGE_MSG in the log-edit buffer even when not committing a merge.
Alexandre Julliard [Fri, 3 Nov 2006 16:42:43 +0000 (17:42 +0100)]
git.el: Include MERGE_MSG in the log-edit buffer even when not committing a merge.

This lets us take advantage of the fact that git-cherry-pick now saves
the message in MERGE_MSG too.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit.el: Move point after the log message header when entering log-edit mode.
Alexandre Julliard [Fri, 3 Nov 2006 16:42:17 +0000 (17:42 +0100)]
git.el: Move point after the log message header when entering log-edit mode.

Suggested by Han-Wen Nienhuys.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit.el: Added a function to open the current file in another window.
Alexandre Julliard [Fri, 3 Nov 2006 16:41:46 +0000 (17:41 +0100)]
git.el: Added a function to open the current file in another window.

Bound to 'o' by default, compatible with pcl-cvs and
buffer-mode. Suggested by Han-Wen Nienhuys.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit.el: Added functions for moving to the next/prev unmerged file.
Alexandre Julliard [Fri, 3 Nov 2006 16:41:23 +0000 (17:41 +0100)]
git.el: Added functions for moving to the next/prev unmerged file.

This is useful when doing a merge that changes many files with only a
few conflicts here and there.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoremove .keep pack lock files when done with refs update
Nicolas Pitre [Wed, 1 Nov 2006 22:06:25 +0000 (17:06 -0500)]
remove .keep pack lock files when done with refs update

This makes both git-fetch and git-push (fetch-pack and receive-pack)
safe against a possible race with aparallel git-repack -a -d that could
prune the new pack while it is not yet referenced, and remove the .keep
file after refs have been updated.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agohave index-pack create .keep file more carefully
Nicolas Pitre [Wed, 1 Nov 2006 22:06:24 +0000 (17:06 -0500)]
have index-pack create .keep file more carefully

If by chance we receive a pack which content (list of objects) matches
another pack that we already have, and if that pack is marked with a
.keep file, then we should not overwrite it.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoimprove fetch-pack's handling of kept packs
Nicolas Pitre [Wed, 1 Nov 2006 22:06:23 +0000 (17:06 -0500)]
improve fetch-pack's handling of kept packs

Since functions in fetch-clone.c were only used from fetch-pack.c,
its content has been merged with fetch-pack.c.  This allows for better
coupling of features with much simpler implementations.

One new thing is that the (abscence of) --thin also enforce it on
index-pack now, such that index-pack will abort if a thin pack was
_not_ asked for.

The -k or --keep, when provided twice, now causes the fetched pack
to be left as a kept pack just like receive-pack currently does.
Eventually this will be used to close a race against concurrent
repacking.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-fetch can use both --thin and --keep with fetch-pack now
Nicolas Pitre [Wed, 1 Nov 2006 22:06:22 +0000 (17:06 -0500)]
git-fetch can use both --thin and --keep with fetch-pack now

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoTeach receive-pack how to keep pack files based on object count.
Shawn Pearce [Wed, 1 Nov 2006 22:06:21 +0000 (17:06 -0500)]
Teach receive-pack how to keep pack files based on object count.

Since keeping a pushed pack or exploding it into loose objects
should be a local repository decision this teaches receive-pack
to decide if it should call unpack-objects or index-pack --stdin
--fix-thin based on the setting of receive.unpackLimit and the
number of objects contained in the received pack.

If the number of objects (hdr_entries) in the received pack is
below the value of receive.unpackLimit (which is 5000 by default)
then we unpack-objects as we have in the past.

If the hdr_entries >= receive.unpackLimit then we call index-pack and
ask it to include our pid and hostname in the .keep file to make it
easier to identify why a given pack has been kept in the repository.

Currently this leaves every received pack as a kept pack.  We really
don't want that as received packs will tend to be small.  Instead we
want to delete the .keep file automatically after all refs have
been updated.  That is being left as room for future improvement.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow pack header preprocessing before unpack-objects/index-pack.
Nicolas Pitre [Wed, 1 Nov 2006 22:06:20 +0000 (17:06 -0500)]
Allow pack header preprocessing before unpack-objects/index-pack.

Some applications which invoke unpack-objects or index-pack --stdin
may want to examine the pack header to determine the number of
objects contained in the pack and use that value to determine which
executable to invoke to handle the rest of the pack stream.

However if the caller consumes the pack header from the input stream
then its no longer available for unpack-objects or index-pack --stdin,
both of which need the version and object count to process the stream.

This change introduces --pack_header=ver,cnt as a command line option
that the caller can supply to indicate it has already consumed the
pack header and what version and object count were found in that
header.  As this option is only meant for low level applications
such as receive-pack we are not documenting it at this time.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'master' into np/index-pack
Junio C Hamano [Fri, 3 Nov 2006 08:23:52 +0000 (00:23 -0800)]
Merge branch 'master' into np/index-pack

* master: (90 commits)
  gitweb: Better support for non-CSS aware web browsers
  gitweb: Output also empty patches in "commitdiff" view
  gitweb: Use git-for-each-ref to generate list of heads and/or tags
  for-each-ref: "creator" and "creatordate" fields
  Add --global option to git-repo-config.
  pack-refs: Store the full name of the ref even when packing only tags.
  git-clone documentation didn't mention --origin as equivalent of -o
  Minor grammar fixes for git-diff-index.txt
  link_temp_to_file: call adjust_shared_perm() only when we created the directory
  Remove uneccessarily similar printf() from print_ref_list() in builtin-branch
  pack-objects doesn't create random pack names
  branch: work in subdirectories.
  gitweb: Use 's' regexp modifier to secure against filenames with LF
  gitweb: Secure against commit-ish/tree-ish with the same name as path
  gitweb: esc_html() author in blame
  git-svnimport: support for partial imports
  link_temp_to_file: don't leave the path truncated on adjust_shared_perm failure
  Move deny_non_fast_forwards handling completely into receive-pack.
  revision traversal: --unpacked does not limit commit list anymore.
  Continue traversal when rev-list --unpacked finds a packed commit.
  ...

17 years agogitweb: Better support for non-CSS aware web browsers
Jakub Narebski [Wed, 1 Nov 2006 13:33:21 +0000 (14:33 +0100)]
gitweb: Better support for non-CSS aware web browsers

Add option to replace SPC (' ') with hard (non-breakable) space HTML
entity '&nbsp;' in esc_html subroutine.

Replace ' ' with '&nbsp;' for the code/diff display part in git_blob
and git_patchset_body; this is to be able to view code and diffs in
web browsers which doesn't understand "white-space: pre;" CSS
declaration.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Output also empty patches in "commitdiff" view
Jakub Narebski [Tue, 31 Oct 2006 16:36:27 +0000 (17:36 +0100)]
gitweb: Output also empty patches in "commitdiff" view

Remove skipping over empty patches (i.e. patches which consist solely
of extended headers) in git_patchset_body, and add links to those
header-only patches in git_difftree_body (but not generate blobdiff
links when there were no change in file contents).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'sp/keep-pack' into np/index-pack
Junio C Hamano [Fri, 3 Nov 2006 05:41:47 +0000 (21:41 -0800)]
Merge branch 'sp/keep-pack' into np/index-pack

* sp/keep-pack: (29 commits)
  Remove unused variable in receive-pack.
  Teach git-index-pack how to keep a pack file.
  Only repack active packs by skipping over kept packs.
  Allow short pack names to git-pack-objects --unpacked=.
  git-send-email: Read the default SMTP server from the GIT config file
  git-send-email: Document support for local sendmail instead of SMTP server
  Swap the porcelain and plumbing commands in the git man page
  Mention that pull can work locally in the synopsis
  gitweb: Add "next" link to commitdiff view
  gitweb: Move git_get_last_activity subroutine earlier
  Documentation: fix git-format-patch mark-up and link it from git.txt
  Documentation: Update information about <format> in git-for-each-ref
  Bash completion support for aliases
  gitweb: Fix up bogus $stylesheet declarations
  tests: merge-recursive is usable without Python
  gitweb: Check git base URLs before generating URL from it
  Documentation: add git in /etc/services.
  Documentation: add upload-archive service to git-daemon.
  git-cherry: document limit and add diagram
  diff-format.txt: Correct information about pathnames quoting in patch format
  ...

17 years agoMerge branch 'maint'
Junio C Hamano [Fri, 3 Nov 2006 02:05:33 +0000 (18:05 -0800)]
Merge branch 'maint'

* maint:
  git-clone documentation didn't mention --origin as equivalent of -o
  Minor grammar fixes for git-diff-index.txt
  link_temp_to_file: call adjust_shared_perm() only when we created the directory

17 years agogitweb: Use git-for-each-ref to generate list of heads and/or tags
Jakub Narebski [Thu, 2 Nov 2006 19:23:11 +0000 (20:23 +0100)]
gitweb: Use git-for-each-ref to generate list of heads and/or tags

Add two subroutines: git_get_heads_list and git_get_refs_list, which
fill out needed parts of refs info (heads and tags respectively) info
using single call to git-for-each-ref, instead of using
git-peek-remote to get list of references and using parse_ref for each
ref to get ref info, which in turn uses at least one call of git
command.

Replace call to git_get_refs_list in git_summary by call to
git_get_references, git_get_heads_list and git_get_tags_list
(simplifying this subroutine a bit). Use git_get_heads_list in
git_heads and git_get_tags_list in git_tags. Modify git_tags_body
slightly to accept output from git_get_tags_list.

Remove no longer used, and a bit hackish, git_get_refs_list.
parse_ref is no longer used, but is left for now.

Generating "summary" and "tags" views should be much faster for
projects which have large number of tags.

CHANGES IN OUTPUT: Before, if ref in refs/tags was tag pointing to
commit we used committer epoch as epoch for ref, and used tagger epoch
as epoch only for tag pointing to object of other type. If ref in
refs/tags was commit, we used committer epoch as epoch for ref (see
parse_ref; we sorted in gitweb by 'epoch' field).

Currently we use committer epoch for refs pointing to commit objects,
and tagger epoch for refs pointing to tag object, even if tag points
to commit.

Simple ab benchmark before and after this patch for my git.git
repository (git/jnareb-git.git) with some heads and tags added
as compared to git.git repository, shows around 2.4-3.0 times speedup
for "summary" and "tags" views:

 summary   3134 +/- 24.2 ms  -->   1081 +/- 30.2 ms
 tags      2886 +/- 18.9 ms  -->   1196 +/- 15.6 ms

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agofor-each-ref: "creator" and "creatordate" fields
Junio C Hamano [Sat, 28 Oct 2006 20:33:46 +0000 (13:33 -0700)]
for-each-ref: "creator" and "creatordate" fields

This adds "creator" (which is parallel to "tagger" or "committer")
and "creatordate" (corresponds to "taggerdate" and
"committerdate").

As other "date" fields, "creatordate" sorts numerically
and displays human readably. This allows for example for
sorting together heavyweigth and lightweight tags.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Acked-by: Jakub Narebski <jnareb@gmail.com>
17 years agoAdd --global option to git-repo-config.
Sean [Thu, 2 Nov 2006 15:44:20 +0000 (10:44 -0500)]
Add --global option to git-repo-config.

Allow user to set variables in global ~/.gitconfig file
using command line.

Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-refs: Store the full name of the ref even when packing only tags.
Alexandre Julliard [Thu, 2 Nov 2006 11:13:32 +0000 (12:13 +0100)]
pack-refs: Store the full name of the ref even when packing only tags.

Using for_each_tag_ref() to enumerate tags is wrong since it removes
the refs/tags/ prefix, we need to always use for_each_ref() and filter
out non-tag references in the callback.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-clone documentation didn't mention --origin as equivalent of -o
Andy Parkins [Thu, 2 Nov 2006 11:11:56 +0000 (12:11 +0100)]
git-clone documentation didn't mention --origin as equivalent of -o

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMinor grammar fixes for git-diff-index.txt
Andy Parkins [Thu, 2 Nov 2006 11:12:44 +0000 (12:12 +0100)]
Minor grammar fixes for git-diff-index.txt

"what you are going to commit is" doesn't need the "is" and does need a comma.

"can trivially see" is an unecessary split infinitive and "easily" is a more
appropriate adverb.

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agolink_temp_to_file: call adjust_shared_perm() only when we created the directory
Johannes Schindelin [Fri, 3 Nov 2006 02:02:17 +0000 (18:02 -0800)]
link_temp_to_file: call adjust_shared_perm() only when we created the directory

17 years agoRemove uneccessarily similar printf() from print_ref_list() in builtin-branch
Andy Parkins [Thu, 2 Nov 2006 11:10:52 +0000 (11:10 +0000)]
Remove uneccessarily similar printf() from print_ref_list() in builtin-branch

Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: work properly in a subdirectory.
Jeff King [Thu, 2 Nov 2006 07:22:49 +0000 (02:22 -0500)]
git-pickaxe: work properly in a subdirectory.

We forgot to add prefix to the given path.

[jc: interestingly enough, Jeff King had the same idea after I
 pushed mine out to "pu", and his patch was cleaner, so I dropped
 mine.]

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomake git-push a bit more verbose
Nicolas Pitre [Tue, 31 Oct 2006 21:58:32 +0000 (16:58 -0500)]
make git-push a bit more verbose

Currently git-push displays progress status for the local packing of
objects to send, but nothing once it starts to push it over the
connection.  Having progress status in that later case is especially
nice when pushing lots of objects over a slow network link.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 1 Nov 2006 23:09:55 +0000 (15:09 -0800)]
Merge branch 'maint'

* maint:
  pack-objects doesn't create random pack names
  link_temp_to_file: don't leave the path truncated on adjust_shared_perm failure

17 years agopack-objects doesn't create random pack names
Nicolas Pitre [Wed, 1 Nov 2006 22:34:47 +0000 (17:34 -0500)]
pack-objects doesn't create random pack names

Documentation for pack-objects seems to be out of date in this regard.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agobranch: work in subdirectories.
Junio C Hamano [Wed, 1 Nov 2006 20:53:13 +0000 (12:53 -0800)]
branch: work in subdirectories.

Noticed by Andy Whitcroft

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Use 's' regexp modifier to secure against filenames with LF
Jakub Narebski [Mon, 30 Oct 2006 21:25:11 +0000 (22:25 +0100)]
gitweb: Use 's' regexp modifier to secure against filenames with LF

Use 's' (treat string as single line) regexp modifier in
git_get_hash_by_path (against future changes, probably unnecessary)
and in parse_ls_tree_line (when called with '-z'=>1 option) to secure
against filenames containing newline.

[jc: the hunk on git_get_hash_by_path was unneeded, and I noticed the
 regexp was doing unnecessary capture, so fixed it up while I was at it.]

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Secure against commit-ish/tree-ish with the same name as path
Jakub Narebski [Mon, 30 Oct 2006 21:29:06 +0000 (22:29 +0100)]
gitweb: Secure against commit-ish/tree-ish with the same name as path

Add "--" after <commit-ish> or <tree-ish> argument to clearly mark it
as <commit-ish> or <tree-ish> and not pathspec, securing against refs
with the same names as files or directories in [live] repository.

Some wrapping to reduce line length as well.

[jc: with "oops, ls-tree does not want --" fix-up manually applied.]

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: esc_html() author in blame
Luben Tuikov [Mon, 30 Oct 2006 20:37:54 +0000 (12:37 -0800)]
gitweb: esc_html() author in blame

Blame fails for example on
block/ll_rw_blk.c at v2.6.19-rc3.

Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'rs/cherry'
Junio C Hamano [Wed, 1 Nov 2006 17:17:37 +0000 (09:17 -0800)]
Merge branch 'rs/cherry'

* rs/cherry:
  Make git-cherry handle root trees
  Built-in cherry

17 years agoMerge branch 'jc/refs-and-fetch'
Junio C Hamano [Wed, 1 Nov 2006 16:49:19 +0000 (08:49 -0800)]
Merge branch 'jc/refs-and-fetch'

* jc/refs-and-fetch:
  git-fetch: adjust to packed-refs.

17 years agoMerge branch 'lj/refs'
Junio C Hamano [Wed, 1 Nov 2006 16:48:50 +0000 (08:48 -0800)]
Merge branch 'lj/refs'

* lj/refs: (63 commits)
  Fix show-ref usagestring
  t3200: git-branch testsuite update
  sha1_name.c: avoid compilation warnings.
  Make git-branch a builtin
  ref-log: fix D/F conflict coming from deleted refs.
  git-revert with conflicts to behave as git-merge with conflicts
  core.logallrefupdates thinko-fix
  git-pack-refs --all
  core.logallrefupdates create new log file only for branch heads.
  Remove bashism from t3210-pack-refs.sh
  ref-log: allow ref@{count} syntax.
  pack-refs: call fflush before fsync.
  pack-refs: use lockfile as everybody else does.
  git-fetch: do not look into $GIT_DIR/refs to see if a tag exists.
  lock_ref_sha1_basic does not remove empty directories on BSD
  Do not create tag leading directories since git update-ref does it.
  Check that a tag exists using show-ref instead of looking for the ref file.
  Use git-update-ref to delete a tag instead of rm()ing the ref file.
  Fix refs.c;:repack_without_ref() clean-up path
  Clean up "git-branch.sh" and add remove recursive dir test cases.
  ...

17 years agogit-svnimport: support for partial imports
Sasha Khapyorsky [Wed, 25 Oct 2006 22:50:26 +0000 (00:50 +0200)]
git-svnimport: support for partial imports

This adds support for partial svn imports. Let's assume that SVN
repository layout looks like:

  $trunk/path/to/our/project
  $branches/path/to/our/project
  $tags/path/to/our/project

, and we would like to import only tree under this specific
'path/to/our/project' and not whole tree under $trunk, $branches, etc..
Now we will be be able to do it by using '-P path/to/our/project' option
with git-svnimport.

Signed-off-by: Sasha Khapyorsky <sashak@voltaire.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agolink_temp_to_file: don't leave the path truncated on adjust_shared_perm failure
Junio C Hamano [Tue, 31 Oct 2006 23:56:58 +0000 (15:56 -0800)]
link_temp_to_file: don't leave the path truncated on adjust_shared_perm failure

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoIntroduce a new revision set operator <rev>^!
Junio C Hamano [Tue, 31 Oct 2006 22:22:34 +0000 (14:22 -0800)]
Introduce a new revision set operator <rev>^!

This is a shorthand for "<rev> --not <rev>^@", i.e. "include
this commit but exclude any of its parents".

When a new file $F is introduced by revision $R, this notation
can be used to find a copy-and-paste from existing file in the
parents of that revision without annotating the ancestry of the
lines that were copied from:

git pickaxe -f -C $R^! -- $F

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: cache one already found path per commit.
Junio C Hamano [Tue, 31 Oct 2006 09:00:01 +0000 (01:00 -0800)]
git-pickaxe: cache one already found path per commit.

Depending on how bushy the commit DAG is, this saves calls to
the internal diff-tree for fork-point commits.  For example,
annotating Makefile in the kernel repository saves about a third
of such diff-tree calls.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit push: add verbose flag and allow overriding of default target repository
Linus Torvalds [Mon, 30 Oct 2006 16:28:59 +0000 (08:28 -0800)]
git push: add verbose flag and allow overriding of default target repository

This adds a command line flag "-v" to enable a more verbose mode, and
"--repo=" to override the default target repository for "git push" (which
otherwise always defaults to "origin").

This, together with the patch to allow dashes in config variable names,
allows me to do

[alias]
push-all = push -v --repo=all

in my user-global config file, and then I can (for any project I maintain)
add to the project-local config file

[remote "all"]
url=one.target.repo:/directory
url=another.target:/pub/somewhere/else

and now "git push-all" just updates all the target repositories, and shows
me what it does - regardless of which repo I am in.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow '-' in config variable names
Linus Torvalds [Mon, 30 Oct 2006 16:25:36 +0000 (08:25 -0800)]
Allow '-' in config variable names

I need this in order to allow aliases of the same form as "ls-tree",
"rev-parse" etc, so that I can use

[alias]
my-cat=--paginate cat-file -p

to add a "git my-cat" command.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Tue, 31 Oct 2006 03:38:50 +0000 (19:38 -0800)]
Merge branch 'maint'

* maint:
  revision traversal: --unpacked does not limit commit list anymore.
  Continue traversal when rev-list --unpacked finds a packed commit.
  Use memmove instead of memcpy for overlapping areas
  quote.c: ensure the same quoting across platforms.
  Surround "#define DEBUG 0" with "#ifndef DEBUG..#endif"

17 years agoMove deny_non_fast_forwards handling completely into receive-pack.
Shawn Pearce [Mon, 30 Oct 2006 22:35:18 +0000 (17:35 -0500)]
Move deny_non_fast_forwards handling completely into receive-pack.

The 'receive.denynonfastforwards' option has nothing to do with
the repository format version.  Since receive-pack already uses
git_config to initialize itself before executing any updates we
can use the normal configuration strategy and isolate the receive
specific variables away from the core variables.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove unused variable in receive-pack.
Shawn Pearce [Mon, 30 Oct 2006 22:34:50 +0000 (17:34 -0500)]
Remove unused variable in receive-pack.

We aren't using this return code variable for anything so lets
just get rid of it to keep this section of code clean.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agorevision traversal: --unpacked does not limit commit list anymore.
Junio C Hamano [Tue, 31 Oct 2006 02:58:03 +0000 (18:58 -0800)]
revision traversal: --unpacked does not limit commit list anymore.

This is needed to gain smaller latency back.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoContinue traversal when rev-list --unpacked finds a packed commit.
Jan Harkes [Tue, 31 Oct 2006 01:37:49 +0000 (20:37 -0500)]
Continue traversal when rev-list --unpacked finds a packed commit.

When getting the list of all unpacked objects by walking the commit history,
we would stop traversal whenever we hit a packed commit. However the fact
that we found a packed commit does not guarantee that all previous commits
are also packed. As a result the commit walkers did not show all reachable
unpacked objects.

Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse memmove instead of memcpy for overlapping areas
Edgar Toernig [Tue, 31 Oct 2006 01:44:27 +0000 (17:44 -0800)]
Use memmove instead of memcpy for overlapping areas

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse memmove instead of memcpy for overlapping areas
Edgar Toernig [Tue, 31 Oct 2006 01:39:17 +0000 (17:39 -0800)]
Use memmove instead of memcpy for overlapping areas

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: split find_origin() into find_rename() and find_origin().
Junio C Hamano [Tue, 31 Oct 2006 01:17:41 +0000 (17:17 -0800)]
git-pickaxe: split find_origin() into find_rename() and find_origin().

When a merge adds a new file from the second parent, the
earlier code tried to find renames in the first parent before
noticing that the vertion from the second parent was added
without modification.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoquote.c: ensure the same quoting across platforms.
Junio C Hamano [Tue, 31 Oct 2006 00:07:54 +0000 (16:07 -0800)]
quote.c: ensure the same quoting across platforms.

We read a byte from "char *" and compared it with ' ' to decide
if it needs quoting to protect textual output.  With a platform
where char is unsigned char that would give different result.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRevert "send-pack --keep: do not explode into loose objects on the receiving end."
Junio C Hamano [Tue, 31 Oct 2006 00:02:07 +0000 (16:02 -0800)]
Revert "send-pack --keep: do not explode into loose objects on the receiving end."

This reverts commit c7740a943ec896247ebc5514b6be02710caf3c53.  There should
be a way to make this controllable from the receiver end.

17 years agoSurround "#define DEBUG 0" with "#ifndef DEBUG..#endif"
Junio C Hamano [Mon, 30 Oct 2006 23:29:53 +0000 (15:29 -0800)]
Surround "#define DEBUG 0" with "#ifndef DEBUG..#endif"

Otherwise "make CFLAGS=-DDEBUG=1" is cumbersome to run.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: tighten sanity checks.
Junio C Hamano [Mon, 30 Oct 2006 22:27:52 +0000 (14:27 -0800)]
git-pickaxe: tighten sanity checks.

When compiled for debugging, make sure that refcnt sanity check
code detects underflows in origin reference counting.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: refcount origin correctly in find_copy_in_parent()
Junio C Hamano [Mon, 30 Oct 2006 07:56:12 +0000 (23:56 -0800)]
git-pickaxe: refcount origin correctly in find_copy_in_parent()

This makes "git-pickaxe -C master -- revision.c" to finish with
proper refcounts for all origins.  I am reasonably happy with
it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: allow -Ln,m as well as -L n,m
Junio C Hamano [Mon, 30 Oct 2006 07:50:38 +0000 (23:50 -0800)]
git-pickaxe: allow -Ln,m as well as -L n,m

The command rejects -L1,10 as an invalid line range specifier
and I got frustrated enough by it, so this makes it allow both
forms of input.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomissing small substitution
Nicolas Pitre [Mon, 30 Oct 2006 02:33:22 +0000 (21:33 -0500)]
missing small substitution

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-pickaxe: WIP to refcount origin structure.
Junio C Hamano [Sun, 29 Oct 2006 11:07:40 +0000 (03:07 -0800)]
git-pickaxe: WIP to refcount origin structure.

The origin structure is allocated for each commit and path while
the code traverse down it is copied into different blame entries.
To avoid leaks, try refcounting them.

This still seems to leak, which I haven't tracked down fully yet.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoTeach git-index-pack how to keep a pack file.
Shawn Pearce [Sun, 29 Oct 2006 09:41:59 +0000 (04:41 -0500)]
Teach git-index-pack how to keep a pack file.

To prevent a race condition between `index-pack --stdin` and
`repack -a -d` where the repack deletes the newly created pack
file before any refs are updated to reference objects contained
within it we mark the pack file as one that should be kept.  This
removes it from the list of packs that `repack -a -d` will consider
for removal.

Callers such as `receive-pack` which want to invoke `index-pack`
should use this new --keep option to prevent the newly created pack
and index file pair from being deleted before they have finished any
related ref updates.  Only after all ref updates have been finished
should the associated .keep file be removed.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>