summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2005-08-17 15:38:47 -0700
committerLibravatar Junio C Hamano <junkio@cox.net>2005-08-17 15:38:47 -0700
commit942bc9c4805e7d4d5f23c86df36977aa4fdb9f7d (patch)
treed366e1279e2cc08d0882d61e946c764d2ffaf81c
parentMerge changes from master. (diff)
parentMake rebase script saner. (diff)
downloadtgif-942bc9c4805e7d4d5f23c86df36977aa4fdb9f7d.tar.xz
Merge from master for misc fixes.
-rw-r--r--Documentation/git-cvsimport-script.txt12
-rw-r--r--cache.h1
-rwxr-xr-xgit-clone-script6
-rwxr-xr-xgit-commit-script6
-rwxr-xr-xgit-cvsimport-script48
-rwxr-xr-xgit-rebase-script17
-rw-r--r--setup.c2
-rw-r--r--update-cache.c2
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.
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 <<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
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;