Code

git.git
17 years agot5302: avoid using tail -c
Junio C Hamano [Tue, 24 Apr 2007 05:05:22 +0000 (22:05 -0700)]
t5302: avoid using tail -c

A Large Angry SCM (gitzilla) noticed that on an unnamed platform, tail -c
wants its byte count as part of the option, not as a separate argument.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agot4201: Do not display weird characters on the terminal
Johannes Schindelin [Mon, 23 Apr 2007 18:46:21 +0000 (20:46 +0200)]
t4201: Do not display weird characters on the terminal

Now that git-commit got chatty, we have to shut it up again.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoadd file checkout progress
Nicolas Pitre [Mon, 23 Apr 2007 17:17:19 +0000 (13:17 -0400)]
add file checkout progress

It is nice to see what is happening when checking out large amount of
files, either with git-checkout or git-reset.  The new progress code
already decides what is a "significant amount" and displays progress
only in that case..

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument "diff=driver" attribute
Junio C Hamano [Mon, 23 Apr 2007 07:21:02 +0000 (00:21 -0700)]
Document "diff=driver" attribute

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitweb: Show "no difference" message for empty diff v1.5.2-rc0
Martin Koegler [Mon, 23 Apr 2007 05:49:25 +0000 (22:49 -0700)]
gitweb: Show "no difference" message for empty diff

Currently, gitweb shows only header and footer, if no differences are
found. This patch adds a "No differences found" message for the html
output.

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodelay progress display when checking out files
Nicolas Pitre [Fri, 20 Apr 2007 19:27:44 +0000 (15:27 -0400)]
delay progress display when checking out files

Let's start displaying progress only if more than 50% of total number
of files remains to be checked out after 2 seconds.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoprovide a facility for "delayed" progress reporting
Nicolas Pitre [Fri, 20 Apr 2007 19:05:27 +0000 (15:05 -0400)]
provide a facility for "delayed" progress reporting

This allows for progress to be displayed only if the progress has not
reached a specified percentage treshold within a given delay in seconds.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomake progress "title" part of the common progress interface
Nicolas Pitre [Fri, 20 Apr 2007 18:10:07 +0000 (14:10 -0400)]
make progress "title" part of the common progress interface

If the progress bar ends up in a box, better provide a title for it too.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agocommon progress display support
Nicolas Pitre [Wed, 18 Apr 2007 18:27:45 +0000 (14:27 -0400)]
common progress display support

Instead of having this code duplicated in multiple places, let's have
a common interface for progress display.  If someday someone wishes to
display a cheezy progress bar instead then only one file will have to
be changed.

Note: I left merge-recursive.c out since it has a strange notion of
progress as it apparently increase the expected total number as it goes.
Someone with more intimate knowledge of what that is supposed to mean
might look at converting it to the common progress interface.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSupport 'diff=pgm' attribute
Junio C Hamano [Mon, 23 Apr 2007 00:52:55 +0000 (17:52 -0700)]
Support 'diff=pgm' attribute

This enhances the attributes mechanism so that external programs
meant for existing GIT_EXTERNAL_DIFF interface can be specifed
per path.

To configure such a custom diff driver, first define a custom
diff driver in the configuration:

[diff "my-c-diff"]
command = <<your command string comes here>>

Then mark the paths that you want to use this custom driver
using the attribute mechanism.

*.c diff=my-c-diff

The intent of this separation is that the attribute mechanism is
used for specifying the type of the contents, while the
configuration mechanism is used to define what needs to be done
to that type of the contents, which would be specific to both
platform and personal taste.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: make generated packfile read-only
Junio C Hamano [Mon, 23 Apr 2007 02:00:16 +0000 (19:00 -0700)]
pack-objects: make generated packfile read-only

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate tests not to assume that generated packfiles are writable.
Junio C Hamano [Mon, 23 Apr 2007 01:59:34 +0000 (18:59 -0700)]
Update tests not to assume that generated packfiles are writable.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix 'quickfix' on pack-objects.
Junio C Hamano [Sun, 22 Apr 2007 19:28:34 +0000 (12:28 -0700)]
Fix 'quickfix' on pack-objects.

The earlier quickfix forced world-readable permission bits.  This
updates it to honor umask and core.sharedrepository settings.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: quickfix for permission modes.
Junio C Hamano [Sun, 22 Apr 2007 18:49:35 +0000 (11:49 -0700)]
pack-objects: quickfix for permission modes.

mkstemp() often creates the file in 0600 which means the
resulting packfile is not readable by anybody other than the
repository owner.  Force 0644 for now, even though this is not
strictly correct.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix crash in t0020 (crlf conversion)
Alex Riesen [Sun, 22 Apr 2007 14:11:54 +0000 (16:11 +0200)]
Fix crash in t0020 (crlf conversion)

Reallocated wrong size.
Noticed on Ubuntu 7.04 probably because it has some malloc diagnostics in libc:
"git-read-tree --reset -u HEAD" aborted in the test. Valgrind sped up the
debugging greatly: took me 10 minutes.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix a typo in crlf conversion code
Alex Riesen [Sun, 22 Apr 2007 14:12:22 +0000 (16:12 +0200)]
Fix a typo in crlf conversion code

Also, noticed by valgrind: the code caused a read out-of-bounds.
Some comments updated as well (they still reflected old calling
conventions).

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoCleanup variables in cat-file
Shawn O. Pearce [Sun, 22 Apr 2007 01:14:39 +0000 (21:14 -0400)]
Cleanup variables in cat-file

I want to add new command line options to cat-file, but
to do that we need to change how we handle argv[] first.
This is a simple cleanup that assigns names to the two
arguments we currently care about.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate draft release notes for v1.5.2
Junio C Hamano [Sun, 22 Apr 2007 07:26:56 +0000 (00:26 -0700)]
Update draft release notes for v1.5.2

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation/Makefile: fix section (5) installation
Junio C Hamano [Sun, 22 Apr 2007 07:11:41 +0000 (00:11 -0700)]
Documentation/Makefile: fix section (5) installation

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate documentation links to point at v1.5.1.2
Junio C Hamano [Sun, 22 Apr 2007 06:51:27 +0000 (23:51 -0700)]
Update documentation links to point at v1.5.1.2

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'lt/objalloc'
Junio C Hamano [Sun, 22 Apr 2007 00:41:40 +0000 (17:41 -0700)]
Merge branch 'lt/objalloc'

