Skip to content

Commit

Permalink
Merge branch 'rr/cvsexportcommit-w'
Browse files Browse the repository at this point in the history
* rr/cvsexportcommit-w:
  cvsexportcommit: Add switch to specify CVS workdir
  • Loading branch information
Junio C Hamano committed Nov 14, 2007
2 parents e318f60 + 648ee55 commit 4356736
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 17 deletions.
22 changes: 17 additions & 5 deletions Documentation/git-cvsexportcommit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@ 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
-----------
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
Expand Down Expand Up @@ -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.

Expand All @@ -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::
+
------------
Expand All @@ -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
---
Expand Down
39 changes: 27 additions & 12 deletions git-cvsexportcommit.perl
Original file line number Diff line number Diff line change
@@ -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);
our ($opt_h, $opt_P, $opt_p, $opt_v, $opt_c, $opt_f, $opt_a, $opt_m, $opt_d, $opt_u, $opt_w);

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);
Expand Down Expand Up @@ -274,6 +288,7 @@
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);
}
Expand Down Expand Up @@ -301,7 +316,7 @@

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);
}
Expand Down

0 comments on commit 4356736

Please sign in to comment.