Chris Rorvick <ch...@rorvick.com> writes:

> CVS patches are imported with the timezone offset of +0000 (UTC).
> Allow timezone offsets to be calculated from the the local timezone by
> adding -l to the command line or specifying cvsimport.l in the config.

A single "I do not like everybody's timestamp is in GMT, so instead
use the local timezone I the importer happen to be in" sounds more
like an uninteresting hack with limited application than a useful
new feature.  Even back in CVS days, many projects and repositories
worth converting to Git were multi-people projects that span across
timezones.

I am wondering if it is sufficient to enhance existing cvs-authors
file to tie a person to a timezone to add a feature like this in a
more sensible manner.  I'd assume that in many multi-person project,
one person, even when travelling, tend to record commits in a single
timezone (i.e. his or her home timezone).  Even for a single-person
project, adding a single entry ot the file is not too much to ask to
the user.  Being able to view his human-readable name and timezone
would be good value for the amount of trouble.

> This could be made the default behavior, as setting TZ=UTC in the
> environment before doing the import is equivalent to the current
> behavior.  But since a new default may be an unwelcome surprise to
> some, make this new behavior available as an option.

This, just like use of cvs-authors, will never be the default.

When you and somebody else import the same history recorded in the
same CVS repository, you would want to see the same resulting
history, and that is even more true when these two people may
perform their import incrementally.  If you switch the default
in one version of Git, their histories will diverge at a different
place depending on when their sysadmins updated Git.

The repeatability is why the script does not use the local timezone
the importer happens to be in.


> Signed-off-by: Chris Rorvick <ch...@rorvick.com>
> ---
>  Documentation/git-cvsimport.txt |   13 ++++++++++---
>  git-cvsimport.perl              |    9 +++++----
>  2 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
> index 6695ab3..9059ad1 100644
> --- a/Documentation/git-cvsimport.txt
> +++ b/Documentation/git-cvsimport.txt
> @@ -11,9 +11,9 @@ SYNOPSIS
>  [verse]
>  'git cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
>             [-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
> -           [-C <git_repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
> -           [-a] [-m] [-M <regex>] [-S <regex>] [-L <commitlimit>]
> -           [-r <remote>] [-R] [<CVS_module>]
> +           [-C <git_repository>] [-z <fuzz>] [-i] [-k] [-l] [-u]
> +           [-s <subst>] [-a] [-m] [-M <regex>] [-S <regex>]
> +           [-L <commitlimit>] [-r <remote>] [-R] [<CVS_module>]
>  
>  
>  DESCRIPTION
> @@ -89,6 +89,13 @@ the old cvs2git tool.
>       to avoid noisy changesets. Highly recommended, but off by default
>       to preserve compatibility with early imported trees.
>  
> +-l::
> +     Use the local timezone for computing the timezone offset of commit
> +     timestamps instead of the default of +0000 (UTC).  The `TZ`
> +     environment variable can be used to override the default local
> +     timezone, possibly useful if you are importing from a non-local
> +     repository.
> +
>  -u::
>       Convert underscores in tag and branch names to dots.
>  
> diff --git a/git-cvsimport.perl b/git-cvsimport.perl
> index 2f5da9e..927d75c 100755
> --- a/git-cvsimport.perl
> +++ b/git-cvsimport.perl
> @@ -28,9 +28,8 @@ use POSIX qw(strftime dup2 ENOENT);
>  use IPC::Open2;
>  
>  $SIG{'PIPE'}="IGNORE";
> -$ENV{'TZ'}="UTC";
>  
> -our 
> ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P,
>  $opt_s,$opt_m,@opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r, $opt_R);
> +our 
> ($opt_h,$opt_o,$opt_v,$opt_k,$opt_u,$opt_l,$opt_d,$opt_p,$opt_C,$opt_z,$opt_i,$opt_P,
>  $opt_s,$opt_m,@opt_M,$opt_A,$opt_S,$opt_L, $opt_a, $opt_r, $opt_R);
>  my (%conv_author_name, %conv_author_email);
>  
>  sub usage(;$) {
> @@ -40,7 +39,7 @@ sub usage(;$) {
>  Usage: git cvsimport     # fetch/update GIT from CVS
>         [-o branch-for-HEAD] [-h] [-v] [-d CVSROOT] [-A author-conv-file]
>         [-p opts-for-cvsps] [-P file] [-C GIT_repository] [-z fuzz] [-i] [-k]
> -       [-u] [-s subst] [-a] [-m] [-M regex] [-S regex] [-L commitlimit]
> +       [-l] [-u] [-s subst] [-a] [-m] [-M regex] [-S regex] [-L commitlimit]
>         [-r remote] [-R] [CVS_module]
>  END
>       exit(1);
> @@ -128,7 +127,7 @@ sub read_repo_config {
>       }
>  }
>  
> -my $opts = "haivmkuo:d:p:r:C:z:s:M:P:A:S:L:R";
> +my $opts = "haivmkulo:d:p:r:C:z:s:M:P:A:S:L:R";
>  read_repo_config($opts);
>  Getopt::Long::Configure( 'no_ignore_case', 'bundling' );
>  
> @@ -138,6 +137,8 @@ GetOptions( map { s/:/=s/; /M/ ? "$_\@" : $_ } split( 
> /(?!:)/, $opts ) )
>      or usage();
>  usage if $opt_h;
>  
> +$ENV{'TZ'}="UTC" unless $opt_l;
> +
>  if (@ARGV == 0) {
>               chomp(my $module = `git config --get cvsimport.module`);
>               push(@ARGV, $module) if $? == 0;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to