* 'lt/objalloc':
  Clean up object creation to use more common code
  Use proper object allocators for unknown object nodes too

17 years agoMerge branch 'jc/add'
Junio C Hamano [Sun, 22 Apr 2007 00:40:48 +0000 (17:40 -0700)]
Merge branch 'jc/add'

* jc/add:
  git-add -u: match the index with working tree.

17 years agoMerge branch 'jc/attr'
Junio C Hamano [Sun, 22 Apr 2007 00:38:00 +0000 (17:38 -0700)]
Merge branch 'jc/attr'

* 'jc/attr': (28 commits)
  lockfile: record the primary process.
  convert.c: restructure the attribute checking part.
  Fix bogus linked-list management for user defined merge drivers.
  Simplify calling of CR/LF conversion routines
  Document gitattributes(5)
  Update 'crlf' attribute semantics.
  Documentation: support manual section (5) - file formats.
  Simplify code to find recursive merge driver.
  Counto-fix in merge-recursive
  Fix funny types used in attribute value representation
  Allow low-level driver to specify different behaviour during internal merge.
  Custom low-level merge driver: change the configuration scheme.
  Allow the default low-level merge driver to be configured.
  Custom low-level merge driver support.
  Add a demonstration/test of customized merge.
  Allow specifying specialized merge-backend per path.
  merge-recursive: separate out xdl_merge() interface.
  Allow more than true/false to attributes.
  Document git-check-attr
  Change attribute negation marker from '!' to '-'.
  ...

17 years agoMerge branch 'lt/gitlink'
Junio C Hamano [Sun, 22 Apr 2007 00:21:10 +0000 (17:21 -0700)]
Merge branch 'lt/gitlink'

* lt/gitlink:
  Tests for core subproject support
  Expose subprojects as special files to "git diff" machinery
  Fix some "git ls-files -o" fallout from gitlinks
  Teach "git-read-tree -u" to check out submodules as a directory
  Teach git list-objects logic to not follow gitlinks
  Fix gitlink index entry filesystem matching
  Teach "git-read-tree -u" to check out submodules as a directory
  Teach git list-objects logic not to follow gitlinks
  Don't show gitlink directories when we want "other" files
  Teach git-update-index about gitlinks
  Teach directory traversal about subprojects
  Fix thinko in subproject entry sorting
  Teach core object handling functions about gitlinks
  Teach "fsck" not to follow subproject links
  Add "S_IFDIRLNK" file mode infrastructure for git links
  Add 'resolve_gitlink_ref()' helper function
  Avoid overflowing name buffer in deep directory structures
  diff-lib: use ce_mode_from_stat() rather than messing with modes manually

17 years agoMerge branch 'np/pack'
Junio C Hamano [Sun, 22 Apr 2007 00:20:50 +0000 (17:20 -0700)]
Merge branch 'np/pack'

* np/pack: (27 commits)
  document --index-version for index-pack and pack-objects
  pack-objects: remove obsolete comments
  pack-objects: better check_object() performances
  add get_size_from_delta()
  pack-objects: make in_pack_header_size a variable of its own
  pack-objects: get rid of create_final_object_list()
  pack-objects: get rid of reuse_cached_pack
  pack-objects: clean up list sorting
  pack-objects: rework check_delta_limit usage
  pack-objects: equal objects in size should delta against newer objects
  pack-objects: optimize preferred base handling a bit
  clean up add_object_entry()
  tests for various pack index features
  use test-genrandom in tests instead of /dev/urandom
  simple random data generator for tests
  validate reused pack data with CRC when possible
  allow forcing index v2 and 64-bit offset treshold
  pack-redundant.c: learn about index v2
  show-index.c: learn about index v2
  sha1_file.c: learn about index version 2
  ...

17 years agoMerge branch 'jp/refs'
Junio C Hamano [Sun, 22 Apr 2007 00:19:34 +0000 (17:19 -0700)]
Merge branch 'jp/refs'

* jp/refs:
  refs.c: add a function to sort a ref list, rather then sorting on add

17 years agoMerge branch 'jc/quickfetch'
Junio C Hamano [Sun, 22 Apr 2007 00:19:25 +0000 (17:19 -0700)]
Merge branch 'jc/quickfetch'

* jc/quickfetch:
  Make sure quickfetch is not fooled with a previous, incomplete fetch.
  git-fetch: use fetch--tool pick-rref to avoid local fetch from alternate
  git-fetch--tool pick-rref

17 years agoMerge branch 'maint'
Junio C Hamano [Sun, 22 Apr 2007 00:16:48 +0000 (17:16 -0700)]
Merge branch 'maint'

* maint:
  GIT 1.5.1.2
  perl: install private Error.pm if the site version is older than our own
  git-clone: fix dumb protocol transport to clone from pack-pruned ref

17 years agoGIT 1.5.1.2 v1.5.1.2
Junio C Hamano [Sat, 21 Apr 2007 20:57:07 +0000 (13:57 -0700)]
GIT 1.5.1.2

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoperl: install private Error.pm if the site version is older than our own
Eric Wong [Sat, 21 Apr 2007 07:55:00 +0000 (00:55 -0700)]
perl: install private Error.pm if the site version is older than our own

bdash (on IRC) had a problem with Git.pm (via git-svn) when his
site installation of Error.pm was older than the version we
package.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agolockfile: record the primary process.
Junio C Hamano [Sat, 21 Apr 2007 10:11:10 +0000 (03:11 -0700)]
lockfile: record the primary process.

