git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andreas Ericsson <ae@op5.se>
To: Eric Wong <normalperson@yhbt.net>
Cc: Adrian Wilkins <adrian.wilkins@gmail.com>, git@vger.kernel.org
Subject: Re: BUG: git-svn does not escape literal backslashes in author names.
Date: Sun, 18 Nov 2007 00:17:13 +0100	[thread overview]
Message-ID: <473F7679.4010901@op5.se> (raw)
In-Reply-To: <20071117204348.GA16333@muzzle>

Eric Wong wrote:
> Adrian Wilkins <adrian.wilkins@gmail.com> wrote:
> 
>> Can I suggest that you make the authors file compulsory by default as well?
> 
> Not going to happen.  I personally _hate_ having to track down author
> information and make an authors file, and I suspect many others feel the
> same.  I've never used this feature in git-svn on any real repository.
> 

I wholeheartedly agree. One thing that could be improved in this area though
is to do what git-cvsimport does, and stash the authors file in $GIT_DIR and
re-read it on every invocation. I've forgotten to add that -A switch numerous
times when fetching incrementally and it always annoys me enormously.

Something like this, perhaps? It needs checking. My perl is.. well, you can
see for yourselves, and unfortunately I have no possibility to test this
until monday when I'm back on a sane link. It should work as a starting
point though. It applies cleanly on top of current next.

---%<---%<---%<---
From: Andreas Ericsson <ae@op5.se>
Subject: git svn: Cache author info in $GIT_DIR/author-cache

git-cvsimport does it, so it's reasonable that git-svn users
expect the same functionality. It's also damn convenient.

Signed-off-by: Andreas Ericsson <ae@op5.se>
---
 Documentation/git-svn.txt |    3 +++
 git-svn.perl              |   25 +++++++++++++++++++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 488e4b1..446a7d7 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -276,6 +276,9 @@ committer name that does not exist in the authors-file, git-svn
 will abort operation. The user will then have to add the
 appropriate entry.  Re-running the previous git-svn command
 after the authors-file is modified should continue operation.
+For convenience, this data is saved to $GIT_DIR/author-cache
+each time the '-A' option is provided and read from that same
+file each time git-svn is run.
 
 config key: svn.authorsfile
 
diff --git a/git-svn.perl b/git-svn.perl
index e3e00fd..0a989ed 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -14,6 +14,7 @@ my $cmd_dir_prefix = eval {
        command_oneline([qw/rev-parse --show-prefix/], STDERR => 0)
 } || '';
 
+my $author_cache;
 my $git_dir_user_set = 1 if defined $ENV{GIT_DIR};
 $ENV{GIT_DIR} ||= '.git';
 $Git::SVN::default_repo_id = 'svn';
@@ -203,7 +204,6 @@ exit 1 if (!$rv && $cmd && $cmd ne 'log');
 usage(0) if $_help;
 version() if $_version;
 usage(1) unless defined $cmd;
-load_authors() if $_authors;
 
 # make sure we're always running
 unless ($cmd =~ /(?:clone|init|multi-init)$/) {
@@ -226,6 +226,14 @@ unless ($cmd =~ /(?:clone|init|multi-init)$/) {
                $ENV{GIT_DIR} = $git_dir;
        }
 }
+
+$author_cache = $ENV{GIT_DIR} . "/author-cache";
+load_authors($_authors) if $_authors;
+unless ($cmd =~ /(?:clone|init|multi-init)$/) {
+       -f $author_cache and load_authors($author_cache);
+       write_author_cache();
+}
+
 unless ($cmd =~ /^(?:clone|init|multi-init|commit-diff)$/) {
        Git::SVN::Migration::migration_check();
 }
@@ -297,6 +305,8 @@ sub do_git_init_db {
                command_noisy('config', "$pfx.$i", $icv{$i});
                $set = $i;
        }
+
+       write_author_cache() if %users;
 }
 
 sub init_subdir {
@@ -900,7 +910,8 @@ sub file_to_s {
 
 # '<svn username> = real-name <email address>' mapping based on git-svnimport:
 sub load_authors {
-       open my $authors, '<', $_authors or die "Can't open $_authors $!\n";
+       my ($file) = @_;
+       open my $authors, '<', $file or die "Can't open $file $!\n";
        my $log = $cmd eq 'log';
        while (<$authors>) {
                chomp;
@@ -915,6 +926,16 @@ sub load_authors {
        close $authors or croak $!;
 }
 
+sub write_author_cache {
+       open my $f, '>', $author_cache
+         or die "Can't open author cache $author_cache for writing: $!\n";
+       foreach (keys %users) {
+               print $f "$_=$users{$_}[0] <$users{$_}[1]>\n";
+       }
+
+       close $f or croak $!;
+}
+
 # convert GetOpt::Long specs for use by git-config
 sub read_repo_config {
        return unless -d $ENV{GIT_DIR};
-- 
1.5.3.5.1527.g6161
---%<---%<---%<---

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

      reply	other threads:[~2007-11-17 23:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-12 14:28 BUG: git-svn does not escape literal backslashes in author names Adrian Wilkins
2007-11-17 20:18 ` BUG in gitk (was: Re: BUG: git-svn does not escape literal backslashes in author names.) Benoit Sigoure
2007-11-17 20:43 ` BUG: git-svn does not escape literal backslashes in author names Eric Wong
2007-11-17 23:17   ` Andreas Ericsson [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=473F7679.4010901@op5.se \
    --to=ae@op5.se \
    --cc=adrian.wilkins@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).