Merge branch 'maint'
* maint: Fix lseek(2) calls with args 2 and 3 swapped Honor -p<n> when applying git diffs Fix dependency of common-cmds.h Fix renaming branch without config file DESTDIR support for git/contrib/emacs gitweb: Fix bug in "blobdiff" view for split (e.g. file to symlink) patches Document --left-right option to rev-list. Revert "builtin-archive: use RUN_SETUP" rename contrib/hooks/post-receieve-email to contrib/hooks/post-receive-email. rerere: make sorting really stable. Fix t4200-rerere for white-space from "wc -l"
This commit is contained in:
@ -21,6 +21,7 @@ SYNOPSIS
|
|||||||
[ \--stdin ]
|
[ \--stdin ]
|
||||||
[ \--topo-order ]
|
[ \--topo-order ]
|
||||||
[ \--parents ]
|
[ \--parents ]
|
||||||
|
[ \--left-right ]
|
||||||
[ \--encoding[=<encoding>] ]
|
[ \--encoding[=<encoding>] ]
|
||||||
[ \--(author|committer|grep)=<pattern> ]
|
[ \--(author|committer|grep)=<pattern> ]
|
||||||
[ [\--objects | \--objects-edge] [ \--unpacked ] ]
|
[ [\--objects | \--objects-edge] [ \--unpacked ] ]
|
||||||
@ -101,6 +102,36 @@ include::pretty-formats.txt[]
|
|||||||
|
|
||||||
Print the parents of the commit.
|
Print the parents of the commit.
|
||||||
|
|
||||||
|
--left-right::
|
||||||
|
|
||||||
|
Mark which side of a symmetric diff a commit is reachable from.
|
||||||
|
Commits from the left side are prefixed with `<` and those from
|
||||||
|
the right with `>`. If combined with `--boundary`, those
|
||||||
|
commits are prefixed with `-`.
|
||||||
|
+
|
||||||
|
For example, if you have this topology:
|
||||||
|
+
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
y---b---b branch B
|
||||||
|
/ \ /
|
||||||
|
/ .
|
||||||
|
/ / \
|
||||||
|
o---x---a---a branch A
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
+
|
||||||
|
you would get an output line this:
|
||||||
|
+
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
$ git rev-list --left-right --boundary --pretty=oneline A...B
|
||||||
|
|
||||||
|
>bbbbbbb... 3rd on b
|
||||||
|
>bbbbbbb... 2nd on b
|
||||||
|
<aaaaaaa... 3rd on a
|
||||||
|
<aaaaaaa... 2nd on a
|
||||||
|
-yyyyyyy... 1st on b
|
||||||
|
-xxxxxxx... 1st on a
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
Diff Formatting
|
Diff Formatting
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
2
Makefile
2
Makefile
@ -727,7 +727,7 @@ help.o: common-cmds.h
|
|||||||
$(BUILT_INS): git$X
|
$(BUILT_INS): git$X
|
||||||
$(QUIET_BUILT_IN)rm -f $@ && ln git$X $@
|
$(QUIET_BUILT_IN)rm -f $@ && ln git$X $@
|
||||||
|
|
||||||
common-cmds.h: Documentation/git-*.txt
|
common-cmds.h: $(wildcard Documentation/git-*.txt)
|
||||||
$(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
|
$(QUIET_GEN)./generate-cmdlist.sh > $@+ && mv $@+ $@
|
||||||
|
|
||||||
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
|
$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
|
||||||
|
@ -417,7 +417,7 @@ static int gitdiff_hdrend(const char *line, struct patch *patch)
|
|||||||
static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
|
static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name, const char *oldnew)
|
||||||
{
|
{
|
||||||
if (!orig_name && !isnull)
|
if (!orig_name && !isnull)
|
||||||
return find_name(line, NULL, 1, TERM_TAB);
|
return find_name(line, NULL, p_value, TERM_TAB);
|
||||||
|
|
||||||
if (orig_name) {
|
if (orig_name) {
|
||||||
int len;
|
int len;
|
||||||
@ -427,7 +427,7 @@ static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name,
|
|||||||
len = strlen(name);
|
len = strlen(name);
|
||||||
if (isnull)
|
if (isnull)
|
||||||
die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
|
die("git-apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
|
||||||
another = find_name(line, NULL, 1, TERM_TAB);
|
another = find_name(line, NULL, p_value, TERM_TAB);
|
||||||
if (!another || memcmp(another, name, len))
|
if (!another || memcmp(another, name, len))
|
||||||
die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
|
die("git-apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
|
||||||
free(another);
|
free(another);
|
||||||
|
@ -252,6 +252,8 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
memset(&ar, 0, sizeof(ar));
|
memset(&ar, 0, sizeof(ar));
|
||||||
tree_idx = parse_archive_args(argc, argv, &ar);
|
tree_idx = parse_archive_args(argc, argv, &ar);
|
||||||
|
if (prefix == NULL)
|
||||||
|
prefix = setup_git_directory();
|
||||||
|
|
||||||
argv += tree_idx;
|
argv += tree_idx;
|
||||||
parse_treeish_arg(argv, &ar.args, prefix);
|
parse_treeish_arg(argv, &ar.args, prefix);
|
||||||
|
@ -117,10 +117,13 @@ static int handle_file(const char *path,
|
|||||||
else if (!prefixcmp(buf, "======="))
|
else if (!prefixcmp(buf, "======="))
|
||||||
hunk = 2;
|
hunk = 2;
|
||||||
else if (!prefixcmp(buf, ">>>>>>> ")) {
|
else if (!prefixcmp(buf, ">>>>>>> ")) {
|
||||||
|
int one_is_longer = (one->nr > two->nr);
|
||||||
|
int common_len = one_is_longer ? two->nr : one->nr;
|
||||||
|
int cmp = memcmp(one->ptr, two->ptr, common_len);
|
||||||
|
|
||||||
hunk_no++;
|
hunk_no++;
|
||||||
hunk = 0;
|
hunk = 0;
|
||||||
if (memcmp(one->ptr, two->ptr, one->nr < two->nr ?
|
if ((cmp > 0) || ((cmp == 0) && one_is_longer)) {
|
||||||
one->nr : two->nr) > 0) {
|
|
||||||
struct buffer *swap = one;
|
struct buffer *swap = one;
|
||||||
one = two;
|
one = two;
|
||||||
two = swap;
|
two = swap;
|
||||||
|
@ -35,6 +35,7 @@ static const char rev_list_usage[] =
|
|||||||
" --header | --pretty\n"
|
" --header | --pretty\n"
|
||||||
" --abbrev=nr | --no-abbrev\n"
|
" --abbrev=nr | --no-abbrev\n"
|
||||||
" --abbrev-commit\n"
|
" --abbrev-commit\n"
|
||||||
|
" --left-right\n"
|
||||||
" special purpose:\n"
|
" special purpose:\n"
|
||||||
" --bisect\n"
|
" --bisect\n"
|
||||||
" --bisect-vars"
|
" --bisect-vars"
|
||||||
|
5
config.c
5
config.c
@ -916,8 +916,8 @@ int git_config_rename_section(const char *old_name, const char *new_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!(config_file = fopen(config_filename, "rb"))) {
|
if (!(config_file = fopen(config_filename, "rb"))) {
|
||||||
ret = error("Could not open config file!");
|
/* no config file means nothing to rename, no error */
|
||||||
goto out;
|
goto unlock_and_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets(buf, sizeof(buf), config_file)) {
|
while (fgets(buf, sizeof(buf), config_file)) {
|
||||||
@ -951,6 +951,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(config_file);
|
fclose(config_file);
|
||||||
|
unlock_and_out:
|
||||||
if (close(out_fd) || commit_lock_file(lock) < 0)
|
if (close(out_fd) || commit_lock_file(lock) < 0)
|
||||||
ret = error("Cannot commit config file!");
|
ret = error("Cannot commit config file!");
|
||||||
out:
|
out:
|
||||||
|
@ -11,8 +11,8 @@ emacsdir = $(prefix)/share/emacs/site-lisp
|
|||||||
all: $(ELC)
|
all: $(ELC)
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
$(INSTALL) -d $(emacsdir)
|
$(INSTALL) -d $(DESTDIR)$(emacsdir)
|
||||||
$(INSTALL_ELC) $(ELC) $(emacsdir)
|
$(INSTALL_ELC) $(ELC) $(DESTDIR)$(emacsdir)
|
||||||
|
|
||||||
%.elc: %.el
|
%.elc: %.el
|
||||||
$(EMACS) -batch -f batch-byte-compile $<
|
$(EMACS) -batch -f batch-byte-compile $<
|
||||||
|
2
git.c
2
git.c
@ -226,7 +226,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
|
|||||||
{ "add", cmd_add, RUN_SETUP | NOT_BARE },
|
{ "add", cmd_add, RUN_SETUP | NOT_BARE },
|
||||||
{ "annotate", cmd_annotate, USE_PAGER },
|
{ "annotate", cmd_annotate, USE_PAGER },
|
||||||
{ "apply", cmd_apply },
|
{ "apply", cmd_apply },
|
||||||
{ "archive", cmd_archive, RUN_SETUP },
|
{ "archive", cmd_archive },
|
||||||
{ "blame", cmd_blame, RUN_SETUP },
|
{ "blame", cmd_blame, RUN_SETUP },
|
||||||
{ "branch", cmd_branch, RUN_SETUP },
|
{ "branch", cmd_branch, RUN_SETUP },
|
||||||
{ "bundle", cmd_bundle },
|
{ "bundle", cmd_bundle },
|
||||||
|
@ -3934,7 +3934,8 @@ sub git_blobdiff {
|
|||||||
|
|
||||||
# open patch output
|
# open patch output
|
||||||
open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts,
|
open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts,
|
||||||
'-p', $hash_parent_base, $hash_base,
|
'-p', ($format eq 'html' ? "--full-index" : ()),
|
||||||
|
$hash_parent_base, $hash_base,
|
||||||
"--", (defined $file_parent ? $file_parent : ()), $file_name
|
"--", (defined $file_parent ? $file_parent : ()), $file_name
|
||||||
or die_error(undef, "Open git-diff-tree failed");
|
or die_error(undef, "Open git-diff-tree failed");
|
||||||
}
|
}
|
||||||
@ -3969,7 +3970,8 @@ sub git_blobdiff {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# open patch output
|
# open patch output
|
||||||
open $fd, "-|", git_cmd(), "diff", '-p', @diff_opts,
|
open $fd, "-|", git_cmd(), "diff", @diff_opts,
|
||||||
|
'-p', ($format eq 'html' ? "--full-index" : ()),
|
||||||
$hash_parent, $hash, "--"
|
$hash_parent, $hash, "--"
|
||||||
or die_error(undef, "Open git-diff failed");
|
or die_error(undef, "Open git-diff failed");
|
||||||
} else {
|
} else {
|
||||||
|
@ -198,7 +198,7 @@ static void start_object_request(struct object_request *obj_req)
|
|||||||
SHA1_Init(&obj_req->c);
|
SHA1_Init(&obj_req->c);
|
||||||
if (prev_posn>0) {
|
if (prev_posn>0) {
|
||||||
prev_posn = 0;
|
prev_posn = 0;
|
||||||
lseek(obj_req->local, SEEK_SET, 0);
|
lseek(obj_req->local, 0, SEEK_SET);
|
||||||
ftruncate(obj_req->local, 0);
|
ftruncate(obj_req->local, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,7 +312,7 @@ static void start_fetch_loose(struct transfer_request *request)
|
|||||||
SHA1_Init(&request->c);
|
SHA1_Init(&request->c);
|
||||||
if (prev_posn>0) {
|
if (prev_posn>0) {
|
||||||
prev_posn = 0;
|
prev_posn = 0;
|
||||||
lseek(request->local_fileno, SEEK_SET, 0);
|
lseek(request->local_fileno, 0, SEEK_SET);
|
||||||
ftruncate(request->local_fileno, 0);
|
ftruncate(request->local_fileno, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,15 @@ test_expect_failure \
|
|||||||
git-branch r &&
|
git-branch r &&
|
||||||
git-branch -m q r/q'
|
git-branch -m q r/q'
|
||||||
|
|
||||||
|
mv .git/config .git/config-saved
|
||||||
|
|
||||||
|
test_expect_success 'git branch -m q Q without config should succeed' '
|
||||||
|
git-branch -m q Q &&
|
||||||
|
git-branch -m Q q
|
||||||
|
'
|
||||||
|
|
||||||
|
mv .git/config-saved .git/config
|
||||||
|
|
||||||
git-config branch.s/s.dummy Hello
|
git-config branch.s/s.dummy Hello
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
|
25
t/t4120-apply-popt.sh
Executable file
25
t/t4120-apply-popt.sh
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 Shawn O. Pearce
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='git-apply -p handling.'
|
||||||
|
|
||||||
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
test_expect_success setup '
|
||||||
|
mkdir sub &&
|
||||||
|
echo A >sub/file1 &&
|
||||||
|
cp sub/file1 file1 &&
|
||||||
|
git add sub/file1 &&
|
||||||
|
echo B >sub/file1 &&
|
||||||
|
git diff >patch.file &&
|
||||||
|
rm sub/file1 &&
|
||||||
|
rmdir sub
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'apply git diff with -p2' '
|
||||||
|
git apply -p2 patch.file
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
@ -35,7 +35,8 @@ git commit -q -a -m first
|
|||||||
|
|
||||||
git checkout -b second master
|
git checkout -b second master
|
||||||
git show first:a1 |
|
git show first:a1 |
|
||||||
sed -e 's/To die, t/To die! T/' -e 's/life;$/life./' > a1
|
sed -e 's/To die, t/To die! T/' > a1
|
||||||
|
echo "* END *" >>a1
|
||||||
git commit -q -a -m second
|
git commit -q -a -m second
|
||||||
|
|
||||||
# activate rerere
|
# activate rerere
|
||||||
@ -50,10 +51,10 @@ test_expect_success 'recorded preimage' "grep ======= $rr/preimage"
|
|||||||
test_expect_success 'no postimage or thisimage yet' \
|
test_expect_success 'no postimage or thisimage yet' \
|
||||||
"test ! -f $rr/postimage -a ! -f $rr/thisimage"
|
"test ! -f $rr/postimage -a ! -f $rr/thisimage"
|
||||||
|
|
||||||
test_expect_success 'preimage have right number of lines' '
|
test_expect_success 'preimage has right number of lines' '
|
||||||
|
|
||||||
cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) &&
|
cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) &&
|
||||||
test "$cnt" = 10
|
test $cnt = 9
|
||||||
|
|
||||||
'
|
'
|
||||||
|
|
||||||
@ -75,10 +76,10 @@ cat > expect << EOF
|
|||||||
For in that sleep of death what dreams may come
|
For in that sleep of death what dreams may come
|
||||||
When we have shuffled off this mortal coil,
|
When we have shuffled off this mortal coil,
|
||||||
Must give us pause: there's the respect
|
Must give us pause: there's the respect
|
||||||
-<<<<<<<
|
|
||||||
-That makes calamity of so long life.
|
|
||||||
-=======
|
|
||||||
That makes calamity of so long life;
|
That makes calamity of so long life;
|
||||||
|
-<<<<<<<
|
||||||
|
-=======
|
||||||
|
-* END *
|
||||||
->>>>>>>
|
->>>>>>>
|
||||||
EOF
|
EOF
|
||||||
git rerere diff > out
|
git rerere diff > out
|
||||||
|
@ -130,4 +130,8 @@ test_expect_success \
|
|||||||
'validate file contents with prefix' \
|
'validate file contents with prefix' \
|
||||||
'diff -r a e/prefix/a'
|
'diff -r a e/prefix/a'
|
||||||
|
|
||||||
|
test_expect_success \
|
||||||
|
'git-archive --list outside of a git repo' \
|
||||||
|
'GIT_DIR=some/non-existing/directory git-archive --list'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Reference in New Issue
Block a user