зеркало из https://github.com/microsoft/git.git
Merge branch 'rr/cvsexportcommit-w'
* rr/cvsexportcommit-w: cvsexportcommit: Add switch to specify CVS workdir
This commit is contained in:
Коммит
4356736571
|
@ -8,7 +8,7 @@ git-cvsexportcommit - Export a single commit to a CVS checkout
|
|||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-cvsexportcommit' [-h] [-u] [-v] [-c] [-P] [-p] [-a] [-d cvsroot] [-f] [-m msgprefix] [PARENTCOMMIT] COMMITID
|
||||
'git-cvsexportcommit' [-h] [-u] [-v] [-c] [-P] [-p] [-a] [-d cvsroot] [-w cvsworkdir] [-f] [-m msgprefix] [PARENTCOMMIT] COMMITID
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
|
@ -16,8 +16,9 @@ DESCRIPTION
|
|||
Exports a commit from GIT to a CVS checkout, making it easier
|
||||
to merge patches from a git repository into a CVS repository.
|
||||
|
||||
Execute it from the root of the CVS working copy. GIT_DIR must be defined.
|
||||
See examples below.
|
||||
Specify the name of a CVS checkout using the -w switch or execute it
|
||||
from the root of the CVS working copy. In the latter case GIT_DIR must
|
||||
be defined. See examples below.
|
||||
|
||||
It does its best to do the safe thing, it will check that the files are
|
||||
unchanged and up to date in the CVS checkout, and it will not autocommit
|
||||
|
@ -61,6 +62,11 @@ OPTIONS
|
|||
-u::
|
||||
Update affected files from CVS repository before attempting export.
|
||||
|
||||
-w::
|
||||
Specify the location of the CVS checkout to use for the export. This
|
||||
option does not require GIT_DIR to be set before execution if the
|
||||
current directory is within a git repository.
|
||||
|
||||
-v::
|
||||
Verbose.
|
||||
|
||||
|
@ -76,6 +82,12 @@ $ git-cvsexportcommit -v <commit-sha1>
|
|||
$ cvs commit -F .msg <files>
|
||||
------------
|
||||
|
||||
Merge one patch into CVS (-c and -w options). The working directory is within the Git Repo::
|
||||
+
|
||||
------------
|
||||
$ git-cvsexportcommit -v -c -w ~/project_cvs_checkout <commit-sha1>
|
||||
------------
|
||||
|
||||
Merge pending patches into CVS automatically -- only if you really know what you are doing::
|
||||
+
|
||||
------------
|
||||
|
@ -86,11 +98,11 @@ $ git-cherry cvshead myhead | sed -n 's/^+ //p' | xargs -l1 git-cvsexportcommit
|
|||
|
||||
Author
|
||||
------
|
||||
Written by Martin Langhoff <martin@catalyst.net.nz>
|
||||
Written by Martin Langhoff <martin@catalyst.net.nz> and others.
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by Martin Langhoff <martin@catalyst.net.nz>
|
||||
Documentation by Martin Langhoff <martin@catalyst.net.nz> and others.
|
||||
|
||||
GIT
|
||||
---
|
||||
|
|
|
@ -1,28 +1,42 @@
|
|||
#!/usr/bin/perl -w
|
||||
|
||||
# Known limitations:
|
||||
# - does not propagate permissions
|
||||
# - error handling has not been extensively tested
|
||||
#
|
||||
|
||||
use strict;
|
||||
use Getopt::Std;
|
||||
use File::Temp qw(tempdir);
|
||||
use Data::Dumper;
|
||||
use File::Basename qw(basename dirname);
|
||||
|
||||
unless ($ENV{GIT_DIR} && -r $ENV{GIT_DIR}){
|
||||
die "GIT_DIR is not defined or is unreadable";
|
||||
}
|
||||
our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u, $opt_w);
|
||||
|
||||
our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u);
|
||||
|
||||
getopts('uhPpvcfam:d:');
|
||||
getopts('uhPpvcfam:d:w:');
|
||||
|
||||
$opt_h && usage();
|
||||
|
||||
die "Need at least one commit identifier!" unless @ARGV;
|
||||
|
||||
if ($opt_w) {
|
||||
unless ($ENV{GIT_DIR}) {
|
||||
# Remember where our GIT_DIR is before changing to CVS checkout
|
||||
my $gd =`git-rev-parse --git-dir`;
|
||||
chomp($gd);
|
||||
if ($gd eq '.git') {
|
||||
my $wd = `pwd`;
|
||||
chomp($wd);
|
||||
$gd = $wd."/.git" ;
|
||||
}
|
||||
$ENV{GIT_DIR} = $gd;
|
||||
}
|
||||
|
||||
if (! -d $opt_w."/CVS" ) {
|
||||
die "$opt_w is not a CVS checkout";
|
||||
}
|
||||
chdir $opt_w or die "Cannot change to CVS checkout at $opt_w";
|
||||
}
|
||||
unless ($ENV{GIT_DIR} && -r $ENV{GIT_DIR}){
|
||||
die "GIT_DIR is not defined or is unreadable";
|
||||
}
|
||||
|
||||
|
||||
my @cvs;
|
||||
if ($opt_d) {
|
||||
@cvs = ('cvs', '-d', $opt_d);
|
||||
|
@ -274,6 +288,7 @@ if ($dirtypatch) {
|
|||
print "You'll need to apply the patch in .cvsexportcommit.diff manually\n";
|
||||
print "using a patch program. After applying the patch and resolving the\n";
|
||||
print "problems you may commit using:";
|
||||
print "\n cd \"$opt_w\"" if $opt_w;
|
||||
print "\n $cmd\n\n";
|
||||
exit(1);
|
||||
}
|
||||
|
@ -301,7 +316,7 @@ sleep(1);
|
|||
|
||||
sub usage {
|
||||
print STDERR <<END;
|
||||
Usage: GIT_DIR=/path/to/.git ${\basename $0} [-h] [-p] [-v] [-c] [-f] [-m msgprefix] [ parent ] commit
|
||||
Usage: GIT_DIR=/path/to/.git ${\basename $0} [-h] [-p] [-v] [-c] [-f] [-u] [-w cvsworkdir] [-m msgprefix] [ parent ] commit
|
||||
END
|
||||
exit(1);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче