git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-cvsimport-script: handling of tags

From
HAH. Peter Anvin <hpa@zytor.com>
Date
Sep 6, 2005, 17:36 UTC
Message-ID
<431DD381.4050709@zytor.com>

This patch changes git-cvsimport-script so that it creates tag objects instead of refs to commits, and adds an option, -u, to convert underscores in branch and tag names to dots (since CVS doesn't allow dots in branches and tags.)

Pullable tree at master.kernel.org:/home/hpa/git/cvsimport.git/
	-hpa
diff --git a/Documentation/git-cvsimport-script.txt b/Documentation/git-cvsimport-script.txt
--- a/Documentation/git-cvsimport-script.txt
+++ b/Documentation/git-cvsimport-script.txt
@@ -44,6 +44,9 @@ OPTIONS
 	to avoid noisy changesets. Highly recommended, but off by default
 	to preserve compatibility with early imported trees. 
 
+-u::
+	Convert underscores in tag and branch names to dots.
+
 -o <branch-for-HEAD>::
 	The 'HEAD' branch from CVS is imported to the 'origin' branch within
 	the git repository, as 'HEAD' already has a special meaning for git.
diff --git a/git-cvsimport-script b/git-cvsimport-script
--- a/git-cvsimport-script
+++ b/git-cvsimport-script
@@ -24,23 +24,24 @@ use Time::Local;
 use IO::Socket;
 use IO::Pipe;
 use POSIX qw(strftime dup2);
+use IPC::Open2;
 
 $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,$opt_m,$opt_M);
+our($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$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] [ -m ] [ -M regex] [ CVS_module ]
+       [-o branch-for-HEAD] [-h] [-v] [-d CVSROOT]
+       [-p opts-for-cvsps] [-C GIT_repository] [-z fuzz]
+       [-i] [-k] [-u] [-s subst] [-m] [-M regex] [CVS_module]
 END
 	exit(1);
 }
 
-getopts("hivmko:d:p:C:z:s:M:") or usage();
+getopts("hivmkuo:d:p:C:z:s:M:") or usage();
 usage if $opt_h;
 
 @ARGV <= 1 or usage();
@@ -628,13 +629,37 @@ my $commit = sub {
 		or die "Cannot write branch $branch for update: $!\n";
 
 	if($tag) {
-		open(C,">$git_dir/refs/tags/$tag")
-			or die "Cannot create tag $tag: $!\n";
-		print C "$cid\n"
-			or die "Cannot write tag $branch: $!\n";
+		my($in, $out) = ('','');
+	        my($xtag) = $tag;
+		$xtag =~ s/\s+\*\*.*$//; # Remove stuff like ** INVALID ** and ** FUNKY **
+		$xtag =~ tr/_/\./ if ( $opt_u );
+		
+		my $pid = open2($in, $out, 'git-mktag');
+		print $out "object $cid\n".
+		    "type commit\n".
+		    "tag $xtag\n".
+		    "tagger $author <$author>\n"
+		    or die "Cannot create tag object $xtag: $!\n";
+		close($out)
+		    or die "Cannot create tag object $xtag: $!\n";
+
+		my $tagobj = <$in>;
+		chomp $tagobj;
+
+		if ( !close($in) or waitpid($pid, 0) != $pid or
+		     $? != 0 or $tagobj !~ /^[0123456789abcdef]{40}$/ ) {
+		    die "Cannot create tag object $xtag: $!\n";
+	        }
+		
+
+		open(C,">$git_dir/refs/tags/$xtag")
+			or die "Cannot create tag $xtag: $!\n";
+		print C "$tagobj\n"
+			or die "Cannot write tag $xtag: $!\n";
 		close(C)
-			or die "Cannot write tag $branch: $!\n";
-		print "Created tag '$tag' on '$branch'\n" if $opt_v;
+			or die "Cannot write tag $xtag: $!\n";
+
+		print "Created tag '$xtag' on '$branch'\n" if $opt_v;
 	}
 };
 
Next: H. Peter Anvin
Message 1 of 10 in “git-cvsimport-script: handling of tags”
  1. git-cvsimport-script: handling of tagsH. Peter Anvin, Sep 6, 2005
  2. H. Peter AnvinSep 6, 2005
  3. H. Peter AnvinSep 6, 2005
  4. Martin LanghoffSep 6, 2005
  5. H. Peter AnvinSep 6, 2005
  6. Martin LanghoffSep 6, 2005
  7. H. Peter AnvinSep 6, 2005
  8. Junio C HamanoSep 6, 2005
  9. Martin LanghoffSep 7, 2005
  10. H. Peter AnvinSep 7, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.