gitweb.git
Merge branch 'mz/rebase-no-mbox'Junio C Hamano Fri, 13 Jul 2012 22:36:31 +0000 (15:36 -0700)

Merge branch 'mz/rebase-no-mbox'

Teach "am --rebasing" codepath to grab authorship, log message and
the patch text directly out of existing commits. This will help
rebasing commits that have confusing "diff" output in their log
messages.

* mz/rebase-no-mbox:
am: don't call mailinfo if $rebasing
am --rebasing: get patch body from commit, not from mailbox
rebase --root: print usage on too many args
rebase: don't source git-sh-setup twice

revision: avoid work after --max-count is reachedJeff King Fri, 13 Jul 2012 07:50:23 +0000 (03:50 -0400)

revision: avoid work after --max-count is reached

During a revision traversal in which --max-count has been
specified, we decrement a counter for each revision returned
by get_revision. When it hits 0, we typically return NULL
(the exception being if we still have boundary commits to
show).

However, before we check the counter, we call get_revision_1
to get the next commit. This might involve looking at a
large number of commits if we have restricted the traversal
(e.g., we might traverse until we find the next commit whose
diff actually matches a pathspec).

There's no need to make this get_revision_1 call when our
counter runs out. If we are not in --boundary mode, we will
just throw away the result and immediately return NULL. If
we are in --boundary mode, then we will still throw away the
result, and then start showing the boundary commits.
However, as git_revision_1 does not impact the boundary
list, it should not have an impact.

In most cases, avoiding this work will not be especially
noticeable. However, in some cases, it can make a big
difference:

[before]
$ time git rev-list -1 origin Documentation/RelNotes/1.7.11.2.txt
8d141a1d562abb31f27f599dbf6e10a6c06ed73e

real 0m0.301s
user 0m0.280s
sys 0m0.016s

[after]
$ time git rev-list -1 origin Documentation/RelNotes/1.7.11.2.txt
8d141a1d562abb31f27f599dbf6e10a6c06ed73e

real 0m0.010s
user 0m0.008s
sys 0m0.000s