The usual process flow is the main process opens and holds the lock to
the index, does its thing, perhaps spawning children during the course,
and then writes the resulting index out by releaseing the lock.

However, the lockfile interface uses atexit(3) to clean it up, without
regard to who actually created the lock.  This typically leads to a
confusing behaviour of lock being released too early when the child
exits, and then the parent process when it calls commit_lockfile()
finds that it cannot unlock it.

This fixes the problem by recording who created and holds the lock, and
upon atexit(3) handler, child simply ignores the lockfile the parent
created.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoconvert.c: restructure the attribute checking part.
Junio C Hamano [Sat, 21 Apr 2007 06:44:02 +0000 (23:44 -0700)]
convert.c: restructure the attribute checking part.

This separates the checkattr() call and interpretation of the
returned value specific to the 'crlf' attribute into separate
routines, so that we can run a single call to checkattr() to
check for more than one attributes, and then interprete what
the returned settings mean separately.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix bogus linked-list management for user defined merge drivers.
Junio C Hamano [Sat, 21 Apr 2007 07:05:31 +0000 (00:05 -0700)]
Fix bogus linked-list management for user defined merge drivers.

ll_user_merge_tail is supposed to point at the pointer to be
updated to point at a newly created item.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSimplify calling of CR/LF conversion routines
Alex Riesen [Thu, 19 Apr 2007 00:05:03 +0000 (02:05 +0200)]
Simplify calling of CR/LF conversion routines

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix a copy-n-paste bug in the object decorator code.
Linus Torvalds [Sat, 21 Apr 2007 01:30:06 +0000 (18:30 -0700)]
Fix a copy-n-paste bug in the object decorator code.

Duh.

When I did the object decorator thing, I made the "loop over the hash"
function use the same logic for updating the hash, ie made them use

if (++j >= size)
j = 0;

for both the hash update for both "insert" and "lookup"

HOWEVER.

For some inexplicable reason I had an extraneous

j++;

in the insert path (probably just from the fact that the old code there
used

j++;
if (j >= size)
j = 0;

and when I made them use the same logic I just didn't remove the old
extraneous line properly.

This fixes it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-clone: fix dumb protocol transport to clone from pack-pruned ref
Junio C Hamano [Sat, 21 Apr 2007 00:25:27 +0000 (17:25 -0700)]
git-clone: fix dumb protocol transport to clone from pack-pruned ref

This forward-ports a fix from 2986c022 to git-clone.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-add -u: match the index with working tree.
Junio C Hamano [Fri, 20 Apr 2007 08:39:39 +0000 (01:39 -0700)]
git-add -u: match the index with working tree.

This is a shorthand of what "git commit -a" does in preparation
for making a commit, which is:

    git diff-files --name-only -z | git update-index --remove -z --stdin

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogitview: annotation support
Aneesh Kumar K.V [Thu, 19 Apr 2007 16:56:03 +0000 (22:26 +0530)]
gitview: annotation support

List files modifed as a part of the commit in the diff window
Support annotation of the file listed in the diff window
Support history browsing in the annotation window.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoKill the useless progress meter in merge-recursive
Shawn O. Pearce [Fri, 20 Apr 2007 06:37:18 +0000 (02:37 -0400)]
Kill the useless progress meter in merge-recursive

The mess known as the progress meter in merge-recursive was my own
fault; I put it in thinking that we might be spending a lot of time
resolving unmerged entries in the index that were not handled by
the simple 3-way index merge code.

Turns out we don't really spend that much time there, so the progress
meter was pretty much always jumping to "(n/n) 100%" as soon as
the program started.  That isn't a very good indication of progress.

Since I don't have a great solution for how a progress meter should
work here, I'm proposing we back it out entirely.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoRemove case-sensitive file in t3030-merge-recursive.
Brian Gernhardt [Thu, 19 Apr 2007 04:51:06 +0000 (00:51 -0400)]
Remove case-sensitive file in t3030-merge-recursive.

Rename "A" to the unused "c"

Signed-off-by: Brian Gernhardt <benji@silverinsanity.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit.el: Add a commit description to the reflog.
Alexandre Julliard [Thu, 19 Apr 2007 11:16:58 +0000 (13:16 +0200)]
git.el: Add a commit description to the reflog.

Add a description of the commit to the reflog using the first line of
the log message, the same way the git-commit script does it.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoContribute a fairly paranoid update hook
Shawn O. Pearce [Fri, 20 Apr 2007 06:08:47 +0000 (02:08 -0400)]
Contribute a fairly paranoid update hook

I'm using a variant of this update hook in a corporate environment
where we perform some validations of the commits and tags that
are being pushed.  The model is a "central repository" type setup,
where users are given access to push to specific branches within
the shared central repository.  In this particular installation we
run a specially patched git-receive-pack in setuid mode via SSH,
allowing all writes into the repository as the repository owner,
but only if this hook blesses it.

One of the major checks we perform with this hook is that the
'committer' line of a commit, or the 'tagger' line of a new annotated
tag actually correlates to the UNIX user who is performing the push.
Users can falsify these lines on their local repositories, but
the central repository that management trusts will reject all such
forgery attempts.  Of course 'author' lines are still allowed to
be any value, as sometimes changes do come from other individuals.

Another nice feature of this hook is the access control lists for
all repositories on the system can also be stored and tracked in
a supporting Git repository, which can also be access controlled
by itself.  This allows full auditing of who-had-what-when-and-why,
thanks to git-blame's data mining capabilities.

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

* maint:
  Update git-config documentation
  Fix unmatched emphasis tag in git-tutorial
  Update git-cherry-pick documentation
  Update git-archive documentation

17 years agoFix working directory errno handling when unlinking a directory
Linus Torvalds [Fri, 20 Apr 2007 05:48:21 +0000 (22:48 -0700)]
Fix working directory errno handling when unlinking a directory

Alex Riesen noticed that the case where a file replaced a directory entry
in the working tree was broken on cygwin. It turns out that the code made
some Linux-specific assumptions, and also ignored errors entirely for the
case where the entry was a symlink rather than a file.

This cleans it up by separating out the common case into a function of its
own, so that both regular files and symlinks can share it, and by making
the error handling more obvious (and not depend on any Linux-specific
behaviour).

Acked-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocument gitattributes(5)
Junio C Hamano [Fri, 20 Apr 2007 03:48:03 +0000 (20:48 -0700)]
Document gitattributes(5)

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate 'crlf' attribute semantics.
Junio C Hamano [Fri, 20 Apr 2007 05:37:19 +0000 (22:37 -0700)]
Update 'crlf' attribute semantics.

This updates the semantics of 'crlf' so that .gitattributes file
can say "this is text, even though it may look funny".

Setting the `crlf` attribute on a path is meant to mark the path
as a "text" file.  'core.autocrlf' conversion takes place
without guessing the content type by inspection.

Unsetting the `crlf` attribute on a path is meant to mark the
path as a "binary" file.  The path never goes through line
endings conversion upon checkin/checkout.

Unspecified `crlf` attribute tells git to apply the
`core.autocrlf` conversion when the file content looks like
text.

Setting the `crlf` attribut to string value "input" is similar
to setting the attribute to `true`, but also forces git to act
as if `core.autocrlf` is set to `input` for the path.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoDocumentation: support manual section (5) - file formats.
Junio C Hamano [Fri, 20 Apr 2007 03:47:04 +0000 (20:47 -0700)]
Documentation: support manual section (5) - file formats.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agodocument --index-version for index-pack and pack-objects
Nicolas Pitre [Fri, 20 Apr 2007 02:16:53 +0000 (22:16 -0400)]
document --index-version for index-pack and pack-objects

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: remove obsolete comments
Nicolas Pitre [Fri, 20 Apr 2007 02:28:02 +0000 (22:28 -0400)]
pack-objects: remove obsolete comments

The sorted-by-sha ans sorted-by-type arrays are no more.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate git-config documentation
Andrew Ruder [Thu, 19 Apr 2007 03:03:37 +0000 (22:03 -0500)]
Update git-config documentation

Documentation/git-config.txt: Added documentation for --system
Documentation/builtin-config.c: Added --system to the short usage

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix unmatched emphasis tag in git-tutorial
Andrew Ruder [Thu, 19 Apr 2007 03:03:31 +0000 (22:03 -0500)]
Fix unmatched emphasis tag in git-tutorial

In asciidoc 7.1.2 and prior there is no obvious way to get:

'add'ing

to emphasize only the "add", instead it treats the first apostrophe as the
beginning of an emphasis, and the second apostrophe as a regular
apostrophe and makes the rest of the line an emphasis since there is no
closing apostrophe.  In the newer asciidoc you can do it pretty easily
with __add__ing but I'm not sure it would be best to make that a prereq
for something as silly as this.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate git-cherry-pick documentation
Andrew Ruder [Thu, 19 Apr 2007 03:03:26 +0000 (22:03 -0500)]
Update git-cherry-pick documentation

Documentation/git-cherry-pick.txt: Remove --replay as it is not
handled by the code (-r is however).

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate git-archive documentation
Andrew Ruder [Thu, 19 Apr 2007 03:03:14 +0000 (22:03 -0500)]
Update git-archive documentation

Documentation/git-archive.txt: Document -v/--verbose option.
Add -l as short form of --list.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Thu, 19 Apr 2007 02:33:38 +0000 (19:33 -0700)]
Merge branch 'maint'

