gitweb.git
Fix working directory errno handling when unlinking... 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>

Document 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>

Update '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>

Documentation: 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>

document --index-version for index-pack and pack-objectsNicolas 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>

pack-objects: remove obsolete commentsNicolas 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>

Update git-config documentationAndrew 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>

Fix unmatched emphasis tag in git-tutorialAndrew 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>

Update git-cherry-pick documentationAndrew 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>

Update git-archive documentationAndrew 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>

Merge 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

fix up strtoul_ui error handlingAndy 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>

Simplify 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>

Counto-fix in merge-recursiveJunio 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>

git-tar-tree: complete deprecation conversion messageSam 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>

Tests for core subproject supportAlex 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>

refs.c: add a function to sort a ref list, rather then... 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>

Merge 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

Fix funny types used in attribute value representationJunio 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>

git-shortlog: Fix two formatting errors in asciidoc... 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>

Fix overwriting of files when applying contextually... 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>

git-svn: don't allow globs to match regular filesEric 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>

Allow low-level driver to specify different behaviour... 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>

Custom low-level merge driver: change the configuration... 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>

Allow 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>

Custom 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>

Merge 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

Merge 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

Use const qualifier for 'sha1' parameter in delete_ref... 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>

Update draft release notes for 1.5.2 with accumulated... 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>

Merge 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

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

Start preparing for 1.5.1.2

Merge branch 'master' of git://repo.or.cz/git-guiJunio 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

Merge branch 'maint' of git://repo.or.cz/git-gui into... 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

Merge 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.

Add 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>

Allow 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>

git-gui: Honor TCLTK_PATH if suppliedJunio 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>

Revert "Allow wish interpreter to be defined with TCLTK... 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.

git-svn: quiet some warnings when run only with --versi... 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>

git-svn: respect lower bound of -r/--revision when... 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>

merge-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>

Allow 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>

Add --ignore-unmatch option to exit with zero status... 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>

Make sure quickfetch is not fooled with a previous... 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>

Clean up object creation to use more common codeLinus 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>

Use proper object allocators for unknown object nodes tooLinus 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>

Bisect: rename "t/t6030-bisect-run.sh" to "t/t6030... 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>

Bisect: 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>

pack-objects: better check_object() performancesNicolas 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>

add 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>

pack-objects: make in_pack_header_size a variable of... 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>

pack-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>

pack-objects: get rid of reuse_cached_packNicolas 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>

pack-objects: clean up list sortingNicolas 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>

pack-objects: rework check_delta_limit usageNicolas 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>

pack-objects: equal objects in size should delta agains... 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>

pack-objects: optimize preferred base handling a bitNicolas Pitre Mon, 16 Apr 2007 16:28:10 +0000 (12:28 -0400)

pack-objects: optimize preferred base handling a bit

Let's avoid some cycles when there is no base to test against, and avoid
unnecessary object lookups.

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

Merge branch 'js/wrap-log'Junio C Hamano Mon, 16 Apr 2007 23:53:29 +0000 (16:53 -0700)

Merge branch 'js/wrap-log'

* js/wrap-log:
Fix permissions on test scripts
Fix t4201: accidental arithmetic expansion
shortlog -w: make wrap-line behaviour optional.
Use print_wrapped_text() in shortlog

Fix permissions on test scriptsAlex Riesen Fri, 13 Apr 2007 20:13:51 +0000 (22:13 +0200)

Fix permissions on test scripts

Make every test executable. Remove exec-attribute from included shell files,
they can't used standalone anyway.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Fix t4201: accidental arithmetic expansionAlex Riesen Fri, 13 Apr 2007 20:13:10 +0000 (22:13 +0200)

Fix t4201: accidental arithmetic expansion

instead of embedded subshell. It actually breaks here (dash as /bin/sh):

t4201-shortlog.sh: 27: Syntax error: Missing '))'
FATAL: Unexpected exit with code 2

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

send-email: do not leave an empty CC: line if no cc... Junio C Hamano Mon, 16 Apr 2007 23:51:47 +0000 (16:51 -0700)

send-email: do not leave an empty CC: line if no cc is present.

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

Add support for "commit name decorations" to log family... Linus Torvalds Mon, 16 Apr 2007 23:05:10 +0000 (16:05 -0700)

Add support for "commit name decorations" to log family of commands

