git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Make cvs2git support remote CVS repos
@ 2005-05-25 18:11 Mark Allen
  2005-05-26  2:42 ` Linus Torvalds
  0 siblings, 1 reply; 2+ messages in thread
From: Mark Allen @ 2005-05-25 18:11 UTC (permalink / raw)
  To: git

[-- Attachment #1: Type: text/plain, Size: 630 bytes --]

Added a "--module=cvsmodule" command line option and (since we're going to process argv
anyway) made "-v" for verbose mode a command line option too, instead of a compile time
option.

I've tested it on some (small) private CVS repos and it *seems* to work, although some of
the initial commit ordering is wrong, but I think this is due to the commit time being
wrong within my CVS repo itself.

I didn't make author and email prettyprint, but I really want to make it a command line
option, the discussion from yesterday about whether prettyprinting should be at the
plumbing or porcelain layer notwithstanding.

Regards,

--Mark

[-- Attachment #2: 1888918109-add-remote-cvs.patch --]
[-- Type: application/octet-stream, Size: 1580 bytes --]

Index: cvs2git.c
===================================================================
--- a0e0d3940c350f14545a481b179217f626c93440/cvs2git.c  (mode:100644)
+++ uncommitted/cvs2git.c  (mode:100644)
@@ -32,6 +32,8 @@
 };
 
 static char *rcsdir;
+static char *cvsroot;
+static char *cvsmodule;
 
 static char date[100];
 static char author[100];
@@ -194,9 +196,13 @@
 	if (dir)
 		printf("mkdir -p %.*s\n", (int)(dir - name), name);
 
-	get_rcs_name(rcspathname, name, dir);
-		
-	printf("co -q -p -r%s '%s' > '%s'\n", version, rcspathname, name);
+	if ( !cvsmodule ) {
+		get_rcs_name(rcspathname, name, dir);
+		printf("co -q -p -r%s '%s' > '%s'\n", version, rcspathname, name);
+	} else {
+		printf("cvs -d %s checkout -r%s -p '%s/%s' > '%s'\n", cvsroot, version, cvsmodule, name, name);
+	}
+
 	printf("git-update-cache --add -- '%s'\n", name);
 }
 
@@ -217,13 +223,34 @@
 {
 	static char line[1000];
 	enum state state = Header;
+	int i;
+
+	for (i = 1; i < argc; i++) {
+		const char *arg = argv[i];
+		if (!memcmp(arg, "--module=", 9)) {
+			cvsroot = getenv("CVSROOT");
+			cvsmodule = (char *)arg+9;
+			continue;
+		} 
+		if (!strcmp(arg, "-v")) {
+			verbose = 1;
+			continue;
+		}
+	}
+
+	if (!cvsmodule)
+		rcsdir = getenv("RCSDIR");
 
-	rcsdir = getenv("RCSDIR");
-	if (!rcsdir) {
+	if (!cvsmodule && !rcsdir) {
 		fprintf(stderr, "I need an $RCSDIR\n");
 		exit(1);
 	}
 
+	if (cvsmodule && !cvsroot) {
+		fprintf(stderr, "I need a $CVSROOT\n");
+		exit(1);
+	}
+
 	printf("[ -d .git ] && exit 1\n");
 	printf("git-init-db\n");
 	printf("mkdir -p .git/refs/heads\n");

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Make cvs2git support remote CVS repos
  2005-05-25 18:11 [PATCH] Make cvs2git support remote CVS repos Mark Allen
@ 2005-05-26  2:42 ` Linus Torvalds
  0 siblings, 0 replies; 2+ messages in thread
From: Linus Torvalds @ 2005-05-26  2:42 UTC (permalink / raw)
  To: Mark Allen; +Cc: git



On Wed, 25 May 2005, Mark Allen wrote:
>
> Added a "--module=cvsmodule" command line option and (since we're going to process argv
> anyway) made "-v" for verbose mode a command line option too, instead of a compile time
> option.

Ahh.. You found out how to get CVS to check out individual files. 

The reason I use RCS "co" directly is because I couldn't figure out how
CVS can be made to do it. Of course, the raw RCS possibly also performs
better, but somebody should check that. If the overhead of using CVS to do
this is low enough, we should drop the raw RCS access, which should
simplify your patch and get rid of the need for "RCSDIR".

Anybody up for some performance testing?

			Linus

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-05-26  2:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-25 18:11 [PATCH] Make cvs2git support remote CVS repos Mark Allen
2005-05-26  2:42 ` Linus Torvalds

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).