* maint:
  fix up strtoul_ui error handling
  git-tar-tree: complete deprecation conversion message

17 years agofix up strtoul_ui error handling
Andy Whitcroft [Thu, 19 Apr 2007 02:08:15 +0000 (03:08 +0100)]
fix up strtoul_ui error handling

Two scanf() calls were converted to strtoul_ui() but the return
values were not updated to match.  scanf() returns the number of
matched "values" which for this usage is 1 on success.  strtoul_ui()
return 0 on success.  Update these call sites to match.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoSimplify code to find recursive merge driver.
Junio C Hamano [Thu, 19 Apr 2007 02:22:57 +0000 (19:22 -0700)]
Simplify code to find recursive merge driver.

There is no need to intern the string to git_attr, as we are already
dealing with the name of the driver there.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoCounto-fix in merge-recursive
Junio C Hamano [Thu, 19 Apr 2007 02:05:57 +0000 (19:05 -0700)]
Counto-fix in merge-recursive

When the configuration has variables unrelated to low-level
merge drivers (e.g. merge.summary), the code failed to ignore
them but did something totally senseless.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-tar-tree: complete deprecation conversion message
Sam Vilain [Wed, 18 Apr 2007 23:51:21 +0000 (11:51 +1200)]
git-tar-tree: complete deprecation conversion message

The syntax for git-archive is different; warn about it in the
deprecation message on the manual page.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoTests for core subproject support
Alex Riesen [Wed, 18 Apr 2007 23:55:45 +0000 (01:55 +0200)]
Tests for core subproject support

The following tests available:

- create subprojects: create a directory in the superproject,
  initialize a git repo in it, and try adding it in super project.
  Make a commit in superproject

- check if fsck ignores the subprojects: it just should give no errors

- check if commit in a subproject detected: make a commit in
  subproject, git-diff-files in superproject should detect it

- check if a changed subproject HEAD can be committed: try
  "git-commit -a" in superproject. It should commit changed
  HEAD of a subproject

- check if diff-index works for subproject elements: compare the index
  (changed by previuos tests) with the initial commit (which created
  two subprojects). Should show a change for the recently changed subproject

- check if diff-tree works for subproject elements: do the same, just use
  git-diff-tree. This test is somewhat redundant, I just added it for
  completeness (diff, diff-files, and diff-index are already used)

- check if git diff works for subproject elements: try to limit
  the diff for the name of a subproject in superproject:
     git diff HEAD^ HEAD -- subproject