This adds "--decorate" as a log option, which prints out the ref names
of any commits that are shown.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Add a generic "object decorator" interface, and make... Linus Torvalds Mon, 16 Apr 2007 23:03:15 +0000 (16:03 -0700)

Add a generic "object decorator" interface, and make object refs use it

This allows you to add an arbitrary "decoration" of your choice to any
object. It's a space- and time-efficient way to add information to
arbitrary objects, especially if most objects probably do not have the
decoration.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint'Junio C Hamano Mon, 16 Apr 2007 09:54:18 +0000 (02:54 -0700)

Merge branch 'maint'

* maint:
Have sample update hook not refuse deleting a branch through push.
variable $projectdesc needs to be set before checking against unchanged default.
Update git-annotate/git-blame documentation
Update git-apply documentation
Update git-applymbox documentation
Update git-am documentation
user-manual: use detached head when rewriting history
user-manual: start revising "internals" chapter
user-manual: detached HEAD
user-manual: fix discussion of default clone
Documentation: clarify track/no-track option.
Documentation: clarify git-checkout -f, minor editing
Documentation: minor edits of git-lost-found manpage

Have sample update hook not refuse deleting a branch... Gerrit Pape Mon, 16 Apr 2007 08:31:35 +0000 (08:31 +0000)

Have sample update hook not refuse deleting a branch through push.

source ref might be 0000...0000 to delete a branch through git-push,
'git <remote> push :<branch>'. The update hook should not decline this.

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

variable $projectdesc needs to be set before checking... Gerrit Pape Mon, 16 Apr 2007 08:30:42 +0000 (08:30 +0000)

variable $projectdesc needs to be set before checking against unchanged default.

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-rm: Trivial fix for a comment typo.Steven Grimm Mon, 16 Apr 2007 08:17:32 +0000 (01:17 -0700)

git-rm: Trivial fix for a comment typo.

Signed-off-by: Steven Grimm <koreth@midwinter.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Update git-annotate/git-blame documentationAndrew Ruder Mon, 16 Apr 2007 06:20:34 +0000 (01:20 -0500)

Update git-annotate/git-blame documentation

Moved options that pertained to both git-blame and git-annotate to a
common file blame-options.txt.

builtin-blame.c: Removed --compatibility, --long, --time from the
short usage as they are not handled in the code.

Documentation/git-blame.txt: Removed common options to git-annotate.
Added documentation for --score-debug. Removed --compatibility.
Adjusted usage at top to not wrap on 80 columns.

Documentation/git-annotate.txt: Using common options blame-options.txt.

Documentation/blame-options.txt: Added -b note about associated config
option, added --root note about associated config option, added
documentation for --show-stats. Removed --long, --time, --rev-file as
those options do not really exist. Added documentation for -M/-C taking
an optional score argument for detection of moved lines.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Update git-apply documentationAndrew Ruder Mon, 16 Apr 2007 06:20:40 +0000 (01:20 -0500)

Update git-apply documentation

Document -v (short form of --verbose). Redo usage
to not wrap on 80 column terminal with typical
settings.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Update git-applymbox documentationAndrew Ruder Mon, 16 Apr 2007 06:40:06 +0000 (01:40 -0500)

Update git-applymbox documentation

Documentation/git-applymbox.txt: updating -u documentation to include
fact that it encodes to the i18n.commitencoding setting, not just utf-8.
Added documentation of -n option to pass -n to git-mailinfo.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Update git-am documentationAndrew Ruder Mon, 16 Apr 2007 07:21:31 +0000 (02:21 -0500)

Update git-am documentation

Documentation/git-am.txt missing several short versions
of options. Added documentation for --resolvemsg=<msg>
command-line option.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

user-manual: use detached head when rewriting historyJ. Bruce Fields Mon, 16 Apr 2007 04:37:16 +0000 (00:37 -0400)

user-manual: use detached head when rewriting history

This is slightly simpler if we use a detached head. And it's probably
good to have another example that uses this feature.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

user-manual: start revising "internals" chapterJ. Bruce Fields Mon, 16 Apr 2007 04:37:15 +0000 (00:37 -0400)

user-manual: start revising "internals" chapter

Minor revisions, cross-references.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

user-manual: detached HEADJ. Bruce Fields Mon, 16 Apr 2007 04:37:14 +0000 (00:37 -0400)

user-manual: detached HEAD

Add a brief mention of detached HEADs and .git/HEAD.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

