git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-cvsimport: support local timezone
@ 2012-10-11 20:48 Chris Rorvick
  2012-10-11 22:43 ` Michael Haggerty
  0 siblings, 1 reply; 4+ messages in thread
From: Chris Rorvick @ 2012-10-11 20:48 UTC (permalink / raw)
  To: git

CVS patches are unconditionally imported with a UTC timezone.  Allow
the local timezone by adding -l to the command line or specifying
cvsimport.l in the config.

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 os an option.

Signed-off-by: Chris Rorvick <chris@rorvick.com>
---

I have tested this with various TZ values (including "UTC") and confirmed
that the <fuzz> + 5min timeout is observed correctly in each case.

Chris Rorvick

 Documentation/git-cvsimport.txt |   11 ++++++++---
 git-cvsimport.perl              |   13 +++++++------
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt
index 6695ab3..41cd289 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,11 @@ the old cvs2git tool.
 	to avoid noisy changesets. Highly recommended, but off by default
 	to preserve compatibility with early imported trees.
 
+-l::
+	Apply the local timezone to timestamps.  The `TZ` environment
+	variable can be used to override the default, possibly useful
+	if you are importing 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 8032f23..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;
@@ -582,7 +583,7 @@ sub pdate($) {
 	m#(\d{2,4})/(\d\d)/(\d\d)\s(\d\d):(\d\d)(?::(\d\d))?#
 		or die "Unparseable date: $d\n";
 	my $y=$1; $y-=1900 if $y>1900;
-	return timegm($6||0,$5,$4,$3,$2-1,$y);
+	return timelocal($6||0,$5,$4,$3,$2-1,$y);
 }
 
 sub pmode($) {
@@ -844,7 +845,7 @@ sub commit {
 		}
 	}
 
-	my $commit_date = strftime("+0000 %Y-%m-%d %H:%M:%S",gmtime($date));
+	my $commit_date = strftime("%z %Y-%m-%d %H:%M:%S",localtime($date));
 	$ENV{GIT_AUTHOR_NAME} = $author_name;
 	$ENV{GIT_AUTHOR_EMAIL} = $author_email;
 	$ENV{GIT_AUTHOR_DATE} = $commit_date;
-- 
1.7.1

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

* Re: [PATCH] git-cvsimport: support local timezone
  2012-10-11 20:48 [PATCH] git-cvsimport: support local timezone Chris Rorvick
@ 2012-10-11 22:43 ` Michael Haggerty
  2012-10-12  0:14   ` Christopher Rorvick
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Haggerty @ 2012-10-11 22:43 UTC (permalink / raw)
  To: Chris Rorvick; +Cc: git

On 10/11/2012 10:48 PM, Chris Rorvick wrote:
> CVS patches are unconditionally imported with a UTC timezone.  Allow
> the local timezone by adding -l to the command line or specifying
> cvsimport.l in the config.
> 
> 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 os an option.

According to rcsfile(7), all times in RCS/CVS files are recorded in UTC.
 So why do you need this feature?

Michael

-- 
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/

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

* Re: [PATCH] git-cvsimport: support local timezone
  2012-10-11 22:43 ` Michael Haggerty
@ 2012-10-12  0:14   ` Christopher Rorvick
  2012-10-12  7:57     ` Michael Haggerty
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher Rorvick @ 2012-10-12  0:14 UTC (permalink / raw)
  To: Michael Haggerty; +Cc: git

On Thu, Oct 11, 2012 at 5:43 PM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
> On 10/11/2012 10:48 PM, Chris Rorvick wrote:
>> CVS patches are unconditionally imported with a UTC timezone.  Allow
>> the local timezone by adding -l to the command line or specifying
>> cvsimport.l in the config.
>>
>> 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 os an option.
>
> According to rcsfile(7), all times in RCS/CVS files are recorded in UTC.
>  So why do you need this feature?
>
> Michael

Hi Michael,

Precisely because of this limitation.  RCS files are not as expressive
as a Git commit so I need a way to fill in the blanks.

This is analogous to the cvs-authors file.  The RCS files in a CVS
repository say the author of my commits is "crorvick" but that is
neither my name nor email.  cvsimport allows me to overcome this
limitation by specifying a mapping from author username to full name
and email.

Likewise, just because the RCS file has a UTC timestamp does not mean
the commit originated in Greenwich, UK.  Git includes the timezone
offset in its timestamps, so it is reasonable to allow me to specify
what is appropriate.

This is not a big deal for a one-time import as a simple filter-branch
run can fix this pretty quickly.  But this feature would be nice when
running cvsimport incrementally.

Thanks!

Chris Rorvick

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

* Re: [PATCH] git-cvsimport: support local timezone
  2012-10-12  0:14   ` Christopher Rorvick
@ 2012-10-12  7:57     ` Michael Haggerty
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Haggerty @ 2012-10-12  7:57 UTC (permalink / raw)
  To: Christopher Rorvick; +Cc: git

On 10/12/2012 02:14 AM, Christopher Rorvick wrote:
> On Thu, Oct 11, 2012 at 5:43 PM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
>> On 10/11/2012 10:48 PM, Chris Rorvick wrote:
>>> CVS patches are unconditionally imported with a UTC timezone.  Allow
>>> the local timezone by adding -l to the command line or specifying
>>> cvsimport.l in the config.
>>>
>>> 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 os an option.
>>
>> According to rcsfile(7), all times in RCS/CVS files are recorded in UTC.
>>  So why do you need this feature?
> 
> [...]
> Likewise, just because the RCS file has a UTC timestamp does not mean
> the commit originated in Greenwich, UK.  Git includes the timezone
> offset in its timestamps, so it is reasonable to allow me to specify
> what is appropriate.

Ahh, OK, I hadn't realized that git stores (UTC time + time zone).  I
mistakenly thought you wanted to use a time zone to transform CVS-time
to git-time, i.e., as if the CVS time were recorded in local time.  Your
actual goal makes sense.

[And it is something I should consider building into cvs2git.]

Michael

-- 
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/

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

end of thread, other threads:[~2012-10-12  7:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-11 20:48 [PATCH] git-cvsimport: support local timezone Chris Rorvick
2012-10-11 22:43 ` Michael Haggerty
2012-10-12  0:14   ` Christopher Rorvick
2012-10-12  7:57     ` Michael Haggerty

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).