- check if clone works: try a clone of superproject and compare
  "git ls-files -s" output in superproject and cloned repo

- removing and adding subproject: rename test. Currently implemented
  as "git-update-index --force-remove", "mv" and "git-add".

- checkout in superproject: try to checkout the initial commit

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agorefs.c: add a function to sort a ref list, rather then sorting on add
Julian Phillips [Tue, 17 Apr 2007 01:42:50 +0000 (02:42 +0100)]
refs.c: add a function to sort a ref list, rather then sorting on add

Rather than sorting the refs list while building it, sort in one
go after it is built using a merge sort.  This has a large
performance boost with large numbers of refs.

It shouldn't happen that we read duplicate entries into the same
list, but just in case sort_ref_list drops them if the SHA1s are
the same, or dies, as we have no way of knowing which one is the
correct one.

Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 18 Apr 2007 23:17:28 +0000 (16:17 -0700)]
Merge branch 'maint'

* maint:
  git-shortlog: Fix two formatting errors in asciidoc documentation
  Fix overwriting of files when applying contextually independent diffs
  git-svn: don't allow globs to match regular files

17 years agoFix funny types used in attribute value representation
Junio C Hamano [Wed, 18 Apr 2007 23:16:37 +0000 (16:16 -0700)]
Fix funny types used in attribute value representation

It was bothering me a lot that I abused small integer values
casted to (void *) to represent non string values in
gitattributes.  This corrects it by making the type of attribute
values (const char *), and using the address of a few statically
allocated character buffer to denote true/false.  Unset attributes
are represented as having NULLs as their values.

Added in-header documentation to explain how git_checkattr()
routine should be called.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-shortlog: Fix two formatting errors in asciidoc documentation
Frank Lichtenheld [Wed, 18 Apr 2007 22:10:22 +0000 (00:10 +0200)]
git-shortlog: Fix two formatting errors in asciidoc documentation

First use [verse] in the SYNOPSIS so that the line break actually
shows.

Secondly drop the quotes around '.mailmap' since this exposes
a bug in our toolchain (didn't bother enough yet to find out wether
it is asciidoc's fault or that of the XSL templates) that leads to
the dot not getting escaped correctly in the roff output and thereby
swallowing the line.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoFix overwriting of files when applying contextually independent diffs
Alex Riesen [Wed, 18 Apr 2007 21:58:56 +0000 (23:58 +0200)]
Fix overwriting of files when applying contextually independent diffs

Noticed by applying two diffs of different contexts to the same file.

The check for existence of a file was wrong: the test assumed it was
a directory and reset the errno (twice: directly and by calling
lstat). So if an entry existed and was _not_ a directory no attempt
was made to rename into it, because the errno (expected by renaming
code) was already reset to 0. This resulted in error:

    fatal: unable to write file file mode 100644

For Linux, removing "errno = 0" is enough, as lstat wont modify errno
if it was successful. The behavior should not be depended upon,
though, so modify the "if" as well.

The test simulates this situation.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-svn: don't allow globs to match regular files
Eric Wong [Wed, 18 Apr 2007 07:17:33 +0000 (00:17 -0700)]
git-svn: don't allow globs to match regular files

git only tracks the histories of full directories, not
that of individual files.  Sometimes, SVN users will
place[1] a regular file in the directory designated
for subdirectories of branches or tags.

Thanks to jrockway on #git for pointing this out.

[1] mistakenly or otherwise, such as a README

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow low-level driver to specify different behaviour during internal merge.
Junio C Hamano [Wed, 18 Apr 2007 19:18:25 +0000 (12:18 -0700)]
Allow low-level driver to specify different behaviour during internal merge.

This allows [merge "drivername"] to have a variable "recursive"
that names a different low-level merge driver to be used when
merging common ancestors to come up with a virtual ancestor.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoCustom low-level merge driver: change the configuration scheme.
Junio C Hamano [Wed, 18 Apr 2007 18:27:32 +0000 (11:27 -0700)]
Custom low-level merge driver: change the configuration scheme.

This changes the configuration syntax for defining a low-level
merge driver to be:

[merge "<<drivername>>"]
driver = "<<command line>>"
name = "<<driver description>>"

which is much nicer to read and is extensible.  Credit goes to
Martin Waitz and Linus.

In addition, when we use an external low-level merge driver, it
is reported as an extra output from merge-recursive, using the
value of merge.<<drivername>.name variable.

The demonstration in t6026 has also been updated.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow the default low-level merge driver to be configured.
Junio C Hamano [Wed, 18 Apr 2007 08:47:21 +0000 (01:47 -0700)]
Allow the default low-level merge driver to be configured.

When no 'merge' attribute is given to a path, merge-recursive
uses the built-in xdl-merge as the low-level merge driver.

A new configuration item 'merge.default' can name a low-level
merge driver of user's choice to be used instead.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoCustom low-level merge driver support.
Junio C Hamano [Wed, 18 Apr 2007 05:51:45 +0000 (22:51 -0700)]
Custom low-level merge driver support.

This allows users to specify custom low-level merge driver per
path, using the attributes mechanism.  Just like you can specify
one of built-in "text", "binary", "union" low-level merge
drivers by saying:

* merge=text
.gitignore merge=union
*.jpg merge=binary

pick a name of your favorite merge driver, and assign it as the
value of the 'merge' attribute.

A custom low-level merge driver is defined via the config
mechanism.  This patch introduces 'merge.driver', a multi-valued
configuration.  Its value is the name (i.e. the one you use as
the value of 'merge' attribute) followed by a command line
specification.  The command line can contain %O, %A, and %B to
be interpolated with the names of temporary files that hold the
common ancestor version, the version from your branch, and the
version from the other branch, and the resulting command is
spawned.

The low-level merge driver is expected to update the temporary
file for your branch (i.e. %A) with the result and exit with
status 0 for a clean merge, and non-zero status for a conflicted
merge.

A new test in t6026 demonstrates a sample usage.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'fl/cvsserver'
Junio C Hamano [Wed, 18 Apr 2007 05:17:46 +0000 (22:17 -0700)]
Merge branch 'fl/cvsserver'

* fl/cvsserver:
  config.txt: Add gitcvs.db* variables
  cvsserver: Document the GIT branches -> CVS modules mapping more prominently
  cvsserver: Reword documentation on necessity of write access
  cvsserver: Allow to "add" a removed file
  cvsserver: Add asciidoc documentation for new database backend configuration
  cvsserver: Corrections to the database backend configuration
  cvsserver: Use DBI->table_info instead of DBI->tables
  cvsserver: Abort if connect to database fails
  cvsserver: Make the database backend configurable
  cvsserver: Allow to override the configuration per access method
  cvsserver: Handle three part keys in git config correctly
  cvsserver: Introduce new state variable 'method'

Conflicts:

Documentation/config.txt

17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 18 Apr 2007 05:17:29 +0000 (22:17 -0700)]
Merge branch 'maint'