user-manual: fix discussion of default cloneJ. Bruce Fields Mon, 16 Apr 2007 04:37:13 +0000 (00:37 -0400)

user-manual: fix discussion of default clone

The name "master" isn't actually quite so special. Also, fix some bad
grammar.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: clarify track/no-track option.J. Bruce Fields Mon, 16 Apr 2007 04:37:12 +0000 (00:37 -0400)

Documentation: clarify track/no-track option.

Fix the description of the --no-track option so it no longer says the
opposite of what was intended. Also mention branch.autosetupmerge
explicitly.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: clarify git-checkout -f, minor editingJ. Bruce Fields Mon, 16 Apr 2007 04:37:11 +0000 (00:37 -0400)

Documentation: clarify git-checkout -f, minor editing

"Force a re-read of everything" doesn't mean much to me.

Also some minor grammar fixes.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Documentation: minor edits of git-lost-found manpageJ. Bruce Fields Mon, 16 Apr 2007 04:37:10 +0000 (00:37 -0400)

Documentation: minor edits of git-lost-found manpage

Minor improvements to grammar and clarity of lost-found manpage.

Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Add --quiet option to suppress output of "rm" commands... Steven Grimm Mon, 16 Apr 2007 07:46:48 +0000 (00:46 -0700)

Add --quiet option to suppress output of "rm" commands for removed files.

Signed-off-by: Steven Grimm <koreth@midwinter.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Display the subject of the commit just made.Michael S. Tsirkin Mon, 16 Apr 2007 05:51:11 +0000 (08:51 +0300)

Display the subject of the commit just made.

Useful e.g. to figure out what I did from screen history,
or to make sure subject line is short enough and makes sense
on its own.

Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Add policy on user-interface changesAndrew Ruder Mon, 16 Apr 2007 05:35:25 +0000 (00:35 -0500)

Add policy on user-interface changes

Documentation/SubmittingPatches: Add note that all user interface changes
should include associated documentation updates.

Signed-off-by: Andrew Ruder <andy@aeruder.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge branch 'maint'Junio C Hamano Mon, 16 Apr 2007 00:52:07 +0000 (17:52 -0700)

Merge branch 'maint'

* maint:
Document -g (--walk-reflogs) option of git-log
sscanf/strtoul: parse integers robustly
git-blame: Fix overrun in fake_working_tree_commit()
[PATCH] Improve look-and-feel of the gitk tool.
[PATCH] Teach gitk to use the user-defined UI font everywhere.

Document -g (--walk-reflogs) option of git-logAlex Riesen Sun, 15 Apr 2007 22:36:06 +0000 (00:36 +0200)

Document -g (--walk-reflogs) option of git-log

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Document git-check-attrJames Bowes Sun, 15 Apr 2007 01:27:20 +0000 (21:27 -0400)

Document git-check-attr

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>

ident.c: Use size_t (instead of int) to store sizesLuiz Fernando N. Capitulino Sun, 15 Apr 2007 18:51:29 +0000 (15:51 -0300)

ident.c: Use size_t (instead of int) to store sizes

Signed-off-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>
Signed-off-by: Junio C Hamano <junkio@cox.net>

ident.c: Use const qualifier for 'struct passwd' parametersLuiz Fernando N. Capitulino Sun, 15 Apr 2007 21:40:31 +0000 (18:40 -0300)

ident.c: Use const qualifier for 'struct passwd' parameters

Signed-off-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Change attribute negation marker from '!' to '-'.Junio C Hamano Sun, 15 Apr 2007 21:56:09 +0000 (14:56 -0700)

Change attribute negation marker from '!' to '-'.

At the same time, we do not want to allow arbitrary strings for
attribute names, as we are likely to want to extend the syntax
later. Allow only alnum, dash, underscore and dot for now.

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

Define a built-in attribute macro "binary".Junio C Hamano Sat, 14 Apr 2007 15:56:35 +0000 (08:56 -0700)

Define a built-in attribute macro "binary".

For binary files we would want to disable textual diff
generation and automatic crlf conversion.

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

attribute macro supportJunio C Hamano Sat, 14 Apr 2007 15:54:37 +0000 (08:54 -0700)

attribute macro support

This adds "attribute macros" (for lack of better name). So far,
we have low-level attributes such as crlf and diff, which are
defined in operational terms --- setting or unsetting them on a
particular path directly affects what is done to the path. For
example, in order to decline diffs or crlf conversions on a
binary blob, no diffs on PostScript files, and treat all other
files normally, you would have something like these:

