From: Junio C Hamano Date: Wed, 17 Aug 2005 22:38:47 +0000 (-0700) Subject: Merge from master for misc fixes. X-Git-Tag: v0.99.5~15 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/942bc9c4805e7d4d5f23c86df36977aa4fdb9f7d?hp=ca08acca68bf0e1c89fcbc29af18b68ea7bf5c36 Merge from master for misc fixes. --- diff --git a/Documentation/git-cvsimport-script.txt b/Documentation/git-cvsimport-script.txt index ae46b2f072..d01a15d8a3 100644 --- a/Documentation/git-cvsimport-script.txt +++ b/Documentation/git-cvsimport-script.txt @@ -12,7 +12,7 @@ SYNOPSIS 'git-cvsimport-script' [ -o ] [ -h ] [ -v ] [ -d ] [ -p ] [ -C ] [ -i ] [ -k ] - [ -s ] [ ] + [ -s ] [ -m ] [ -M regex ] [ ] DESCRIPTION @@ -58,6 +58,16 @@ OPTIONS If you need to pass multiple options, separate them with a comma. +-m:: + Attempt to detect merges based on the commit message. This option + will enable default regexes that try to capture the name source + branch name from the commit message. + +-M :: + Attempt to detect merges based on the commit message with a custom + regex. It can be used with -m to also see the default regexes. + You must escape forward slashes. + -v:: Verbosity: let 'cvsimport' report what it is doing. diff --git a/cache.h b/cache.h index 6365381c17..742378f40f 100644 --- a/cache.h +++ b/cache.h @@ -142,6 +142,7 @@ extern char *get_graft_file(void); extern const char **get_pathspec(const char *prefix, char **pathspec); extern const char *setup_git_directory(void); +extern char *prefix_path(const char *prefix, int len, char *path); #define alloc_nr(x) (((x)+16)*3/2) diff --git a/git-clone-script b/git-clone-script index 909ccc5301..99c2459631 100755 --- a/git-clone-script +++ b/git-clone-script @@ -81,7 +81,11 @@ yes,yes) ;; yes) mkdir -p "$D/.git/objects/info" - echo "$repo/objects" >"$D/.git/objects/info/alternates" + { + test -f "$repo/objects/info/alternates" && + cat "$repo/objects/info/alternates"; + echo "$repo/objects" + } >"$D/.git/objects/info/alternates" ;; esac diff --git a/git-commit-script b/git-commit-script index f6cd75f024..15d03913d5 100755 --- a/git-commit-script +++ b/git-commit-script @@ -85,11 +85,13 @@ tt*) die "Only one of -c/-C/-F/-m can be used." ;; esac -case "$all" in -t) +case "$all,$#" in +t,*) git-diff-files --name-only -z | xargs -0 git-update-cache -q -- ;; +,0) + ;; *) git-diff-files --name-only -z "$@" | xargs -0 git-update-cache -q -- diff --git a/git-cvsimport-script b/git-cvsimport-script index 2f39af33d9..e3a8e584a5 100755 --- a/git-cvsimport-script +++ b/git-cvsimport-script @@ -28,19 +28,19 @@ use POSIX qw(strftime dup2); $SIG{'PIPE'}="IGNORE"; $ENV{'TZ'}="UTC"; -our($opt_h,$opt_o,$opt_v,$opt_k,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s); +our($opt_h,$opt_o,$opt_v,$opt_k,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_s,$opt_m,$opt_M); sub usage() { print STDERR <; chomp $cvs_tree; - close $f + close $f; } else { usage(); } +our @mergerx = (); +if ($opt_m) { + @mergerx = ( qr/\W(?:from|of|merge|merging|merged) (\w+)/i ); +} +if ($opt_M) { + push (@mergerx, qr/$opt_M/); +} + select(STDERR); $|=1; select(STDOUT); @@ -375,6 +383,22 @@ sub getwd() { return $pwd; } + +sub get_headref($$) { + my $name = shift; + my $git_dir = shift; + my $sha; + + if (open(C,"$git_dir/refs/heads/$name")) { + chomp($sha = ); + close(C); + length($sha) == 40 + or die "Cannot get head id for $name ($sha): $!\n"; + } + return $sha; +} + + -d $git_tree or mkdir($git_tree,0777) or die "Could not create $git_tree: $!"; @@ -549,6 +573,22 @@ my $commit = sub { my @par = (); @par = ("-p",$parent) if $parent; + + # loose detection of merges + # based on the commit msg + foreach my $rx (@mergerx) { + if ($logmsg =~ $rx) { + my $mparent = $1; + if ($mparent eq 'HEAD') { $mparent = $opt_o }; + if ( -e "$git_dir/refs/heads/$mparent") { + $mparent = get_headref($mparent, $git_dir); + push @par, '-p', $mparent; + # printing here breaks import # + # # print "Merge parent branch: $mparent\n" if $opt_v; + } + } + } + exec("env", "GIT_AUTHOR_NAME=$author", "GIT_AUTHOR_EMAIL=$author", diff --git a/git-rebase-script b/git-rebase-script index 026225ab2c..7b1d4900bd 100755 --- a/git-rebase-script +++ b/git-rebase-script @@ -17,16 +17,19 @@ case "$#,$1" in shift ;; esac +git-update-cache --refresh || exit + case "$#" in -1) upstream=`git-rev-parse --verify "$1"` && - ours=`git-rev-parse --verify HEAD` || exit - ;; -2) upstream=`git-rev-parse --verify "$1"` && - ours=`git-rev-parse --verify "$2"` || exit - ;; -*) echo >&2 "$usage"; exit 1 ;; +1) ours_symbolic=HEAD ;; +2) ours_symbolic="$2" ;; +*) die "$usage" ;; esac +upstream=`git-rev-parse --verify "$1"` && +ours=`git-rev-parse --verify "$ours_symbolic^` || exit +test "$(git-diff-cache --cached "$ours")" = "" || +die "Your working tree does not match $ours_symbolic." + git-read-tree -m -u $ours $upstream && git-rev-parse --verify "$upstream^0" >"$GIT_DIR/HEAD" || exit diff --git a/setup.c b/setup.c index 1710b16854..b8789de5c5 100644 --- a/setup.c +++ b/setup.c @@ -1,6 +1,6 @@ #include "cache.h" -static char *prefix_path(const char *prefix, int len, char *path) +char *prefix_path(const char *prefix, int len, char *path) { char *orig = path; for (;;) { diff --git a/update-cache.c b/update-cache.c index 1fcc59a9c0..63815ed658 100644 --- a/update-cache.c +++ b/update-cache.c @@ -321,6 +321,7 @@ int main(int argc, char **argv) { int i, newfd, entries, has_errors = 0; int allow_options = 1; + const char *prefix = setup_git_directory(); newfd = hold_index_file_for_update(&cache_file, get_index_file()); if (newfd < 0) @@ -381,6 +382,7 @@ int main(int argc, char **argv) } die("unknown option %s", path); } + path = prefix_path(prefix, prefix ? strlen(prefix) : 0, path); if (!verify_path(path)) { fprintf(stderr, "Ignoring path %s\n", argv[i]); continue;