* maint:
  Use const qualifier for 'sha1' parameter in delete_ref function

17 years agoUse const qualifier for 'sha1' parameter in delete_ref function
Carlos Rica [Wed, 18 Apr 2007 03:34:34 +0000 (05:34 +0200)]
Use const qualifier for 'sha1' parameter in delete_ref function

delete_ref function does not change the 'sha1' parameter. Non-const pointer
causes a compiler warning if you call to the function using a const argument.

Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUpdate draft release notes for 1.5.2 with accumulated changes.
Junio C Hamano [Wed, 18 Apr 2007 01:03:00 +0000 (18:03 -0700)]
Update draft release notes for 1.5.2 with accumulated changes.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMerge branch 'maint'
Junio C Hamano [Wed, 18 Apr 2007 00:50:21 +0000 (17:50 -0700)]
Merge branch 'maint'

* maint:
  Start preparing for 1.5.1.2
  git-svn: quiet some warnings when run only with --version/--help
  git-svn: respect lower bound of -r/--revision when following parent

Conflicts:

RelNotes

17 years agoStart preparing for 1.5.1.2
Junio C Hamano [Wed, 18 Apr 2007 00:32:23 +0000 (17:32 -0700)]
Start preparing for 1.5.1.2

17 years agoMerge branch 'master' of git://repo.or.cz/git-gui
Junio C Hamano [Wed, 18 Apr 2007 00:16:56 +0000 (17:16 -0700)]
Merge branch 'master' of git://repo.or.cz/git-gui

* 'master' of git://repo.or.cz/git-gui:
  git-gui: Honor TCLTK_PATH if supplied
  Revert "Allow wish interpreter to be defined with TCLTK_PATH"
  git-gui: Display the directory basename in the title
  git-gui: Brown paper bag fix division by 0 in blame
  Always bind the return key to the default button
  Do not break git-gui messages into multiple lines.
  Improve look-and-feel of the git-gui tool.
  Teach git-gui to use the user-defined UI font everywhere.
  Allow wish interpreter to be defined with TCLTK_PATH

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

* 'maint' of git://repo.or.cz/git-gui:
  git-gui: Brown paper bag fix division by 0 in blame

17 years agoMerge branch 'jc/read-tree-df'
Junio C Hamano [Tue, 17 Apr 2007 23:55:46 +0000 (16:55 -0700)]
Merge branch 'jc/read-tree-df'

* jc/read-tree-df:
  t3030: merge-recursive backend test.
  merge-recursive: handle D/F conflict case more carefully.
  merge-recursive: do not barf on "to be removed" entries.
  Treat D/F conflict entry more carefully in unpack-trees.c::threeway_merge()
  t1000: fix case table.

17 years agoAdd a demonstration/test of customized merge.
Junio C Hamano [Tue, 17 Apr 2007 07:05:00 +0000 (00:05 -0700)]
Add a demonstration/test of customized merge.

This demonstrates how the new low-level per-path merge backends,
union and ours, work, and shows how they are controlled by the
gitattribute mechanism.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow specifying specialized merge-backend per path.
Junio C Hamano [Tue, 17 Apr 2007 05:59:18 +0000 (22:59 -0700)]
Allow specifying specialized merge-backend per path.

This allows 'merge' attribute to control how the file-level
three-way merge is done per path.

 - If you set 'merge' to true, leave it unspecified, or set it
   to "text", we use the built-in 3-way xdl-merge.

 - If you set 'merge' to false, or set it to "binary, the
   "binary" merge is done.  The merge result is the blob from
   'our' tree, but this still leaves the path conflicted, so
   that the mess can be sorted out by the user.  This is
   obviously meant to be useful for binary files.

 - 'merge=union' (this is the first example of a string valued
   attribute, introduced in the previous one) uses the "union"
   merge.  The "union" merge takes lines in conflicted hunks
   from both sides, which is useful for line-oriented files such
   as .gitignore.

Instead fo setting merge to 'true' or 'false' by using 'merge'
or '-merge', setting it explicitly to "text" or "binary" will
become useful once we start allowing custom per-path backends to
be added, and allow them to be activated for the default
(i.e. 'merge' attribute specified to 'true' or 'false') case,
using some other mechanisms.  Setting merge attribute to "text"
or "binary" will be a way to explicitly request to override such
a custom default for selected paths.

Currently there is no way to specify random programs but it
should be trivial for motivated contributors to add later.

There is one caveat, though.  ll_merge() is called for both
internal ancestor merge and the outer "final" merge.  I think an
interactive custom per-path merge backend should refrain from
going interactive when performing an internal merge (you can
tell it by checking call_depth) and instead just call either
ll_xdl_merge() if the content is text, or call ll_binary_merge()
otherwise.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-gui: Honor TCLTK_PATH if supplied
Junio C Hamano [Tue, 17 Apr 2007 10:31:47 +0000 (03:31 -0700)]
git-gui: Honor TCLTK_PATH if supplied

