Go to file
Martin von Zweigbergk d7c9bf2235 diffcore-rename: don't consider unmerged path as source
Since e9c8409 (diff-index --cached --raw: show tree entry on the LHS for
unmerged entries., 2007-01-05), an unmerged entry should be detected by
using DIFF_PAIR_UNMERGED(p), not by noticing both one and two sides of
the filepair records mode=0 entries. However, it forgot to update some
parts of the rename detection logic.

This only makes difference in the "diff --cached" codepath where an
unmerged filepair carries information on the entries that came from the
tree.  It probably hasn't been noticed for a long time because nobody
would run "diff -M" during a conflict resolution, but "git status" uses
rename detection when it internally runs "diff-index" and "diff-files"
and gives nonsense results.

In an unmerged pair, "one" side can have a valid filespec to record the
tree entry (e.g. what's in HEAD) when running "diff --cached". This can
be used as a rename source to other paths in the index that are not
unmerged. The path that is unmerged by definition does not have the
final content yet (i.e. "two" side cannot have a valid filespec), so it
can never be a rename destination.

Use the DIFF_PAIR_UNMERGED() to detect unmerged filepair correctly, and
allow the valid "one" side of an unmerged filepair to be considered a
potential rename source, but never to be considered a rename destination.

Commit message and first two test cases by Junio, the rest by Martin.

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-03-23 22:44:22 -07:00
Documentation Merge branch 'maint-1.7.2' into maint-1.7.3 2011-02-16 14:32:59 -08:00
block-sha1
builtin Merge branch 'ak/describe-exact' into maint 2011-01-19 08:25:52 -08:00
compat mingw: do not set errno to 0 on success 2010-11-23 16:08:01 -08:00
contrib Merge branch 'ab/require-perl-5.8' into maint 2010-12-09 10:35:21 -08:00
git-gui Merge git://repo.or.cz/git-gui 2010-09-15 12:34:48 -07:00
git_remote_helpers remote-helpers: build in platform independent directory 2010-09-27 10:42:50 -07:00
gitk-git Mark gitk script executable 2011-01-08 23:34:02 -08:00
gitweb Merge branch 'jn/gitweb-no-logo' into maint 2011-01-19 08:26:47 -08:00
perl perl: bump the required Perl version to 5.8 from 5.6.[21] 2010-09-27 12:37:41 -07:00
ppc
t diffcore-rename: don't consider unmerged path as source 2011-03-23 22:44:22 -07:00
templates
vcs-svn vcs-svn: Fix some printf format compiler warnings 2010-09-12 10:24:55 -07:00
xdiff Merge branch 'cb/diff-fname-optim' into maint 2010-11-24 12:46:26 -08:00
.gitattributes
.gitignore Merge branch 'ab/test-2' 2010-09-04 08:15:36 -07:00
.mailmap
COPYING
GIT-VERSION-GEN Git 1.7.3.5 2011-01-05 14:49:19 -08:00
INSTALL perl: bump the required Perl version to 5.8 from 5.6.[21] 2010-09-27 12:37:41 -07:00
Makefile Merge branch 'jc/maint-no-openssl-build-fix' into maint 2010-12-14 07:50:20 -08:00
README
RelNotes Prepare for 1.7.3.5 2010-12-28 13:48:54 -08:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c Use angles for placeholders consistently 2010-10-08 12:29:52 -07:00
archive.h
attr.c
attr.h
base85.c
bisect.c
bisect.h
blob.c
blob.h
branch.c
branch.h
builtin.h Merge branch 'ks/no-textconv-symlink' into maint 2010-12-02 11:26:24 -08:00
bundle.c
bundle.h
cache-tree.c cache_tree_free: Fix small memory leak 2010-09-06 17:32:28 -07:00
cache-tree.h
cache.h do not overwrite files in leading path 2010-12-14 08:55:12 -08:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
combine-diff.c
command-list.txt
commit.c
commit.h
config.c log.decorate: accept 0/1 bool values 2010-11-17 10:59:23 -08:00
config.mak.in Merge branch 'ab/compat-regex' 2010-09-03 09:43:45 -07:00
configure.ac Merge branch 'ab/compat-regex' 2010-09-03 09:43:45 -07:00
connect.c Make sure that git_getpass() never returns NULL 2010-09-30 12:22:02 -07:00
convert.c
copy.c
csum-file.c
csum-file.h
ctype.c
daemon.c Use angles for placeholders consistently 2010-10-08 12:29:52 -07:00
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c fill_textconv(): Don't get/put cache if sha1 is not valid 2010-12-19 18:41:32 -08:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c diffcore-pickaxe.c: remove unnecessary curly braces 2010-10-05 08:41:58 -07:00
diffcore-rename.c diffcore-rename: don't consider unmerged path as source 2011-03-23 22:44:22 -07:00
diffcore.h
dir.c Merge branch 'nd/maint-relative' into maint 2011-01-19 08:25:31 -08:00
dir.h
editor.c
entry.c entry.c: remove "checkout-index" from error messages 2010-11-29 14:03:07 -08:00
environment.c setup: make sure git_dir path is in a permanent buffer, getenv(3) case 2010-11-12 16:03:27 -08:00
exec_cmd.c exec_cmd: remove unused extern 2011-01-19 08:27:22 -08:00
exec_cmd.h
fast-import.c Merge branch 'maint-1.7.2' into maint-1.7.3 2011-02-16 14:32:59 -08:00
fetch-pack.h
fixup-builtins
fsck.c
fsck.h
generate-cmdlist.sh
git-add--interactive.perl Merge branch 'jl/add-p-reverse-message' into maint 2010-12-09 10:36:47 -08:00
git-am.sh Merge branch 'jc/maint-rebase-rewrite-last-skip' into maint 2010-12-28 13:43:10 -08:00
git-archimport.perl perl: use "use warnings" instead of -w 2010-09-27 12:37:56 -07:00
git-bisect.sh
git-compat-util.h do not depend on signed integer overflow 2010-10-06 11:10:07 -07:00
git-cvsexportcommit.perl perl: use "use warnings" instead of -w 2010-09-27 12:37:56 -07:00
git-cvsimport.perl perl: use "use warnings" instead of -w 2010-09-27 12:37:56 -07:00
git-cvsserver.perl perl: bump the required Perl version to 5.8 from 5.6.[21] 2010-09-27 12:37:41 -07:00
git-difftool--helper.sh difftool: provide basename to external tools 2010-12-16 13:01:36 -08:00
git-difftool.perl difftool: Fix failure on Cygwin 2010-12-14 11:13:41 -08:00
git-filter-branch.sh
git-instaweb.sh
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh Merge branch 'cb/maint-mergetool-no-tty' 2010-09-03 09:43:44 -07:00
git-parse-remote.sh
git-pull.sh Merge branch 'en/rebase-against-rebase-fix' into maint 2010-09-01 13:43:55 -07:00
git-quiltimport.sh
git-rebase--interactive.sh rebase -i: clarify in-editor documentation of "exec" 2011-01-27 10:24:09 -08:00
git-rebase.sh rebase: give a better error message for bogus branch 2011-01-26 17:27:02 -08:00
git-relink.perl Merge branch 'ab/require-perl-5.8' into maint 2010-12-09 10:35:21 -08:00
git-remote-testgit.py
git-repack.sh Merge branch 'tr/maint-git-repack-tmpfile' into maint 2010-11-24 12:47:10 -08:00
git-request-pull.sh
git-send-email.perl Merge branch 'ab/require-perl-5.8' into maint 2010-12-09 10:35:21 -08:00
git-sh-setup.sh get_author_ident_from_commit(): remove useless quoting 2010-09-27 10:49:49 -07:00
git-stash.sh shell portability: no "export VAR=VAL" 2010-10-13 11:36:36 -07:00
git-submodule.sh Merge branch 'tr/submodule-relative-scp-url' into maint 2011-01-19 08:26:41 -08:00
git-svn.perl Merge branch 'ab/require-perl-5.8' into maint 2010-12-09 10:35:21 -08:00
git-web--browse.sh
git.c Use angles for placeholders consistently 2010-10-08 12:29:52 -07:00
git.spec.in
graph.c
graph.h
grep.c
grep.h
hash.c
hash.h
help.c
help.h builtin.h: Move two functions definitions to help.h. 2010-09-01 08:00:51 -07:00
hex.c
http-backend.c http-backend: use end_url_with_slash() 2010-11-26 14:50:45 -08:00
http-fetch.c http-fetch: rework url handling 2010-11-26 14:50:46 -08:00
http-push.c http-push: add trailing slash at arg-parse time, instead of later on 2010-11-26 14:50:46 -08:00
http-walker.c
http.c Merge branch 'tc/http-urls-ends-with-slash' into maint 2010-12-14 07:36:10 -08:00
http.h shift end_url_with_slash() from http.[ch] to url.[ch] 2010-11-26 14:50:45 -08:00
ident.c ident: die on bogus date format 2010-12-20 10:28:19 -08:00
imap-send.c
levenshtein.c
levenshtein.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c
log-tree.h
mailmap.c mailmap: fix use of freed memory 2010-10-13 19:11:26 -07:00
mailmap.h
match-trees.c
merge-file.c
merge-recursive.c Merge branch 'ks/recursive-rename-add-identical' 2010-09-15 12:39:12 -07:00
merge-recursive.h Merge branch 'dg/local-mod-error-messages' 2010-09-03 22:23:49 -07:00
name-hash.c
notes-cache.c
notes-cache.h
notes.c
notes.h
object.c Merge branch 'maint' 2010-09-06 00:12:04 -07:00
object.h
pack-check.c
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c
pkt-line.c
pkt-line.h
preload-index.c
pretty.c
progress.c
progress.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c
reflog-walk.c Merge branch 'jk/maint-reflog-bottom' into maint 2010-12-14 07:35:50 -08:00
reflog-walk.h
refs.c
refs.h
remote-curl.c
remote.c
remote.h
replace_object.c
rerere.c Merge branch 'jn/merge-renormalize' 2010-09-03 09:43:41 -07:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jk/maint-reflog-bottom' into maint 2010-12-14 07:35:50 -08:00
revision.h
run-command.c
run-command.h
send-pack.h
server-info.c
setup.c prefix_filename(): safely handle the case where pfx_len=0 2010-10-18 16:10:55 -07:00
sha1-lookup.c
sha1-lookup.h
sha1_file.c
sha1_name.c Merge branch 'ks/no-textconv-symlink' into maint 2010-12-02 11:26:24 -08:00
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c
strbuf.h strbuf.h: fix comment typo 2010-09-27 10:42:11 -07:00
string-list.c
string-list.h
submodule.c
submodule.h
symlinks.c do not overwrite files in leading path 2010-12-14 08:55:12 -08:00
tag.c tag: recognize rfc1991 signatures 2010-11-10 09:40:35 -08:00
tag.h verify-tag: factor out signature detection 2010-11-10 09:39:56 -08:00
tar.h
test-chmtime.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-obj-pool.c
test-parse-options.c
test-path-utils.c
test-run-command.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-pool.c
test-svn-fe.c
test-treap.c
thread-utils.c
thread-utils.h
trace.c trace.c: mark file-local function static 2010-12-17 13:40:32 -08:00
transport-helper.c
transport.c
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unimplemented.sh
unpack-trees.c use persistent memory for rejected paths 2010-12-14 08:55:13 -08:00
unpack-trees.h use persistent memory for rejected paths 2010-12-14 08:55:13 -08:00
upload-pack.c Use angles for placeholders consistently 2010-10-08 12:29:52 -07:00
url.c url: add str wrapper for end_url_with_slash() 2010-11-26 14:50:45 -08:00
url.h url: add str wrapper for end_url_with_slash() 2010-11-26 14:50:45 -08:00
usage.c
userdiff.c userdiff: fix typo in ruby and python word regexes 2010-12-18 22:58:40 -08:00
userdiff.h
utf8.c
utf8.h
walker.c
walker.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c diff: handle lines containing only whitespace and tabs better 2010-10-20 16:10:15 -07:00
wt-status.c status: Quote paths with spaces in short format 2010-11-09 07:35:16 -08:00
wt-status.h
xdiff-interface.c Merge branch 'rs/maint-diff-fd-leak' into maint 2010-12-26 11:18:39 -08:00
xdiff-interface.h

README

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.