All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Nanako Shiraishi <nanako3@lavabit.com>
Cc: git list <git@vger.kernel.org>,
	Christian MICHON <christian.michon@gmail.com>
Subject: Re: how to force a commit date matching info from a mbox ?
Date: Fri, 23 Jan 2009 01:39:27 -0800	[thread overview]
Message-ID: <7vtz7qxsxc.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 20090123172646.6117@nanako3.lavabit.com

Nanako Shiraishi <nanako3@lavabit.com> writes:

> Quoting Junio C Hamano <gitster@pobox.com>:
>
>> Correct.  I did not run that new test, let alone existing ones ;-)
>
> I applied your patch and run the test suite, including the new one, and they passed.

Thanks.

> I tried to write a new option I said that I wanted in my previous message.  Here is a patch.
>
> --->8---
> Subject: [PATCH] git-am: Add --ignore-date option

Good.

Leaving "Subject: " in saves me typing, because I do not have to insert it
manually when editing the submitted patch in my MUA to chop off everything
before the scissors.

> This new option makes the command ignore the date header field recorded in
> the format-patch output.  The commits will have the timestamp when they
> are created instead.
>
> You can work a lot in one day to accumulate many changes, but apply and
> push to the public repository only some of them at the end of the first
> day.  Then next day you can spend all your working hours reading comics or
> chatting with your coworkers, and apply your remaining patches from the
> previous day using this option to pretend that you have been working at
> the end of the day.

LOL.  A slacker option is a tough sell to a serious management, though.

I think it would work equally well if you somehow manage to pass this
through "git-rebase", but this won't work with "git-rebase --interactive".

> @@ -379,7 +383,13 @@ do
>  
>  	GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
>  	GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
> -	GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
> +	case "$ignore_date" in
> +	    t)
> +		GIT_AUTHOR_DATE="$(date -R)"
> +		;;
> +	    '')
> +		GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
> +	esac

Please align case arm labels with case/esac; iow, do not indent t) and '')
by four spaces, when you write your next case/esac statement.

"date -R" is a GNU extension; avoid it (I'll show you how at the end).

> diff --git a/t/t4150-am.sh b/t/t4150-am.sh
> index 8d3fb00..5ecf456 100755
> --- a/t/t4150-am.sh
> +++ b/t/t4150-am.sh
> @@ -277,4 +277,13 @@ test_expect_success 'am without --committer-date-is-author-date' '
>  	test "$at" != "$ct"
>  '
>  
> +test_expect_success 'am --ignore-date' '
> +	git checkout first &&
> +	test_tick &&
> +	git am --ignore-date patch1 &&
> +	git cat-file commit HEAD | sed -e "/^$/q" >head1 &&
> +	at=$(sed -ne "/^author /s/.*> //p" head1) &&
> +	echo "$at" | grep "+0000"
> +'

This is a convoluted logic.

The committer and author dates are set to -0700 timezone by test_tick,
while TZ is set to UTC (+0000) by test-lib.sh, and you are taking
advantage of them to see which one is being used.

But I do not think of a better way to do this offhand, so I'll let it
pass.

Regarding the "date -R" thing, I think we can take advantage of the fact
that an empty GIT_AUTHOR_DATE (and GIT_COMMITTER_DATE) means "do not use
this environment variable, but use the current date instead".  Something
like this patch on top of yours, whose first hunk reverts your change to
use "date -R", and sets GIT_AUTHOR_DATE to empty when --ignore-date is
asked for.

No, I didn't test it.

diff --git i/git-am.sh w/git-am.sh
index eb88d90..f935178 100755
--- i/git-am.sh
+++ w/git-am.sh
@@ -383,13 +383,7 @@ do
 
 	GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
 	GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
-	case "$ignore_date" in
-	    t)
-		GIT_AUTHOR_DATE="$(date -R)"
-		;;
-	    '')
-		GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
-	esac
+	GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
 
 	if test -z "$GIT_AUTHOR_EMAIL"
 	then
@@ -536,6 +530,10 @@ do
 	tree=$(git write-tree) &&
 	parent=$(git rev-parse --verify HEAD) &&
 	commit=$(
+		if test -n "$ignore_date"
+		then
+			GIT_AUTHOR_DATE=
+		fi
 		if test -n "$committer_date_is_author_date"
 		then
 			GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"

  reply	other threads:[~2009-01-23  9:41 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-22 22:41 how to force a commit date matching info from a mbox ? Christian MICHON
2009-01-23  0:14 ` Junio C Hamano
2009-01-23  0:45   ` Nanako Shiraishi
2009-01-23  7:37     ` Junio C Hamano
2009-01-23  8:26       ` Nanako Shiraishi
2009-01-23  9:39         ` Junio C Hamano [this message]
2009-01-23 22:29           ` Jeff King
2009-01-24  0:34             ` Johannes Schindelin
2009-01-24  0:52               ` Jeff King
2009-01-24  1:43                 ` Johannes Schindelin
2009-01-24  2:35                   ` Jeff King
2009-01-23  9:52         ` Nanako Shiraishi
2009-01-23 17:27           ` Junio C Hamano
2009-01-23 12:38         ` [PATCH] git-am: Add --ignore-date option Johannes Schindelin
2009-01-23 13:17           ` Adeodato Simó
2009-01-23  8:08   ` how to force a commit date matching info from a mbox ? Christian MICHON
2009-01-23  8:51     ` Christian MICHON
2009-01-23  0:21 ` Johannes Schindelin
2009-01-23  8:07   ` Christian MICHON

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=7vtz7qxsxc.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=christian.michon@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=nanako3@lavabit.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.