Mimick what we do for gitk.  Since you do have a source file,
git-gui.sh, which is separate from the target, it should be much
easier in git-gui's Makefile.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
17 years agoRevert "Allow wish interpreter to be defined with TCLTK_PATH"
Shawn O. Pearce [Tue, 17 Apr 2007 17:15:56 +0000 (13:15 -0400)]
Revert "Allow wish interpreter to be defined with TCLTK_PATH"

This reverts commit e2a1bc67d321a0c03737179f331c39a52e7049d7.

Junio rightly pointed out this patch doesn't handle the
`make install` target very well:

Junio C Hamano <junkio@cox.net> writes:
> You should never generate new files in the source tree from
> 'install' target.  Otherwise, the usual pattern of "make" as
> yourself and then "make install" as root would not work from a
> "root-to-nobody-squashing" NFS mounted source tree to local
> filesystem.  You should know better than accepting such a patch.

17 years agogit-svn: quiet some warnings when run only with --version/--help
Eric Wong [Tue, 17 Apr 2007 09:41:43 +0000 (02:41 -0700)]
git-svn: quiet some warnings when run only with --version/--help

These are harmless but annoying.  They were introduced in
512b620bd9fef7f170562ecad835e37479f051ce

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agogit-svn: respect lower bound of -r/--revision when following parent
Eric Wong [Sun, 15 Apr 2007 10:01:29 +0000 (03:01 -0700)]
git-svn: respect lower bound of -r/--revision when following parent

When an explicit --revision argument is specified, do not fetch
past the specified range into the beginning of history.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agomerge-recursive: separate out xdl_merge() interface.
Junio C Hamano [Tue, 17 Apr 2007 04:58:01 +0000 (21:58 -0700)]
merge-recursive: separate out xdl_merge() interface.

This just moves code around to make the actual call to
xdl_merge() into a separate function.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAllow more than true/false to attributes.
Junio C Hamano [Tue, 17 Apr 2007 04:33:31 +0000 (21:33 -0700)]
Allow more than true/false to attributes.

This allows you to define three values (and possibly more) to
each attribute: true, false, and unset.

Typically the handlers that notice and act on attribute values
treat "unset" attribute to mean "do your default thing"
(e.g. crlf that is unset would trigger "guess from contents"),
so being able to override a setting to an unset state is
actually useful.

 - If you want to set the attribute value to true, have an entry
   in .gitattributes file that mentions the attribute name; e.g.

*.o binary

 - If you want to set the attribute value explicitly to false,
   use '-'; e.g.

*.a -diff

 - If you want to make the attribute value _unset_, perhaps to
   override an earlier entry, use '!'; e.g.

*.a -diff
c.i.a !diff

This also allows string values to attributes, with the natural
syntax:

attrname=attrvalue

but you cannot use it, as nobody takes notice and acts on
it yet.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoAdd --ignore-unmatch option to exit with zero status when no files are removed.
Steven Grimm [Mon, 16 Apr 2007 07:53:24 +0000 (00:53 -0700)]
Add --ignore-unmatch option to exit with zero status when no files are removed.

Signed-off-by: Steven Grimm <koreth@midwinter.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoMake sure quickfetch is not fooled with a previous, incomplete fetch.
Junio C Hamano [Mon, 16 Apr 2007 07:42:29 +0000 (00:42 -0700)]
Make sure quickfetch is not fooled with a previous, incomplete fetch.

This updates git-rev-list --objects to be a bit more careful
when listing a blob object to make sure the blob actually
exists, and uses it to make sure the quick-fetch optimization we
introduced earlier is not fooled by a previous incomplete fetch.

The quick-fetch optimization works by running this command:

git rev-list --objects <<commit-list>> --not --all

where <<commit-list>> is a list of commits that we are going to
fetch from the other side.  If there is any object missing to
complete the <<commit-list>>, the rev-list would fail and die
(say, the commit was in our repository, but its tree wasn't --
then it will barf while trying to list the blobs the tree
contains because it cannot read that tree).

Usually we do not have the objects (otherwise why would we
fetching?), but in one important special case we do: when the
remote repository is used as an alternate object store
(i.e. pointed by .git/objects/info/alternates).  We could check
.git/objects/info/alternates to see if the remote we are
interacting with is one of them (or is used as an alternate,
recursively, by one of them), but that check is more cumbersome
than it is worth.

The above check however did not catch missing blob, because
object listing code did not read nor check blob objects, knowing
that blobs do not contain any further references to other
objects.  This commit fixes it with practically unmeasurable
overhead.

I've benched this with

git rev-list --objects --all >/dev/null

in the kernel repository, with three different implementations
of the "check-blob".

 - Checking with has_sha1_file() has negligible (unmeasurable)
   performance penalty.

 - Checking with sha1_object_info() makes it somewhat slower,
   perhaps by 5%.

 - Checking with read_sha1_file() to cause a fully re-validation
   is prohibitively expensive (about 4 times as much runtime).

In my original patch, I had this as a command line option, but
the overhead is small enough that it is not really worth it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoClean up object creation to use more common code
Linus Torvalds [Tue, 17 Apr 2007 05:11:43 +0000 (22:11 -0700)]
Clean up object creation to use more common code

This replaces the fairly odd "created_object()" function that did _most_
of the object setup with a more complete "create_object()" function that
also has a more natural calling convention.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoUse proper object allocators for unknown object nodes too
Linus Torvalds [Tue, 17 Apr 2007 05:10:19 +0000 (22:10 -0700)]
Use proper object allocators for unknown object nodes too

We used to use a different allocator scheme for when we didn't know the
object type.  That meant that objects that were created without any
up-front knowledge of the type would not go through the same allocation
paths as normal object allocations, and would miss out on the statistics.

But perhaps more importantly than the statistics (that are useful when
looking at memory usage but not much else), if we want to make the
object hash tables use a denser object pointer representation, we need
to make sure that they all go through the same blocking allocator.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoBisect: rename "t/t6030-bisect-run.sh" to "t/t6030-bisect-porcelain.sh".
Christian Couder [Tue, 17 Apr 2007 04:51:48 +0000 (06:51 +0200)]
Bisect: rename "t/t6030-bisect-run.sh" to "t/t6030-bisect-porcelain.sh".