Note that the output is produced almost instantaneously in
the first case, and then git uselessly spends a long time
looking for the next commit to touch that file (but there
isn't one, and we traverse all the way down to the roots).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1512: match the "other" object namesJunio C Hamano Fri, 13 Jul 2012 19:43:43 +0000 (12:43 -0700)

t1512: match the "other" object names

The test creates 16 objects that share the same prefix, and two other
objects that do not. Tweak the test so that the other two share the
same prefix that is different from the one that is shared by the 16.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

git p4: add support for 'p4 move' in P4SubmitGary Gibbons Thu, 12 Jul 2012 23:29:00 +0000 (19:29 -0400)

git p4: add support for 'p4 move' in P4Submit

For -M option (detectRenames) in P4Submit, use 'p4 move' rather
than 'p4 integrate'. Check Perforce server for exisitence of
'p4 move' and use it if present, otherwise revert to 'p4 integrate'.

[pw: wildcard-encode src/dest, add/update tests, tweak code]

Signed-off-by: Gary Gibbons <ggibbons@perforce.com>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t7003: add test to filter a branch with a commit at... Junio C Hamano Thu, 12 Jul 2012 20:51:37 +0000 (13:51 -0700)

t7003: add test to filter a branch with a commit at epoch

Running filter-branch on a history that has a commit with timestamp
at epoch used to fail, but it should have been fixed. Add test to
make sure it won't break again.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

date.c: Fix off by one error in object-header date... Junio C Hamano Thu, 12 Jul 2012 20:46:49 +0000 (13:46 -0700)

date.c: Fix off by one error in object-header date parsing

It is perfectly OK for a valid decimal integer to begin with '9' but
116eb3a (parse_date(): allow ancient git-timestamp, 2012-02-02) did
not express the range correctly.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

submodules: don't stumble over symbolic links when... Jens Lehmann Thu, 12 Jul 2012 17:45:32 +0000 (19:45 +0200)

submodules: don't stumble over symbolic links when cloning recursively

Since 69c3051 (submodules: refactor computation of relative gitdir path)
cloning a submodule recursively fails for nested submodules when a
symbolic link is part of the path to the work tree of the superproject.

This happens when module_clone() tries to find the relative paths between
the work tree and the git dir. When a symbolic link in current $PWD points
to a directory that is at a different level, then determining the number
of "../" needed to traverse to the superproject's work tree leads to a
wrong result.

As there is no portable way to say "pwd -P", use cd_to_toplevel to remove
the link from $PWD, which fixes this problem.

A test for this issue has been added to t7406.

Reported-by: Bob Halley <halley@play-bow.org>
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t1512: ignore whitespaces in wc -l outputJunio C Hamano Wed, 11 Jul 2012 23:30:28 +0000 (16:30 -0700)

t1512: ignore whitespaces in wc -l output

Some implementations of sed (e.g. MacOS X) have whitespaces in the
output of "wc -l" that reads from the standard input. Ignore these
whitespaces by not quoting the command substitution to be compared
with the constant "16".

Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4012: Unquote git command fragment in test titleAlexander Strasser Wed, 11 Jul 2012 22:12:21 +0000 (00:12 +0200)

t4012: Unquote git command fragment in test title

The command fragments are quoted nowhere else in title texts of
this file, thus make this one consistent with all other titles.

Signed-off-by: Alexander Strasser <eclipse7@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t4012: modernize style for quotingAlexander Strasser Wed, 11 Jul 2012 22:12:03 +0000 (00:12 +0200)

t4012: modernize style for quoting

This quoting style is used by all newly added test code.

Signed-off-by: Alexander Strasser <eclipse7@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Reduce draft release notes to 1.7.12Junio C Hamano Wed, 11 Jul 2012 20:48:57 +0000 (13:48 -0700)

Reduce draft release notes to 1.7.12

Many "fixes since 1.7.11" items are now in the maintenance track

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sync with 1.7.11.2Junio C Hamano Wed, 11 Jul 2012 20:00:51 +0000 (13:00 -0700)

Sync with 1.7.11.2

Git 1.7.11.2 v1.7.11.2Junio C Hamano Wed, 11 Jul 2012 19:55:38 +0000 (12:55 -0700)

Git 1.7.11.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'jc/maint-blame-unique-abbrev' into maintJunio C Hamano Wed, 11 Jul 2012 19:58:28 +0000 (12:58 -0700)

Merge branch 'jc/maint-blame-unique-abbrev' into maint

"git blame" did not try to make sure that the abbreviated commit
object names in its output are unique.

* jc/maint-blame-unique-abbrev:
blame: compute abbreviation width that ensures uniqueness

Merge branch 'rj/platform-pread-may-be-thread-unsafe... Junio C Hamano Wed, 11 Jul 2012 19:57:28 +0000 (12:57 -0700)

Merge branch 'rj/platform-pread-may-be-thread-unsafe' into maint

On Cygwin, the platform pread(2) is not thread safe, just like our own
compat/ emulation, and cannot be used in the index-pack program.
Makefile variable NO_THREAD_SAFE_PREAD can be defined to avoid use of
this function in a threaded program.

* rj/platform-pread-may-be-thread-unsafe:
index-pack: Disable threading on cygwin

Merge branch 'th/diff-no-index-fixes' into maintJunio C Hamano Wed, 11 Jul 2012 19:48:44 +0000 (12:48 -0700)

Merge branch 'th/diff-no-index-fixes' into maint

"git diff --no-index" did not correctly handle relative paths and
did not correctly give exit codes when run under "--quiet" option.

* th/diff-no-index-fixes:
diff-no-index: exit(1) if 'diff --quiet <repo file> <external file>' finds changes
diff: handle relative paths in no-index

Merge branch 'nd/clone-single-fix' into maintJunio C Hamano Wed, 11 Jul 2012 19:48:29 +0000 (12:48 -0700)

Merge branch 'nd/clone-single-fix' into maint

"git clone --single-branch" to clone a single branch did not limit
the cloning to the specified branch.

* nd/clone-single-fix:
clone: fix ref selection in --single-branch --branch=xxx

Merge branch 'jc/rev-list-simplify-merges-first-parent... Junio C Hamano Wed, 11 Jul 2012 19:46:57 +0000 (12:46 -0700)

Merge branch 'jc/rev-list-simplify-merges-first-parent' into maint

When "git log" gets "--simplify-merges/by-decoration" together with
"--first-parent", the combination of these options makes the
simplification logic to use in-core commit objects that haven't been
examined for relevance, either producing incorrect result or taking
too long to produce any output. Teach the simplification logic to
ignore commits that the first-parent traversal logic ignored when
both are in effect to work around the issue.

* jc/rev-list-simplify-merges-first-parent:
revision: ignore side parents while running simplify-merges
revision: note the lack of free() in simplify_merges()
revision: "simplify" options imply topo-order sort

Merge branch 'hv/submodule-update-nuke-submodules'... Junio C Hamano Wed, 11 Jul 2012 19:46:31 +0000 (12:46 -0700)

Merge branch 'hv/submodule-update-nuke-submodules' into maint

"git add" allows adding a regular file to the path where a submodule
used to exist, but "git update-index" did not allow an equivalent
operation to Porcelain writers.

* hv/submodule-update-nuke-submodules:
update-index: allow overwriting existing submodule index entries

Merge branch 'jk/diff-no-index-pager' into maintJunio C Hamano Wed, 11 Jul 2012 19:46:21 +0000 (12:46 -0700)

Merge branch 'jk/diff-no-index-pager' into maint

"git diff --no-index" did not work with pagers correctly.

* jk/diff-no-index-pager:
do not run pager with diff --no-index --quiet
fix pager.diff with diff --no-index

Merge branch 'mm/verify-filename-fix' into maintJunio C Hamano Wed, 11 Jul 2012 19:45:49 +0000 (12:45 -0700)

Merge branch 'mm/verify-filename-fix' into maint

"git diff COPYING HEAD:COPYING" gave a nonsense error message that
claimed that the treeish HEAD did not have COPYING in it.

* mm/verify-filename-fix:
verify_filename(): ask the caller to chose the kind of diagnosis
sha1_name: do not trigger detailed diagnosis for file arguments

Merge branch 'cn/cherry-pick-range-docs' into maintJunio C Hamano Wed, 11 Jul 2012 19:45:34 +0000 (12:45 -0700)

Merge branch 'cn/cherry-pick-range-docs' into maint

The documentation for "git cherry-pick A B..C" was misleading.

* cn/cherry-pick-range-docs:
git-cherry-pick.txt: clarify the use of revision range notation
Documentation: --no-walk is no-op if range is specified

Merge branch 'jc/ustar-checksum-is-unsigned' into maintJunio C Hamano Wed, 11 Jul 2012 19:45:07 +0000 (12:45 -0700)

Merge branch 'jc/ustar-checksum-is-unsigned' into maint

"git archive" incorrectly computed the header checksum; the symptom
was observed only when using pathnames with hi-bit set.

* jc/ustar-checksum-is-unsigned:
archive: ustar header checksum is computed unsigned

Merge branch 'jc/bundle-complete-notice' into maintJunio C Hamano Wed, 11 Jul 2012 19:44:50 +0000 (12:44 -0700)

Merge branch 'jc/bundle-complete-notice' into maint

Running "git bundle verify" on a bundle that records a complete
history said "it requires these 0 commits".

* jc/bundle-complete-notice:
tweak "bundle verify" of a complete history

Merge branch 'jc/ls-files-i-dir' into maintJunio C Hamano Wed, 11 Jul 2012 19:44:34 +0000 (12:44 -0700)

Merge branch 'jc/ls-files-i-dir' into maint

"git ls-files --exclude=t -i" did not consider anything under t/ as
excluded, as it did not pay attention to exclusion of leading paths
while walking the index. Other two users of excluded() are also
updated.

* jc/ls-files-i-dir:
dir.c: make excluded() file scope static
unpack-trees.c: use path_excluded() in check_ok_to_remove()
builtin/add.c: use path_excluded()
path_excluded(): update API to less cache-entry centric
ls-files -i: micro-optimize path_excluded()
ls-files -i: pay attention to exclusion of leading paths

Merge branch 'jc/request-pull-match-tagname' into maintJunio C Hamano Wed, 11 Jul 2012 19:43:58 +0000 (12:43 -0700)

Merge branch 'jc/request-pull-match-tagname' into maint

"git request-pull $url dev" when the tip of "dev" branch was tagged
with "ext4-for-linus" used the contents from the tag in the output
but still asked the "dev" branch to be pulled, not the tag.

* jc/request-pull-match-tagname:
request-pull: really favor a matching tag

Strip namelen out of ce_flags into a ce_namelen fieldThomas Gummerer Wed, 11 Jul 2012 09:22:37 +0000 (11:22 +0200)

Strip namelen out of ce_flags into a ce_namelen field

Strip the name length from the ce_flags field and move it
into its own ce_namelen field in struct cache_entry. This
will both give us a tiny bit of a performance enhancement
when working with long pathnames and is a refactoring for
more readability of the code.

It enhances readability, by making it more clear what
is a flag, and where the length is stored and make it clear
which functions use stages in comparisions and which only
use the length.

It also makes CE_NAMEMASK private, so that users don't
mistakenly write the name length in the flags.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'tg/maint-cache-name-compare' into tg... Junio C Hamano Wed, 11 Jul 2012 16:40:25 +0000 (09:40 -0700)

Merge branch 'tg/maint-cache-name-compare' into tg/ce-namelen-field

* tg/maint-cache-name-compare:
cache_name_compare(): do not truncate while comparing paths

cache_name_compare(): do not truncate while comparing... Junio C Hamano Wed, 11 Jul 2012 16:08:28 +0000 (09:08 -0700)

cache_name_compare(): do not truncate while comparing paths

We failed to use ce_namelen() equivalent and instead only compared
up to the CE_NAMEMASK bytes by mistake. Adding an overlong path
that shares the same common prefix as an existing entry in the index
did not add a new entry, but instead replaced the existing one, as
the result.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

index-pack: loop while inflating objects in unpack_dataJeff King Wed, 4 Jul 2012 07:12:14 +0000 (03:12 -0400)

index-pack: loop while inflating objects in unpack_data

When the unpack_data function is given a consume() callback,
it unpacks only 64K of the input at a time, feeding it to
git_inflate along with a 64K output buffer. However,
because we are inflating, there is a good chance that the
output buffer will fill before consuming all of the input.
In this case, we need to loop on git_inflate until we have
fed the whole input buffer, feeding each chunk of output to
the consume buffer.

The current code does not do this, and as a result, will
fail the loop condition and trigger a fatal "serious inflate
inconsistency" error in this case.

While we're rearranging the loop, let's get rid of the
extra last_out pointer. It is meant to point to the
beginning of the buffer that we feed to git_inflate, but in
practice this is always the beginning of our same 64K
buffer, because:

1. At the beginning of the loop, we are feeding the
buffer.

2. At the end of the loop, if we are using a consume()
function, we reset git_inflate's pointer to the
beginning of the buffer. If we are not using a
consume() function, then we do not care about the value
of last_out at all.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit: fix "--amend --only" with no pathspecJeff King Tue, 10 Jul 2012 20:40:29 +0000 (16:40 -0400)

commit: fix "--amend --only" with no pathspec

When we do not have any pathspec, we typically disallow an
explicit "--only", because it makes no sense (your commit
would, by definition, be empty). But since 6a74642
(git-commit --amend: two fixes., 2006-04-20), we have
allowed "--amend --only" with the intent that it would amend
the commit, ignoring any contents staged in the index.

However, while that commit allowed the combination, we never
actually implemented the logic to make it work. The current
code notices that we have no pathspec and assumes we want to
do an as-is commit (i.e., the "--only" is ignored).

Instead, we must make sure to follow the partial-commit
code-path. We also need to tweak the list_paths function to
handle a NULL pathspec.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: tests for the --3way optionJunio C Hamano Wed, 13 Jun 2012 05:57:57 +0000 (22:57 -0700)

apply: tests for the --3way option

Signed-off-by: Junio C Hamano <gitster@pobox.com>

add: create ADD_EDIT.patch with mode 0666Jeff King Tue, 10 Jul 2012 06:37:22 +0000 (02:37 -0400)

add: create ADD_EDIT.patch with mode 0666

We should be letting the user's umask take care of
restricting permissions. Even though this is a temporary
file and probably nobody would notice, this brings us in
line with other temporary file creations in git (e.g.,
choosing "e"dit from git-add--interactive).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

filter-branch: do not forget the '@' prefix to force... Junio C Hamano Mon, 9 Jul 2012 23:53:34 +0000 (16:53 -0700)

filter-branch: do not forget the '@' prefix to force git-timestamp

For some reason, this script reinvents, instead of refactoring the
existing one in git-sh-setup, the logic to grab ident information
from an existing commit; it was missed when the corresponding logic
in git-sh-setup was updated with 2c733fb (parse_date(): '@' prefix
forces git-timestamp, 2012-02-02).

Teach the script that it is OK to have a way ancient timestamp in
the commits that are being filtered.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse --disambiguate=<prefix>Junio C Hamano Tue, 3 Jul 2012 21:21:59 +0000 (14:21 -0700)

rev-parse --disambiguate=<prefix>

The new option allows you to feed an ambiguous prefix and enumerate
all the objects that share it as a prefix of their object names.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

rev-parse: A and B in "rev-parse A..B" refer to committishJunio C Hamano Tue, 3 Jul 2012 20:45:12 +0000 (13:45 -0700)

rev-parse: A and B in "rev-parse A..B" refer to committish

Signed-off-by: Junio C Hamano <gitster@pobox.com>

reset: the command takes committishJunio C Hamano Tue, 3 Jul 2012 17:04:22 +0000 (10:04 -0700)

reset: the command takes committish

This is not strictly correct, in that resetting selected index
entries from corresponding paths out of a given tree without moving
HEAD is a valid operation, and in such case a tree-ish would suffice.

But the existing code already requires a committish in the codepath,
so let's be consistent with it for now.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

commit-tree: the command wants a tree and commitsJunio C Hamano Tue, 3 Jul 2012 17:03:38 +0000 (10:03 -0700)

commit-tree: the command wants a tree and commits

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: --build-fake-ancestor expects blobsJunio C Hamano Tue, 3 Jul 2012 17:01:22 +0000 (10:01 -0700)

apply: --build-fake-ancestor expects blobs

The "index" line read from the patch to reconstruct a partial
preimage tree records the object names of blob objects.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: add support for disambiguating other typesJunio C Hamano Tue, 3 Jul 2012 06:35:05 +0000 (23:35 -0700)

sha1_name.c: add support for disambiguating other types

This teaches the revision parser that in "$name:$path" (used for a
blob object name), "$name" must be a tree-ish.

There are many more places where we know what types of objects are
called for. This patch adds support for "commit", "treeish", "tree",
and "blob", which could be used in the following contexts:

- "git apply --build-fake-ancestor" reads the "index" lines from
the patch; they must name blob objects (not even "blob-ish");

- "git commit-tree" reads a tree object name (not "tree-ish"), and
zero or more commit object names (not "committish");

- "git reset $rev" wants a committish; "git reset $rev -- $path"
wants a treeish.

They will come in later patches in the series.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision.c: the "log" family, except for "show", takes... Junio C Hamano Mon, 2 Jul 2012 19:43:05 +0000 (12:43 -0700)

revision.c: the "log" family, except for "show", takes committish

Add a field to setup_revision_opt structure and allow these callers
to tell the setup_revisions command parsing machinery that short SHA1
it encounters are meant to name committish.

This step does not go all the way to connect the setup_revisions()
to sha1_name.c yet.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

revision.c: allow handle_revision_arg() to take other... Junio C Hamano Mon, 2 Jul 2012 19:33:52 +0000 (12:33 -0700)

revision.c: allow handle_revision_arg() to take other flags

The existing "cant_be_filename" that tells the function that the
caller knows the arg is not a path (hence it does not have to be
checked for absense of the file whose name matches it) is made into
a bit in the flag word.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: introduce get_sha1_committish()Junio C Hamano Mon, 2 Jul 2012 19:04:52 +0000 (12:04 -0700)

sha1_name.c: introduce get_sha1_committish()

Many callers know that the user meant to name a committish by
syntactical positions where the object name appears. Calling this
function allows the machinery to disambiguate shorter-than-unique
abbreviated object names between committish and others.

Note that this does NOT error out when the named object is not a
committish. It is merely to give a hint to the disambiguation
machinery.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: teach lookup context to get_sha1_with_cont... Junio C Hamano Mon, 2 Jul 2012 17:32:11 +0000 (10:32 -0700)

sha1_name.c: teach lookup context to get_sha1_with_context()

The function takes user input string and returns the object name
(binary SHA-1) with mode bits and path when the object was looked
up in a tree.

Additionally give hints to help disambiguation of abbreviated object
names when the caller knows what it is looking for.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: many short names can only be committishJunio C Hamano Mon, 2 Jul 2012 17:00:40 +0000 (10:00 -0700)

sha1_name.c: many short names can only be committish

We know that the token "$name" that appear in "$name^{commit}",
"$name^4", "$name~4" etc. can only name a committish (either a
commit or a tag that peels to a commit). Teach get_short_sha1() to
take advantage of that knowledge when disambiguating an abbreviated
SHA-1 given as an object name.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: get_sha1_1() takes lookup flagsJunio C Hamano Mon, 2 Jul 2012 16:46:50 +0000 (09:46 -0700)

sha1_name.c: get_sha1_1() takes lookup flags

This is to pass the disambiguation hints from the caller down the
callchain. Nothing is changed in this step, as everybody just
passes 0 in the flag.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

sha1_name.c: get_describe_name() by definition groks... Junio C Hamano Mon, 18 Jun 2012 20:45:56 +0000 (13:45 -0700)

sha1_name.c: get_describe_name() by definition groks only commits

Teach get_describe_name() to pass the disambiguation hint down the
callchain to get_short_sha1().

Also add tests to show various syntactic elements that we could take
advantage of the object type information to help disambiguration of
abbreviated object names. Many of them are marked as broken, and
some of them will be fixed in later patches in this series.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

rerere: make rr-cache fanout directory honor umaskJunio C Hamano Mon, 9 Jul 2012 23:27:49 +0000 (16:27 -0700)

rerere: make rr-cache fanout directory honor umask

This is the last remaining call to mkdir(2) that restricts the permission
bits by passing 0755. Just use the same mkdir_in_gitdir() used to create
the leaf directories.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: document --3way optionJunio C Hamano Thu, 10 May 2012 21:08:29 +0000 (14:08 -0700)

apply: document --3way option

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: allow rerere() to work on --3way resultsJunio C Hamano Thu, 10 May 2012 20:56:49 +0000 (13:56 -0700)

apply: allow rerere() to work on --3way results

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: register conflicted stages to the indexJunio C Hamano Wed, 9 May 2012 23:50:58 +0000 (16:50 -0700)

apply: register conflicted stages to the index

Now we have all the necessary logic to fall back on three-way merge when
the patch does not cleanly apply, insert the conflicted entries to the
index as appropriate. This obviously triggers only when the "--index"
option is used.

When we fall back to three-way merge and some of the merges fail, just
like the case where the "--reject" option was specified and we had to
write some "*.rej" files out for unapplicable patches, exit the command
with non-zero status without showing the diffstat and summary. Otherwise
they would make the list of problematic paths scroll off the display.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: --3way with add/add conflictJunio C Hamano Thu, 7 Jun 2012 22:04:11 +0000 (15:04 -0700)

apply: --3way with add/add conflict

When a patch wants to create a path, but we already have it in our
current state, pretend as if the patch and we independently added
the same path and cause add/add conflict, so that the user can
resolve it just like "git merge" in the same situation.

For that purpose, implement load_current() in terms of the
load_patch_target() helper introduced earlier to read the current
contents from the path given by patch->new_name (patch->old_name is
NULL for a creation patch).

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: move verify_index_match() higherJunio C Hamano Wed, 13 Jun 2012 04:16:02 +0000 (21:16 -0700)

apply: move verify_index_match() higher

We will be adding another caller of this function in a later patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: plug the three-way merge logic inJunio C Hamano Wed, 9 May 2012 23:10:51 +0000 (16:10 -0700)

apply: plug the three-way merge logic in

When a patch does not apply to what we have, but we know the preimage the
patch was made against, we apply the patch to the preimage to compute what
the patch author wanted the result to look like, and attempt a three-way
merge between the result and our version, using the intended preimage as
the base version.

When we are applying the patch using the index, we would additionally need
to add the object names of these three blobs involved in the merge, which
is not yet done in this step, but we add a field to "struct patch" so that
later write-out step can use it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: fall back on three-way mergeJunio C Hamano Fri, 8 Jun 2012 16:54:10 +0000 (09:54 -0700)

apply: fall back on three-way merge

Grab the preimage blob the patch claims to be based on out of the object
store, apply the patch, and then call three-way-merge function. This step
still does not plug the actual three-way merge logic yet, but we are
getting there.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: accept -3/--3way command line optionJunio C Hamano Tue, 8 May 2012 20:21:53 +0000 (13:21 -0700)

apply: accept -3/--3way command line option

Begin teaching the three-way merge fallback logic "git am -3" uses
to the underlying "git apply". It only implements the command line
parsing part, and does not do anything interesting yet, other than
making sure that "--reject" and "--3way" are not given together, and
making "--3way" imply "--index".

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: move "already exists" logic to check_to_create()Junio C Hamano Thu, 7 Jun 2012 21:10:19 +0000 (14:10 -0700)

apply: move "already exists" logic to check_to_create()

The check_to_create_blob() function used to check only the case
where we are applying to the working tree. Rename the function to
check_to_create() and make it also responsible for checking the case
where we apply to the index. Also make its caller responsible for
issuing an error message.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: move check_to_create_blob() closer to its sole... Junio C Hamano Thu, 7 Jun 2012 21:06:47 +0000 (14:06 -0700)

apply: move check_to_create_blob() closer to its sole caller

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: further split load_preimage()Junio C Hamano Tue, 12 Jun 2012 22:23:54 +0000 (15:23 -0700)

apply: further split load_preimage()

load_preimage() is very specific to grab the current contents for
the path given by patch->old_name. Split the logic that grabs the
contents for a path out of it into a separate load_patch_target()
function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: refactor "previous patch" logicJunio C Hamano Wed, 16 May 2012 21:03:52 +0000 (14:03 -0700)

apply: refactor "previous patch" logic

The code to grab the result of application of a previous patch in the
input was mixed with error message generation for a case where a later
patch tries to modify contents of a path that has been removed.

The same code is duplicated elsewhere in the code. Introduce a helper
to clarify what is going on.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: split load_preimage() helper function outJunio C Hamano Tue, 8 May 2012 20:35:21 +0000 (13:35 -0700)

apply: split load_preimage() helper function out

Given a patch for a single path, the function apply_data() reads the
preimage in core, and applies the change represented in the patch.

Separate out the first part that reads the preimage into a separate
helper function load_preimage().

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: factor out checkout_target() helper functionJunio C Hamano Wed, 13 Jun 2012 05:47:12 +0000 (22:47 -0700)

apply: factor out checkout_target() helper function

When a patch wants to touch a path, if the path exists in the index
but is missing in the working tree, "git apply --index" checks out
the file to the working tree from the index automatically and then
applies the patch.

Split this logic out to a separate helper function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: refactor read_file_or_gitlink()Junio C Hamano Tue, 8 May 2012 22:11:02 +0000 (15:11 -0700)

apply: refactor read_file_or_gitlink()

Reading a blob out of the object store does not have to require that the
caller has a cache entry for it.

Create a read_blob_object() helper function that takes the object name and
mode, and use it to reimplement the original function as a thin wrapper to
it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: clear_image() clears things a bit moreJunio C Hamano Tue, 8 May 2012 21:38:06 +0000 (14:38 -0700)

apply: clear_image() clears things a bit more

The clear_image() function did not clear the line table in the image
structure; this does not matter for the current callers, as the function
is only called from the codepaths that deal with binary patches where the
line table is never populated, and the codepaths that do populate the line
table free it themselves.

But it will start to matter when we introduce a codepath to retry a failed
patch, so make sure it clears and frees everything.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: a bit more comments on PATH_TO_BE_DELETEDJunio C Hamano Wed, 16 May 2012 20:21:39 +0000 (13:21 -0700)

apply: a bit more comments on PATH_TO_BE_DELETED

The code is littered with to_be_deleted() whose purpose is not so clear.
Describe where it matters. Also remove an extra space before "#define"
that snuck in by mistake at 7fac0ee (builtin-apply: keep information about
files to be deleted, 2009-04-11).

Signed-off-by: Junio C Hamano <gitster@pobox.com>

apply: fix an incomplete comment in check_patch()Junio C Hamano Wed, 16 May 2012 22:31:18 +0000 (15:31 -0700)

apply: fix an incomplete comment in check_patch()

This check is not only about type-change (for which it would be
sufficient to check only was_deleted()) but is also about a swap
rename. Otherwise to_be_deleted() check is not justified.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Restore umasks influence on the permissions of work... Alex Riesen Sat, 7 Jul 2012 21:50:30 +0000 (23:50 +0200)

Restore umasks influence on the permissions of work tree created by clone

The original version of the git-clone just used mkdir(1) to create
the working directories. The version rewritten in C creates all
directories inside the working tree by using the mode argument of
0777 when calling mkdir(2) to let the umask take effect.

But the top-level directory of the working tree is created by
passing the mode argument of 0755 to mkdir(2), which results in an
overly tight restriction if the user wants to make directories group
writable with a looser umask like 002.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Allow edit of empty message with commit --amendChris Webb Mon, 9 Jul 2012 18:53:26 +0000 (19:53 +0100)

Allow edit of empty message with commit --amend

"git commit --amend" used on a commit with an empty message fails
unless -m is given, whether or not --allow-empty-message is
specified.

Allow it to proceed to the editor with an empty commit message.
Unless --allow-empty-message is in force, it will still abort later
if an empty message is saved from the editor (this check was
already necessary to prevent a non-empty commit message being edited
to an empty one).

Add a test for --amend --edit of an empty commit message which fails
without this fix, as it's a rare case that won't get frequently
tested otherwise.

Signed-off-by: Chris Webb <chris@arachsys.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://github.com/git-l10n/git-poJunio C Hamano Mon, 9 Jul 2012 17:26:23 +0000 (10:26 -0700)

Merge git://github.com/git-l10n/git-po

Translation updates for various languages.

* git://github.com/git-l10n/git-po:
l10n: zh_CN.po: translate 29 new messages
l10n: de.po: translate 29 new messages
Update Swedish translation (1095t0f0u)
l10n: Update translation for Vietnamese
l10n: Update git.pot (29 new messages)

Fifth batch for 1.7.12Junio C Hamano Mon, 9 Jul 2012 16:49:37 +0000 (09:49 -0700)

Fifth batch for 1.7.12

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'cw/help-over-network'Junio C Hamano Mon, 9 Jul 2012 16:02:19 +0000 (09:02 -0700)

Merge branch 'cw/help-over-network'

"git help -w $cmd" can show HTML version of documentation for
"git-$cmd" by setting help.htmlpath to somewhere other than the
default location where the build procedure installs them locally;
the variable can even point at a http:// URL.

* cw/help-over-network:
Allow help.htmlpath to be a URL prefix
Add config variable to set HTML path for git-help --web

Merge branch 'mz/empty-rebase-test'Junio C Hamano Mon, 9 Jul 2012 16:02:15 +0000 (09:02 -0700)

Merge branch 'mz/empty-rebase-test'

We did not have test to make sure "git rebase" without extra options
filters out an empty commit in the original history.

* mz/empty-rebase-test:
add test case for rebase of empty commit

Merge branch 'pw/git-p4-tests'Junio C Hamano Mon, 9 Jul 2012 16:02:11 +0000 (09:02 -0700)

Merge branch 'pw/git-p4-tests'

More "git p4" tests.

* pw/git-p4-tests:
git p4 test: fix badp4dir test
git p4 test: split up big t9800 test
git p4 test: cleanup_git should make a new $git
git p4 test: copy source indeterminate
git p4 test: check for error message in failed test
git p4 test: rename some "git-p4 command" strings
git p4 test: never create default test repo
git p4 test: simplify quoting involving TRASH_DIRECTORY
git p4 test: use real_path to resolve p4 client symlinks
git p4 test: wait longer for p4d to start and test its pid

Merge branch 'js/fast-export-paths-with-spaces'Junio C Hamano Mon, 9 Jul 2012 16:02:06 +0000 (09:02 -0700)

Merge branch 'js/fast-export-paths-with-spaces'

"git fast-export" produced an input stream for fast-import without
properly quoting pathnames when they contain SPs in them.

* js/fast-export-paths-with-spaces:
fast-export: quote paths with spaces

Merge branch 'cw/no-detaching-an-unborn'Junio C Hamano Mon, 9 Jul 2012 16:02:00 +0000 (09:02 -0700)

Merge branch 'cw/no-detaching-an-unborn'

"git checkout --detach", when you are still on an unborn branch,
should be forbidden, but it wasn't.

* cw/no-detaching-an-unborn:
git-checkout: disallow --detach on unborn branch

Merge branch 'vr/use-our-perl-in-tests'Junio C Hamano Mon, 9 Jul 2012 16:01:52 +0000 (09:01 -0700)

Merge branch 'vr/use-our-perl-in-tests'

Some implementations of Perl terminates "lines" with CRLF even when
the script is operating on just a sequence of bytes. Make sure to
use "$PERL_PATH", the version of Perl the user told Git to use, in
our tests to avoid unnecessary breakages in tests.

* vr/use-our-perl-in-tests:
t/README: add a bit more Don'ts
tests: enclose $PERL_PATH in double quotes
t/test-lib.sh: export PERL_PATH for use in scripts
t: Replace 'perl' by $PERL_PATH

Merge branch 'mm/credential-plumbing'Junio C Hamano Mon, 9 Jul 2012 16:01:45 +0000 (09:01 -0700)

Merge branch 'mm/credential-plumbing'

Expose the credential API to scripted Porcelain writers.

* mm/credential-plumbing:
git-remote-mediawiki: update comments to reflect credential support
git-remote-mediawiki: add credential support
git credential fill: output the whole 'struct credential'
add 'git credential' plumbing command

Merge branch 'jc/maint-blame-unique-abbrev'Junio C Hamano Mon, 9 Jul 2012 16:01:37 +0000 (09:01 -0700)

Merge branch 'jc/maint-blame-unique-abbrev'

"git blame" did not try to make sure the abbreviated commit object
names in its output are unique.

* jc/maint-blame-unique-abbrev:
blame: compute abbreviation width that ensures uniqueness

Merge branch 'jn/perl-makemaker-leading-paths'Junio C Hamano Mon, 9 Jul 2012 16:00:53 +0000 (09:00 -0700)

Merge branch 'jn/perl-makemaker-leading-paths'

* jn/perl-makemaker-leading-paths:
perl/Makefile: Fix a missing double-quote
perl/Makefile: move "mkdir -p" to module installation loop for maintainability

Merge branch 'rj/platform-pread-may-be-thread-unsafe'Junio C Hamano Mon, 9 Jul 2012 16:00:45 +0000 (09:00 -0700)

Merge branch 'rj/platform-pread-may-be-thread-unsafe'

On Cygwin, the platform pread(3) is not thread safe, just like our
own compat/ emulation, and cannot be used in the index-pack program.

* rj/platform-pread-may-be-thread-unsafe:
index-pack: Disable threading on cygwin

Merge branch 'mm/config-xdg'Junio C Hamano Mon, 9 Jul 2012 16:00:35 +0000 (09:00 -0700)

Merge branch 'mm/config-xdg'

Teach git to read various information from $XDG_CONFIG_HOME/git/ to allow
the user to avoid cluttering $HOME.

* mm/config-xdg:
config: write to $XDG_CONFIG_HOME/git/config file when appropriate
Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributes
Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignore
config: read (but not write) from $XDG_CONFIG_HOME/git/config file

Makefile: document ground rules for target-specific... Jonathan Nieder Sat, 7 Jul 2012 04:19:09 +0000 (23:19 -0500)

Makefile: document ground rules for target-specific dependencies

When a source file makes use of a makefile variable, there should be a
corresponding dependency on a file that changes when that variable
changes to ensure the build output is not left stale when the variable
changes.

Document this, even though we are not following the rule perfectly
yet. Based on an explanation from Jeff King.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: move GIT-VERSION-FILE dependencies closer... Jeff King Wed, 20 Jun 2012 18:32:22 +0000 (14:32 -0400)

Makefile: move GIT-VERSION-FILE dependencies closer to use

There is a list of all of the targets which depend on
GIT-VERSION-FILE, but it can be quite far from the actual
point where the targets actually use $(GIT_VERSION). This
can make it hard to verify that each use of $(GIT_VERSION)
has a matching dependency.

This patch moves the dependency closer to the actual build
instructions, which makes verification easier. This also
fixes the generation of "configure", which did not properly
mark the dependency.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: build instaweb similar to other scriptsJeff King Wed, 20 Jun 2012 18:32:19 +0000 (14:32 -0400)

Makefile: build instaweb similar to other scripts

Instaweb would not properly rebuild if the build-time
parameters changed. Fix this by depending on the
GIT-SCRIPT-DEFINES meta-file and using $(cmd_munge_script)
like all the other shell scripts. This requires adding a few
new parametres to cmd_munge_script, but that doesn't hurt
existing scripts.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: update scripts when build-time parameters... Jeff King Wed, 20 Jun 2012 18:32:16 +0000 (14:32 -0400)

Makefile: update scripts when build-time parameters change

Currently, running:

make SHELL_PATH=/bin/bash &&
make SHELL_PATH=/bin/sh

will not rebuild any shell scripts in the second command,
leading to incorrect results when building from an unclean
working directory.

This patch introduces a new dependency meta-file to notice
the change.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: do not replace @@GIT_VERSION@@ in shell scriptsJeff King Wed, 20 Jun 2012 18:32:10 +0000 (14:32 -0400)

Makefile: do not replace @@GIT_VERSION@@ in shell scripts

No shell script actually uses the replacement (it is used in
some perl scripts, but cmd_munge_script only handles shell
scripts). We can also therefore drop the dependency on
GIT-VERSION-FILE.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: split prefix flags from GIT-CFLAGSJeff King Wed, 20 Jun 2012 18:31:55 +0000 (14:31 -0400)

Makefile: split prefix flags from GIT-CFLAGS

Most of the build targets do not care about the setting of
$prefix (or its derivative variables), but will be rebuilt
if the prefix changes. For most setups this doesn't matter
(they set prefix once and never change it), but for a setup
which puts each branch or version in its own prefix, this
unnecessarily causes a full rebuild whenever the branc is
changed.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: be silent when only GIT_USER_AGENT changesJonathan Nieder Sat, 7 Jul 2012 04:42:11 +0000 (23:42 -0500)

Makefile: be silent when only GIT_USER_AGENT changes

To avoid noise during builds, unlike the GIT-CFLAGS rule which prints
"* new build flags or prefix" so the operator knows why all files are
being rebuilt when it changes, GIT-USER-AGENT generation is silent.

If this code breaks and a target depending on GIT-USER-AGENT ends up
being rebuilt when it shouldn't be, the full dependency chain can be
retrieved with "make --debug=b".

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: split GIT_USER_AGENT from GIT-CFLAGSJeff King Wed, 20 Jun 2012 18:31:51 +0000 (14:31 -0400)

Makefile: split GIT_USER_AGENT from GIT-CFLAGS

The default user-agent depends on the GIT_VERSION, which
means that anytime you switch versions, it causes a full
rebuild. Instead, let's split it out into its own file and
restrict the dependency to version.o.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: do not replace @@GIT_USER_AGENT@@ in scriptsJeff King Wed, 20 Jun 2012 18:31:42 +0000 (14:31 -0400)

Makefile: do not replace @@GIT_USER_AGENT@@ in scripts

No scripts actually care about this replacement. This was
erroneously added by 42dcbb7 (version: add git_user_agent function,
2012-06-02).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: apply dependencies consistently to sparse... Jeff King Wed, 20 Jun 2012 18:31:33 +0000 (14:31 -0400)

Makefile: apply dependencies consistently to sparse/asm targets

When a C file "foo.c" depends on a generated header file, we
note the dependency for the "foo.o" target. However, we
should also note it for other targets that are built from
foo.c, like "foo.sp" and "foo.s". These tend to be missed
because the latter two are not part of the default build,
and are typically built after a regular build which will
generate the header. Let's be consistent about including
them in dependencies.

This also makes us more consistent with nearby lines which
tack on EXTRA_CPPFLAGS when building certain files. These
flags may sometimes require extra dependencies to be added
(e.g., like GIT-VERSION-FILE; this is not the case for any
of the updated lines in this patch, but it is establishing a
style that will be used in later patches). Technically the
".sp" and ".s" targets do not care about these dependencies,
because they are force-built (".sp" because it is a phony
target, and ".s" because we explicitly force a rebuild).

Since the blocks in question are about communicating "things
built from foo.c depend on these flags", it frees the reader
from having to know or care more about how those targets are
implemented, and why it is OK for only "foo.o" to depend on
GIT-VERSION-FILE while "foo.sp" and "foo.s" both are
impacted by $(GIT_VERSION). And it helps future-proof us if
those force-build details should ever change.

This patch explicitly does not update the static header
dependencies used when COMPUTED_HEADER_DEPENDENCIES is off.
They are similar to the GIT-VERSION-FILE case above, in that
technically "foo.s" would depend on its included headers,
but it is irrelevant because we force-build it anyway. So it
would be tempting to update them in the same way (for
readability and future-proofing). However, those rules are
meant as a fallback to the computed header dependencies,
which do not handle ".s" and ".sp" at all (and are a much
harder problem to solve, as gcc is the one generating those
dependency lists).

So let's leave that harder problem until (and if) somebody
wants to change the ".sp" and ".s" rules, and keep the
static header dependencies consistent with the computed
ones.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: do not have git.o depend on common-cmds.hJeff King Wed, 20 Jun 2012 18:31:18 +0000 (14:31 -0400)

Makefile: do not have git.o depend on common-cmds.h

This dependency has been stale since 70827b1 (Split up
builtin commands into separate files from git.c, 2006-04-21).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Makefile: fold XDIFF_H and VCSSVN_H into LIB_HJonathan Nieder Sat, 7 Jul 2012 03:39:18 +0000 (22:39 -0500)

Makefile: fold XDIFF_H and VCSSVN_H into LIB_H

Just like MISC_H (see previous commit), there is no reason to track
xdiff and vcs-svn headers separately from the rest of the headers.
The only purpose of these variables is to keep track of recompilation
dependencies.

As a pleasant side effect, folding these into LIB_H lets us stop
tracking GIT_OBJS and VCSSVN_TEST_OBJS separately from the list of all
OBJECTS.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git on Mac OS and precomposed unicodeTorsten Bögershausen Sun, 8 Jul 2012 13:50:25 +0000 (15:50 +0200)

git on Mac OS and precomposed unicode

Mac OS X mangles file names containing unicode on file systems HFS+,
VFAT or SAMBA. When a file using unicode code points outside ASCII
is created on a HFS+ drive, the file name is converted into
decomposed unicode and written to disk. No conversion is done if
the file name is already decomposed unicode.

Calling open("\xc3\x84", ...) with a precomposed "Ä" yields the same
result as open("\x41\xcc\x88",...) with a decomposed "Ä".

As a consequence, readdir() returns the file names in decomposed
unicode, even if the user expects precomposed unicode. Unlike on
HFS+, Mac OS X stores files on a VFAT drive (e.g. an USB drive) in
precomposed unicode, but readdir() still returns file names in
decomposed unicode. When a git repository is stored on a network
share using SAMBA, file names are send over the wire and written to
disk on the remote system in precomposed unicode, but Mac OS X
readdir() returns decomposed unicode to be compatible with its
behaviour on HFS+ and VFAT.

The unicode decomposition causes many problems:

- The names "git add" and other commands get from the end user may
often be precomposed form (the decomposed form is not easily input
from the keyboard), but when the commands read from the filesystem
to see what it is going to update the index with already is on the
filesystem, readdir() will give decomposed form, which is different.

- Similarly "git log", "git mv" and all other commands that need to
compare pathnames found on the command line (often but not always
precomposed form; a command line input resulting from globbing may
be in decomposed) with pathnames found in the tree objects (should
be precomposed form to be compatible with other systems and for
consistency in general).

- The same for names stored in the index, which should be
precomposed, that may need to be compared with the names read from
readdir().

NFS mounted from Linux is fully transparent and does not suffer from
the above.

As Mac OS X treats precomposed and decomposed file names as equal,
we can

- wrap readdir() on Mac OS X to return the precomposed form, and

- normalize decomposed form given from the command line also to the
precomposed form,

to ensure that all pathnames used in Git are always in the
precomposed form. This behaviour can be requested by setting
"core.precomposedunicode" configuration variable to true.

The code in compat/precomposed_utf8.c implements basically 4 new
functions: precomposed_utf8_opendir(), precomposed_utf8_readdir(),
precomposed_utf8_closedir() and precompose_argv(). The first three
are to wrap opendir(3), readdir(3), and closedir(3) functions.

The argv[] conversion allows to use the TAB filename completion done
by the shell on command line. It tolerates other tools which use
readdir() to feed decomposed file names into git.

When creating a new git repository with "git init" or "git clone",
"core.precomposedunicode" will be set "false".

The user needs to activate this feature manually. She typically
sets core.precomposedunicode to "true" on HFS and VFAT, or file
systems mounted via SAMBA.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Replace strlen() with ce_namelen()Thomas Gummerer Fri, 6 Jul 2012 16:07:30 +0000 (18:07 +0200)

Replace strlen() with ce_namelen()

Replace strlen(ce->name) with ce_namelen() in a couple
of places which gives us some additional bits of
performance.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-remote-mediawiki: update comments to reflect creden... Matthieu Moy Sun, 8 Jul 2012 16:18:28 +0000 (18:18 +0200)

git-remote-mediawiki: update comments to reflect credential support

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-remote-mediawiki: be more defensive when requests... Matthieu Moy Fri, 6 Jul 2012 10:03:15 +0000 (12:03 +0200)

git-remote-mediawiki: be more defensive when requests fail

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-remote-mediawiki: more efficient 'pull' in the... Matthieu Moy Fri, 6 Jul 2012 10:03:14 +0000 (12:03 +0200)

git-remote-mediawiki: more efficient 'pull' in the best case

The only way to fetch new revisions from a wiki before this patch was to
query each page for new revisions. This is good when tracking a small set
of pages on a large wiki, but very inefficient when tracking many pages
on a wiki with little activity.

Implement a new strategy that queries the wiki for its last global
revision, queries each new revision, and filter out pages that are not
tracked.

Signed-off-by: Simon Perrat <simon.perrat@ensimag.imag.fr>
Signed-off-by: Simon CATHEBRAS <Simon.Cathebras@ensimag.imag.fr>
Signed-off-by: Julien KHAYAT <Julien.Khayat@ensimag.imag.fr>
Signed-off-by: Charles ROUSSEL <Charles.Roussel@ensimag.imag.fr>
Signed-off-by: Guillaume SASDY <Guillaume.Sasdy@ensimag.imag.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-remote-mediawiki: extract revision-importing loop... Matthieu Moy Fri, 6 Jul 2012 10:03:13 +0000 (12:03 +0200)

git-remote-mediawiki: extract revision-importing loop to a function

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-remote-mediawiki: refactor loop over revision idsMatthieu Moy Fri, 6 Jul 2012 10:03:12 +0000 (12:03 +0200)

git-remote-mediawiki: refactor loop over revision ids

Without changing the behavior, we turn the foreach loop on an array of
revisions into a loop on an array of integer. It will be easier to
implement other strategies as they will only need to produce an array of
integer instead of a more complex data-structure.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>