diff options
author | Junio C Hamano <junkio@cox.net> | 2005-08-17 15:38:47 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-08-17 15:38:47 -0700 |
commit | 942bc9c4805e7d4d5f23c86df36977aa4fdb9f7d (patch) | |
tree | d366e1279e2cc08d0882d61e946c764d2ffaf81c | |
parent | Merge changes from master. (diff) | |
parent | Make rebase script saner. (diff) | |
download | tgif-942bc9c4805e7d4d5f23c86df36977aa4fdb9f7d.tar.xz |
Merge from master for misc fixes.
-rw-r--r-- | Documentation/git-cvsimport-script.txt | 12 | ||||
-rw-r--r-- | cache.h | 1 | ||||
-rwxr-xr-x | git-clone-script | 6 | ||||
-rwxr-xr-x | git-commit-script | 6 | ||||
-rwxr-xr-x | git-cvsimport-script | 48 | ||||
-rwxr-xr-x | git-rebase-script | 17 | ||||
-rw-r--r-- | setup.c | 2 | ||||
-rw-r--r-- | update-cache.c | 2 |
8 files changed, 78 insertions, 16 deletions
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 <branch-for-HEAD> ] [ -h ] [ -v ] [ -d <CVSROOT> ] [ -p <options-for-cvsps> ] [ -C <GIT_repository> ] [ -i ] [ -k ] - [ -s <subst> ] [ <CVS_module> ] + [ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ] 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 <regex>:: + 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. @@ -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 <<END; Usage: ${\basename $0} # fetch/update GIT from CVS [ -o branch-for-HEAD ] [ -h ] [ -v ] [ -d CVSROOT ] [ -p opts-for-cvsps ] [ -C GIT_repository ] [ -z fuzz ] - [ -i ] [ -k ] [-s subst] [ CVS_module ] + [ -i ] [ -k ] [-s subst] [ -m ] [ -M regex] [ CVS_module ] END exit(1); } -getopts("hivko:d:p:C:z:s:") or usage(); +getopts("hivmko:d:p:C:z:s:M:") or usage(); usage if $opt_h; @ARGV <= 1 or usage(); @@ -71,11 +71,19 @@ if ($#ARGV == 0) { die 'Failed to open CVS/Repository'; $cvs_tree = <$f>; 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 = <C>); + 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 @@ -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; |