[jc: also fix 0a5280a9 that incorrectly changed the title of one test.]

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoBisect: simplify "bisect start" logging.
Christian Couder [Tue, 17 Apr 2007 04:40:50 +0000 (06:40 +0200)]
Bisect: simplify "bisect start" logging.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: better check_object() performances
Nicolas Pitre [Mon, 16 Apr 2007 16:32:13 +0000 (12:32 -0400)]
pack-objects: better check_object() performances

With large amount of objects, check_object() is really trashing the pack
sliding map and the filesystem cache.  It has a completely random access
pattern especially with old objects where delta replay jumps back and
forth all over the pack.

This patch improves things by:

 1) sorting objects by their offset in pack before calling check_object()
    so the pack access pattern is linear;

 2) recording the object type at add_object_entry() time since it is
    already known in most cases;

 3) recording the pack offset even for preferred_base objects;

 4) avoid calling sha1_object_info() if all possible.

This limits pack accesses to the bare minimum and makes them perfectly
linear.

In the process check_object() was made more clear (to me at least).

Note: I thought about walking the sorted_by_offset list backward in
get_object_details() so if a pack happens to be larger than the available
file cache, then the cache would have been populated with useful data from
the beginning of the pack already when find_deltas() is called.  Strangely,
testing (on Linux) showed absolutely no performance difference.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agoadd get_size_from_delta()
Nicolas Pitre [Mon, 16 Apr 2007 16:31:56 +0000 (12:31 -0400)]
add get_size_from_delta()

... which consists of existing code split out of packed_delta_info()
for other callers to use it as well.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: make in_pack_header_size a variable of its own
Nicolas Pitre [Mon, 16 Apr 2007 16:31:31 +0000 (12:31 -0400)]
pack-objects: make in_pack_header_size a variable of its own

It currently aliases delta_size on the principle that reused deltas won't
go through the whole delta matching loop hence delta_size was unused.
This is not true if given delta doesn't find its base in the pack though.
But we need that information even for whole object data reuse.

Well in short the current state looks awful and is prone to bugs.  It just
works fine now because try_delta() tests trg_entry->delta before using
trg_entry->delta_size, but that is a bit subtle and I was wondering for a
while why things just worked fine... even if I'm guilty of having
introduced this abomination myself in the first place.

Let's do the sensible thing instead with no ambiguity, which is to have
a separate variable for in_pack_header_size.  This might even help future
optimizations.

While at it, let's reorder some struct object_entry members so they all
align well with their own width, regardless of the architecture or the
size of off_t.  Some memory saving is to be expected with this alone.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: get rid of create_final_object_list()
Nicolas Pitre [Mon, 16 Apr 2007 16:31:05 +0000 (12:31 -0400)]
pack-objects: get rid of create_final_object_list()

Because we don't have to know the SHA1 h(hence the name) of the pack
up front anymore, let's get rid of yet another global sorted object list
and sort them only in write_index_file(), then compute the object list
SHA1 on the fly.

This has the advantage of saving another chunk of memory, and the sorted
list SHA1 won't be computed needlessly on servers during a fetch.

Of course the cunning plan is also to make write_index_file() much like
the function with the same name in index-pack.c for an eventual easy
sharing.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: get rid of reuse_cached_pack
Nicolas Pitre [Mon, 16 Apr 2007 16:30:15 +0000 (12:30 -0400)]
pack-objects: get rid of reuse_cached_pack

This capability is practically never useful, and therefore never tested,
because it is fairly unlikely that the requested pack will be already
available.  Furthermore it is of little gain over the ability to reuse
existing pack data.

In fact the ability to change delta type on the fly when reusing delta
data is a nice thing that has almost no cost and allows greater backward
compatibility with a client's capabilities than if the client is blindly
sent a whole pack without any discrimination.

And this "feature" is simply in the way of other cleanups.
Let's get rid of it.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: clean up list sorting
Nicolas Pitre [Mon, 16 Apr 2007 16:29:54 +0000 (12:29 -0400)]
pack-objects: clean up list sorting

Get rid of sort_comparator() as it impose a run time double indirect
function call for little compile time type checking gain.

Also get rid of create_sorted_list() as it only has one user which would
as well be just fine doing its sorting locally.  Eventually the list of
deltifiable objects might be shorter than the whole object list.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: rework check_delta_limit usage
Nicolas Pitre [Mon, 16 Apr 2007 16:29:16 +0000 (12:29 -0400)]
pack-objects: rework check_delta_limit usage

Objects that have delta "children" from pack data reuse must consider the
depth of their deepest child when they try to deltify themselves for those
children not to become too deep.

However, in the context of a "thin" pack, the delta children depth was
skipped entirely on the presumption that the pack was always going to be
exploded on the receiving end, hence the delta length wasn't an issue.

Now that we keep received packs as is and reuse pack data when repacking,
those packs do contain delta chains that are longer than expected. Worse,
those delta chain may even grow longer when the pack is further repacked
into another thin pack for a subsequent transmission.

So this patch restores strict delta length even for thin packs, and it
moves check_delta_limit() usage directly in the delta loop where it is
needed.  This way the delta_limit can be removed from struct object_entry
as well.  Oh and the initial value was wrong too.

The  progress_interval() function was moved to a more logical location in
the process.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
17 years agopack-objects: equal objects in size should delta against newer objects
Nicolas Pitre [Mon, 16 Apr 2007 16:28:52 +0000 (12:28 -0400)]
pack-objects: equal objects in size should delta against newer objects

Before finding best delta combinations, we sort objects by name hash,
then by size, then by their position in memory.  Then we walk the list
backwards to test delta candidates.

We hope that a bigger size usually means a newer objects.  But a bigger
address in memory does not mean a newer object.  So the last comparison
must be reversed.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>