Merge from master for misc fixes.
This commit is contained in:
commit
942bc9c480
@ -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.
|
||||
|
||||
|
1
cache.h
1
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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 --
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
||||
|
2
setup.c
2
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 (;;) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user