* diff crlf
*.ps !diff
proprietary.o !diff !crlf

That is fine as the operation goes, but gets unwieldy rather
rapidly, when we start adding more low-level attributes that are
defined in operational terms. A near-term example of such an
attribute would be 'merge-3way' which would control if git
should attempt the usual 3-way file-level merge internally, or
leave merging to a specialized external program of user's
choice. When it is added, we do _not_ want to force the users
to update the above to:

* diff crlf merge-3way
*.ps !diff
proprietary.o !diff !crlf !merge-3way

The way this patch solves this issue is to realize that the
attributes the user is assigning to paths are not defined in
terms of operations but in terms of what they are.

All of the three low-level attributes usually make sense for
most of the files that sane SCM users have git operate on (these
files are typically called "text'). Only a few cases, such as
binary blob, need exception to decline the "usual treatment
given to text files" -- and people mark them as "binary".

So this allows the $GIT_DIR/info/alternates and .gitattributes
at the toplevel of the project to also specify attributes that
assigns other attributes. The syntax is '[attr]' followed by an
attribute name followed by a list of attribute names:

[attr] binary !diff !crlf !merge-3way

When "binary" attribute is set to a path, if the path has not
got diff/crlf/merge-3way attribute set or unset by other rules,
this rule unsets the three low-level attributes.

It is expected that the user level .gitattributes will be
expressed mostly in terms of attributes based on what the files
are, and the above sample would become like this:

(built-in attribute configuration)
[attr] binary !diff !crlf !merge-3way
* diff crlf merge-3way

(project specific .gitattributes)
proprietary.o binary

(user preference $GIT_DIR/info/attributes)
*.ps !diff

There are a few caveats.

* As described above, you can define these macros only in
$GIT_DIR/info/attributes and toplevel .gitattributes.

* There is no attempt to detect circular definition of macro
attributes, and definitions are evaluated from bottom to top
as usual to fill in other attributes that have not yet got
values. The following would work as expected:

[attr] text diff crlf
[attr] ps text !diff
*.ps ps

while this would most likely not (I haven't tried):

[attr] ps text !diff
[attr] text diff crlf
*.ps ps

* When a macro says "[attr] A B !C", saying that a path does
not have attribute A does not let you tell anything about
attributes B or C. That is, given this:

[attr] text diff crlf
[attr] ps text !diff
*.txt !ps

path hello.txt, which would match "*.txt" pattern, would have
"ps" attribute set to zero, but that does not make text
attribute of hello.txt set to false (nor diff attribute set to
true).

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

Makefile: add patch-ids.h back in.Junio C Hamano Sun, 15 Apr 2007 20:39:32 +0000 (13:39 -0700)

Makefile: add patch-ids.h back in.

I lost it by mistake while shuffling the gitattributes series which
originally was on top of the subproject topic onto the master branch.

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

Fix 'diff' attribute semantics.Junio C Hamano Sun, 15 Apr 2007 21:35:11 +0000 (14:35 -0700)

Fix 'diff' attribute semantics.

This is in the same spirit as the previous one. Earlier 'diff'
meant 'do the built-in binary heuristics and disable patch text
generation based on it' while '!diff' meant 'do not guess, do
not generate patch text'. There was no way to say 'do generate
patch text even when the heuristics says it has NUL in it'.

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

Fix 'crlf' attribute semantics.Junio C Hamano Sun, 15 Apr 2007 20:35:45 +0000 (13:35 -0700)

Fix 'crlf' attribute semantics.

Earlier we said 'crlf lets the path go through core.autocrlf
process while !crlf disables it altogether'. This fixes the
semantics to:

- Lack of 'crlf' attribute makes core.autocrlf to apply
(i.e. we guess based on the contents and if platform
expresses its desire to have CRLF line endings via
core.autocrlf, we do so).

- Setting 'crlf' attribute to true forces CRLF line endings in
working tree files, even if blob does not look like text
(e.g. contains NUL or other bytes we consider binary).

- Setting 'crlf' attribute to false disables conversion.

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

Expose subprojects as special files to "git diff" machineryLinus Torvalds Sun, 15 Apr 2007 18:14:28 +0000 (11:14 -0700)

Expose subprojects as special files to "git diff" machinery

The same way we generate diffs on symlinks as the the diff of text of the
symlink, we can generate subproject diffs (when not recursing into them!)
as the diff of the text that describes the subproject.

Of course, since what descibes a subproject is just the SHA1, that's what
we'll use. Add some pretty-printing to make it a bit more obvious what is
going on, and we're done.

So with this, we can get both raw diffs and "textual" diffs of subproject
changes:

- git diff --raw:

:160000 160000 2de597b5ad348b7db04bd10cdd38cd81cbc93ab5 0000000... M sub-A

- git diff:

diff --git a/sub-A b/sub-A
index 2de597b..e8f11a4 160000
--- a/sub-A
+++ b/sub-A
@@ -1 +1 @@
-Subproject commit 2de597b5ad348b7db04bd10cdd38cd81cbc93ab5
+Subproject commit e8f11a45c5c6b9e2fec6d136d3fb5aff75393d42

NOTE! We'll also want to have the ability to recurse into the subproject
and actually diff it recursively, but that will involve a new command line
option (I'd suggest "--subproject" and "-S", but the latter is in use by
pickaxe), and some very different code.

But regardless of ay future recursive behaviour, we need the non-recursive
version too (and it should be the default, at least in the absense of
config options, so that large superprojects don't default to something
extremely expensive).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-gui: Display the directory basename in the titleShawn O. Pearce Sat, 14 Apr 2007 19:10:48 +0000 (15:10 -0400)

git-gui: Display the directory basename in the title

By showing the basename of the directory very early in the
title bar I can more easily locate a particular git-gui
session when I have 8 open at once and my Windows taskbar
is overflowing with items.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Merge branch 'er/ui'Shawn O. Pearce Sun, 15 Apr 2007 04:34:28 +0000 (00:34 -0400)

Merge branch 'er/ui'

* er/ui:
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

sscanf/strtoul: parse integers robustlyJim Meyering Mon, 9 Apr 2007 23:01:44 +0000 (01:01 +0200)

sscanf/strtoul: parse integers robustly

* builtin-grep.c (strtoul_ui): Move function definition from here, to...
* git-compat-util.h (strtoul_ui): ...here, with an added "base" parameter.
* builtin-grep.c (cmd_grep): Update use of strtoul_ui to include base, "10".
* builtin-update-index.c (read_index_info): Diagnose an invalid mode integer
that is out of range or merely larger than INT_MAX.
(cmd_update_index): Use strtoul_ui, not sscanf.
* convert-objects.c (write_subdirectory): Likewise.

Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>

Merge git://git2./pub/scm/gitk/gitk into maintJunio C Hamano Sun, 15 Apr 2007 02:45:16 +0000 (19:45 -0700)

Merge git://git2./pub/scm/gitk/gitk into maint

* git://git2.kernel.org/pub/scm/gitk/gitk:
[PATCH] Improve look-and-feel of the gitk tool.
[PATCH] Teach gitk to use the user-defined UI font everywhere.

Fix some "git ls-files -o" fallout from gitlinksLinus Torvalds Sat, 14 Apr 2007 23:22:08 +0000 (16:22 -0700)

Fix some "git ls-files -o" fallout from gitlinks

Since "git ls-files" doesn't really pass down any details on what it
really wants done to the directory walking code, the directory walking
code doesn't really know whether the caller wants to know about gitlink
directories, or whether it wants to just know about ignored files.

So the directory walking code will return those gitlink directories unless
the caller has explicitly told it not to ("dir->show_other_directories"
tells the directory walker to only show "other" directories).

This kind of confuses "git ls-files -o", because
- it didn't really expect to see entries listed that were already in the
index, unless they were unmerged, and would die on that unexpected
setup, rather than just "continue".
- it didn't know how to match directory entries with the final "/"

This trivial change updates the "show_other_files()" function to handle
both of these issues gracefully. There really was no reason to die, when
the obviously correct thing for the function was to just ignore files it
already knew about (that's what "other" means here!).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>

git-blame: Fix overrun in fake_working_tree_commit()Michael Spang Sat, 14 Apr 2007 21:26:20 +0000 (17:26 -0400)

git-blame: Fix overrun in fake_working_tree_commit()

git-blame would overflow commit->buffer when annotating files with long paths.

Signed-off-by: Michael Spang <mspang@uwaterloo.ca>
Signed-off-by: Junio C Hamano <junkio@cox.net>