[PATCH v2 0/2] git-cvsimport: support local timezone

DORMANTno replies

3 messages, 1 author, 2016-06-15 · open the first message on its own page

[PATCH v2 0/2] git-cvsimport: support local timezone

From: Chris Rorvick <hidden>
Date: 2016-06-15 22:55:00

Changes to support local timezone offsets in imported commits.  Modified
documentation to clarify behavior of new -l option.

Also, I split the original patch into two because using
localtime()/timelocal() does not affect current functionality, but makes
for sane results if someone monkeys with the hardcoded TZ environment
setting.  Also, the problem solved by the second patch could also be
addressed by simply removing the hardcoded TZ setting in favor of having
the user specify in their environment.  Both of these solutions build on
the changes made in the first patch, though.

Chris Rorvick (2):
  git-cvsimport: use localtime for converting timestamps
  git-cvsimport: allow local timezone for commits

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

[PATCH v2 1/2] git-cvsimport: use localtime for converting timestamps

From: Chris Rorvick <hidden>
Date: 2016-06-15 22:55:00

cvsps formats timestamps for the local timezone in its output.
Using timegm() to convert to epoch-relative only works because
cvsimport overrides TZ to "UTC".  Using timelocal() does not change
the behavior of the script as is, but it does ensure cvsimport
behaves sanely if run with another TZ value.

Also, use localtime() for generating the commit timestamp instead of
gmtime().  Again, this has no affect on the script as is since TZ
is hard-wired to "UTC".  But using localtime() would allow someone
to change the value of TZ with what is likely the desired effect
(i.e., timestamps are written to the Git commit with local timezone
offset.)

Signed-off-by: Chris Rorvick <redacted>
---
 git-cvsimport.perl |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 8032f23..2f5da9e 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -582,7 +582,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 +844,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

[PATCH v2 2/2] git-cvsimport: allow local timezone for commits

From: Chris Rorvick <hidden>
Date: 2016-06-15 22:55:00

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.

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.

Signed-off-by: Chris Rorvick <redacted>
---
 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;
-- 
1.7.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help