Subject: Re: [updated PATCH] Same default as cvsimport when using --use-log-author

From: Andy Whitcroft <[email-masked]>
Date: Tue, 29 Apr 2008 10:52:24 +0100

On Mon, Apr 28, 2008 at 11:18:23PM -0700, Eric Wong wrote:
> Junio C Hamano <[email-masked]> wrote:
> > "Stephen R. van den Berg" <[email-masked]> writes:
> > 
> > > git-svn supports an experimental option --use-log-author which currently
> > > results in:
> > >
> > > Author: foobaruser <unknown>
> > 
> > I have a question about this.  Is the "<unknown> coming from...
> > 
> > > This patches harmonises the result with cvsimport, and makes
> > > git-svn --use-log-author produce:
> > >
> > > Author: foobaruser <foobaruser>
> > > ...
> > > diff --git a/git-svn.perl b/git-svn.perl
> > > index b151049..846e739 100755
> > > --- a/git-svn.perl
> > > +++ b/git-svn.perl
> > > @@ -2434,6 +2434,9 @@ sub make_log_entry {
> > >  		} else {
> > >  			($name, $email) = ($name_field, 'unknown');
> > >  		}
> > 
> > ... this 'unknown' we see here?
> > 
> > > +	        if (!defined $email) {
> > > +		    $email = $name;
> > > +	        }
> > >  	}
> > 
> > I would think not -- if that is the case, the codepath you added as a fix
> > would not trigger.  Which means in some other cases, the 'unknown' we see
> > above in the context also still happens.  Is it a good thing?  Maybe we
> > would also want to make it consistently do "somebody <somebody>" instead,
> > by doing...
> > 
> > 	} else {
> > 		$name = $name_field;
> > 	}
> >         if (!defined $email) {
> > 	    $email = $name;
> >         }
> > 
> 
> I don't think Stephen's patch ever gets triggered, either.
> 
> This section of code was done by Andy, so I can't tell his motivations
> for using 'unknown' the way he did.

My motivation was that we had picked up a field which is supposed to be
in RFC822 From: format, ie Name <email>, and dispite trying pretty hard
we had not been able to find something that looked like an email to put
in the email field of the git author et al.  So we didn't really know,
hence 'unknown'.

That said it is not at all clear that putting 'unknown' in this field to
avoid putting an invalid email in this field makes much sense as it of
itself is just as invalid.  So I would probabally be just as happy with
your option here.

> $email does appear to get set correctly for the first two elsifs cases
> here in the existing code:
> 
> 		if (!defined $name_field) {
> 			#
> 		} elsif ($name_field =~ /(.*?)\s+<(.*)>/) {
> 			($name, $email) = ($1, $2);
> 		} elsif ($name_field =~ /(.*)@/) {
> 			($name, $email) = ($1, $name_field);
> 		} else {
> 			($name, $email) = ($name_field, $name_field);
> 
> So I propose the following one-line change instead of Stephen's:
> 
> diff --git a/git-svn.perl b/git-svn.perl
> index b151049..301a5b4 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -2432,7 +2432,7 @@ sub make_log_entry {
>  		} elsif ($name_field =~ /(.*)@/) {
>  			($name, $email) = ($1, $name_field);
>  		} else {
> -			($name, $email) = ($name_field, 'unknown');
> +			($name, $email) = ($name_field, $name_field);
>  		}
>  	}
>  	if (defined $headrev && $self->use_svm_props) {
> 
> -- 
> Eric Wong

-apw