* [PATCH] import-tars: Allow per-tar author and commit message. @ 2009-08-23 20:34 Peter Krefting 2009-08-23 21:24 ` Nanako Shiraishi 2009-08-23 21:46 ` Sam Vilain 0 siblings, 2 replies; 8+ messages in thread From: Peter Krefting @ 2009-08-23 20:34 UTC (permalink / raw) To: git Instead of having each imported tar ball's commit message be "Imported from filename.tar", optionally take a commit message from a file called "filename.tar.msg". Instead of having each commit have the same author and committer information, optionally read the committer information from a file called "filename.tar.committer" and author from a file called "filename.tar.author". Signed-off-by: Peter Krefting <peter@softwolves.pp.se> --- I used this (albeit based on a slightly earlier verison of the script) to generate a better-looking history when importing http://git.debian.org/?p=crashmail/jamnntpd.git and http://git.debian.org/?p=crashmail/crashmail.git into Git, using excerpts from the embedded change history as commit messages. contrib/fast-import/import-tars.perl | 42 +++++++++++++++++++++++++++++++-- 1 files changed, 39 insertions(+), 3 deletions(-) diff --git a/contrib/fast-import/import-tars.perl b/contrib/fast-import/import-tars.perl index 78e40d2..7aad16f 100755 --- a/contrib/fast-import/import-tars.perl +++ b/contrib/fast-import/import-tars.perl @@ -109,12 +109,48 @@ foreach my $tar_file (@ARGV) $have_top_dir = 0 if $top_dir ne $1; } + # Optionally read a commit message from <filename.tar>.msg + my $commit_msg = "Imported from $tar_file."; + if (open MSG, '<', "${tar_file}.msg") + { + $commit_msg = ''; + while (<MSG>) + { + $commit_msg .= $_; + } + close MSG; + } + + # Optionally read a committer from <filename.tar>.committer + # (first line is name, second line is e-mail address). + my $this_committer_name = $committer_name; + my $this_committer_email = $committer_email; + if (open COMMITTER, '<', "${tar_file}.committer") + { + ($this_committer_name, $this_committer_email) = <COMMITTER>; + chomp $this_committer_name; + chomp $this_committer_email; + close COMMITTER; + } + + # Optionally read an author from <filename.tar>.author + # (first line is name, second line is e-mail address). + my $this_author_name = $author_name; + my $this_author_email = $author_email; + if (open AUTHOR, '<', "${tar_file}.author") + { + ($this_author_name, $this_author_email) = <AUTHOR>; + chomp $this_author_name; + chomp $this_author_email; + close AUTHOR; + } + print FI <<EOF; commit $branch_ref -author $author_name <$author_email> $author_time +0000 -committer $committer_name <$committer_email> $commit_time +0000 +author $this_author_name <$this_author_email> $author_time +0000 +committer $this_committer_name <$this_committer_email> $commit_time +0000 data <<END_OF_COMMIT_MESSAGE -Imported from $tar_file. +$commit_msg END_OF_COMMIT_MESSAGE deleteall -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-23 20:34 [PATCH] import-tars: Allow per-tar author and commit message Peter Krefting @ 2009-08-23 21:24 ` Nanako Shiraishi 2009-08-23 21:46 ` Sam Vilain 1 sibling, 0 replies; 8+ messages in thread From: Nanako Shiraishi @ 2009-08-23 21:24 UTC (permalink / raw) To: Peter Krefting; +Cc: git Quoting Peter Krefting <peter@softwolves.pp.se> > Instead of having each imported tar ball's commit message be "Imported > from filename.tar", optionally take a commit message from a file > called "filename.tar.msg". > > Instead of having each commit have the same author and committer > information, optionally read the committer information from a file > called "filename.tar.committer" and author from a file called > "filename.tar.author". Instead of requiring the user to have millions of separate files, how about reading a single metainfo file that may look like this? [file "git-1.0.0.tar"] message = "Commit log message for the first revision" author = "A U Thor <au.thor@example.xz>" [file "git-1.0.1.tar"] message = "Commit log message for the first maintenance revision" author = "F I Xer <fi.xer@example.xz>" and give the name of that metainfo file from the command line? The message may be awkward to put in the metainfo file itself, and it might be easier to refer to the name of a file that is outside the metainfo file itself, but the point is that doing so will both reduce the clutter in your folders, and will give people an option to avoid accidentally reading from random files in the same folder as the tar files that unfortunately have names that ends with the suffixes you randomly chose in this patch. -- Nanako Shiraishi http://ivory.ap.teacup.com/nanako3/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-23 20:34 [PATCH] import-tars: Allow per-tar author and commit message Peter Krefting 2009-08-23 21:24 ` Nanako Shiraishi @ 2009-08-23 21:46 ` Sam Vilain 2009-08-24 17:07 ` Peter Krefting 1 sibling, 1 reply; 8+ messages in thread From: Sam Vilain @ 2009-08-23 21:46 UTC (permalink / raw) To: Peter Krefting; +Cc: git Peter Krefting wrote: > Instead of having each imported tar ball's commit message be "Imported > from filename.tar", optionally take a commit message from a file > called "filename.tar.msg". > > Instead of having each commit have the same author and committer > information, optionally read the committer information from a file > called "filename.tar.committer" and author from a file called > "filename.tar.author". > > Signed-off-by: Peter Krefting <peter@softwolves.pp.se> > --- > I used this (albeit based on a slightly earlier verison of the script) > to generate a better-looking history when importing > http://git.debian.org/?p=crashmail/jamnntpd.git and > http://git.debian.org/?p=crashmail/crashmail.git into Git, using > excerpts from the embedded change history as commit messages. > > contrib/fast-import/import-tars.perl | 42 +++++++++++++++++++++++++++++++-- > 1 files changed, 39 insertions(+), 3 deletions(-) > > diff --git a/contrib/fast-import/import-tars.perl b/contrib/fast-import/import-tars.perl > index 78e40d2..7aad16f 100755 > --- a/contrib/fast-import/import-tars.perl > +++ b/contrib/fast-import/import-tars.perl > @@ -109,12 +109,48 @@ foreach my $tar_file (@ARGV) > $have_top_dir = 0 if $top_dir ne $1; > } > > + # Optionally read a commit message from <filename.tar>.msg > + my $commit_msg = "Imported from $tar_file."; > + if (open MSG, '<', "${tar_file}.msg") > + { > + $commit_msg = ''; > + while (<MSG>) > + { > + $commit_msg .= $_; > + } > + close MSG; > + } > + > + # Optionally read a committer from <filename.tar>.committer > + # (first line is name, second line is e-mail address). > + my $this_committer_name = $committer_name; > + my $this_committer_email = $committer_email; > + if (open COMMITTER, '<', "${tar_file}.committer") > + { > + ($this_committer_name, $this_committer_email) = <COMMITTER>; > + chomp $this_committer_name; > + chomp $this_committer_email; > + close COMMITTER; > + } > + > + # Optionally read an author from <filename.tar>.author > + # (first line is name, second line is e-mail address). > + my $this_author_name = $author_name; > + my $this_author_email = $author_email; > + if (open AUTHOR, '<', "${tar_file}.author") > + { > + ($this_author_name, $this_author_email) = <AUTHOR>; > + chomp $this_author_name; > + chomp $this_author_email; > + close AUTHOR; > + } > + > It's not necessary to duplicate code like that. Also I wonder if there isn't a nicer interface for users. Why not allow the file to specify From:, Committer: etc as header lines # Optionally read a commit message from <filename.tar>.msg my $commit_msg = "Imported from $tar_file."; my ($committer, $commit_date, $author, $author_date); if (open MSG, '<', "${tar_file}.desc") { my $state = "header"; $commit_msg = ''; my $last_val; while (<MSG>) { if ($state eq "header") { if (m{^([A-Z][\w\-]+): (.*)}) { my ($header, $value) = $1; $last_val = ($header eq "Date" ? \$author_date : $header eq "From" ? \$author : $header eq "Subject" ? \$commit_msg : $header eq "Commit-Date" ? \$commit_date : $header eq "Committer" ? \$committer : undef ); if ($last_val) { $$last_val = $value; } else { warn "ignoring header '$header' in ${tar_file}.desc line $.\n"; } } elsif (m{^\s+(.+)}) { if ($last_val) { $$last_val .= " $1"; } } elsif (m{^\s*$}) { $commit_msg .= ($commit_msg ? "\n" : "") . "\n"; $state = "body"; next; } } if ($state eq "body") { $commit_msg .= $_; } } close MSG; } ($this_committer_name, $this_committer_email) = choose_email($committer, $committer_name, $committer_email); ($this_author_name, $this_author_email) = choose_email($author, $author_name, $author_email); sub choose_email { my ($spec_combined, $def_name, $def_email) = @_; return ($def_name, $def_email) unless $spec_combined; if ($spec_combined =~ m{^([^<]+) <([^@]+@[^@]+)>$})) { ($1, $2); } elsif ($spec_combined =~ m{^([^@]+@[^@]+) \((.*)\)$}) { ($2, $1); } else { warn "Couldn't parse e-mail address '$spec_combined'"; ($def_name, $def_email); } } Something like that, anyway... Sam > print FI <<EOF; > commit $branch_ref > -author $author_name <$author_email> $author_time +0000 > -committer $committer_name <$committer_email> $commit_time +0000 > +author $this_author_name <$this_author_email> $author_time +0000 > +committer $this_committer_name <$this_committer_email> $commit_time +0000 > data <<END_OF_COMMIT_MESSAGE > -Imported from $tar_file. > +$commit_msg > END_OF_COMMIT_MESSAGE > > deleteall > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-23 21:46 ` Sam Vilain @ 2009-08-24 17:07 ` Peter Krefting 2009-08-24 18:54 ` Junio C Hamano 0 siblings, 1 reply; 8+ messages in thread From: Peter Krefting @ 2009-08-24 17:07 UTC (permalink / raw) To: Nanako Shiraishi, Sam Vilain; +Cc: git Nanako Shiraishi: > Instead of requiring the user to have millions of separate files, how > about reading a single metainfo file that may look like this? The advantage of having one (or more) files per tarball is that I can use the shell's tab completion to make sure I spell the name of the archive correctly. And that it makes it a lot easier to parse. Sam Vilain: > Also I wonder if there isn't a nicer interface for users. Why not allow > the file to specify From:, Committer: etc as header lines Good idea. My initial patch was simple, just using the .msg file to add a message. Then I needed to have a different author for one commit, so I added the .author file. Then came the changes that are in the current import-tars that separates author and committer, hence the .committer file. Somewhere along there it became a bit too complex. Parsing the .msg file for (optional) committer and author info is probably better. I'll update the patch. -- \\// Peter - http://www.softwolves.pp.se/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-24 17:07 ` Peter Krefting @ 2009-08-24 18:54 ` Junio C Hamano 2009-08-25 18:52 ` Peter Krefting 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2009-08-24 18:54 UTC (permalink / raw) To: Peter Krefting; +Cc: Nanako Shiraishi, Sam Vilain, git Peter Krefting <peter@softwolves.pp.se> writes: > Nanako Shiraishi: > >> Instead of requiring the user to have millions of separate files, >> how about reading a single metainfo file that may look like this? > > The advantage of having one (or more) files per tarball is that I can > use the shell's tab completion to make sure I spell the name of the > archive correctly. And that it makes it a lot easier to parse. > > > Sam Vilain: > >> Also I wonder if there isn't a nicer interface for users. Why not allow >> the file to specify From:, Committer: etc as header lines > > Good idea. That sounds like a sensible thing to do. I however am a bit uneasy to see that the patch didn't seem to (and the rerolled one does not seem to, either) allow any way to forbid reading of the .msg files, other than an obvious workaround of running "find | xargs rm" beforehand. Unlike your "import-directories" that is a brand new program without any existing users, you are touching code that other people have already used, and you do not want to change the behaviour for them only because they happen to have unrelated files in the same directory. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-24 18:54 ` Junio C Hamano @ 2009-08-25 18:52 ` Peter Krefting 2009-08-25 19:21 ` Junio C Hamano 0 siblings, 1 reply; 8+ messages in thread From: Peter Krefting @ 2009-08-25 18:52 UTC (permalink / raw) To: Junio C Hamano; +Cc: Nanako Shiraishi, Sam Vilain, git Junio C Hamano: > Unlike your "import-directories" that is a brand new program without any > existing users, you are touching code that other people have already used, > and you do not want to change the behaviour for them only because they > happen to have unrelated files in the same directory. Indeed. Not that it is likely that one have stray filetar.gz.msg files just laying around, but I'll add a command line switch to enable the new functinality. That sounds like the most reasonable way to go, leaving the old usage completely unaffected by the change. -- \\// Peter - http://www.softwolves.pp.se/ ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-25 18:52 ` Peter Krefting @ 2009-08-25 19:21 ` Junio C Hamano 2009-08-26 9:17 ` Peter Krefting 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2009-08-25 19:21 UTC (permalink / raw) To: Peter Krefting; +Cc: Nanako Shiraishi, Sam Vilain, git Peter Krefting <peter@softwolves.pp.se> writes: > Junio C Hamano: > >> Unlike your "import-directories" that is a brand new program without >> any existing users, you are touching code that other people have >> already used, and you do not want to change the behaviour for them >> only because they happen to have unrelated files in the same >> directory. > > Indeed. Not that it is likely that one have stray filetar.gz.msg files > just laying around, but I'll add a command line switch to enable the > new functinality. That sounds like the most reasonable way to go, > leaving the old usage completely unaffected by the change. And the switch could be "--metainfo=<ext>", so that people can choose to use other extensions, e.g. with "--metainfo=info" file.tar.info would be read for descriptions. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] import-tars: Allow per-tar author and commit message. 2009-08-25 19:21 ` Junio C Hamano @ 2009-08-26 9:17 ` Peter Krefting 0 siblings, 0 replies; 8+ messages in thread From: Peter Krefting @ 2009-08-26 9:17 UTC (permalink / raw) To: Junio C Hamano; +Cc: Nanako Shiraishi, Sam Vilain, Git Mailing List Junio C Hamano: > And the switch could be "--metainfo=<ext>", so that people can choose to > use other extensions, e.g. with "--metainfo=info" file.tar.info would be > read for descriptions. That's a good idea. I just made a simple "-m" switch to enable the new code. I'll change it into a "--metainfo" and post an updated patch later. -- \\// Peter - http://www.softwolves.pp.se/ ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-08-26 9:22 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-23 20:34 [PATCH] import-tars: Allow per-tar author and commit message Peter Krefting 2009-08-23 21:24 ` Nanako Shiraishi 2009-08-23 21:46 ` Sam Vilain 2009-08-24 17:07 ` Peter Krefting 2009-08-24 18:54 ` Junio C Hamano 2009-08-25 18:52 ` Peter Krefting 2009-08-25 19:21 ` Junio C Hamano 2009-08-26 9:17 ` Peter Krefting
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).