Re: Implementing $Date$ substitution - problem with git status
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Aug 9, 2009, 20:52 UTC
- Message-ID
- <200908092252.58363.j6t@kdbg.org>
- In-Reply-To
- <alpine.DEB.2.00.0908092127420.17141@perkele.intern.softwolves.pp.se>
On Sonntag, 9. August 2009, Peter Krefting wrote:
Show 37 quoted lines
> I finally got around to moving my web site repository over from CVS to Git,
> and to not have to redo everything about how it is set up, I set up a
> filter that fakes CVS' handling of "$Date$" keywords. Since I cannot access
> any information about the file from the "smudge" filter, I set up a "clean"
> filter that edits the $Date$ token on "git add":
>
> #!/usr/bin/perl -wTp -i.bak
> if (/\$Date:?[^\$]*\$/)
> {
> my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
> localtime(); my $now = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year +
> 1900, $mon + 1, $mday, $hour, $min, $sec);
> s/\$Date:?[^\$]*\$/\$Date: ${now} \$/;
> }
>
> In .gitattributes I have lines like:
>
> *.html filter=date crlf=true ident
>
> and filter.date.clean is set to point to the script above in .git/config.
>
> This works fine, except that I have some problems with files that I cannot
> get to be "clean" in git status. "git diff" shows only a difference in the
> "$Date$" token, which is different each time I run "git diff" (the "+" line
> shows the current time):
>
> diff --git a/.htaccess b/.htaccess
> index 2dfbc32..d8ac343 100644
> --- a/.htaccess
> +++ b/.htaccess
> @@ -2,7 +2,7 @@
> # -----------------------------------------------------
>
> # $Id$
> -# $Date: 2009-08-09 19:52:30 $
> +# $Date: 2009-08-09 20:31:56 $
> [...]The clean filter is applied before 'git diff' generates the diff. Since you have unstaged changes (I take [...] to mean this), you see a new date on every invocation.
After 'git add .htaccess' subsequent 'git diff' should not show any changes.
Show 5 quoted lines
> Strangely, the $Id$ line above (which is handled by me adding the "ident" > attribute to all text files), does not exhibit the same problem. > > Doing "git reset --hard" or "git checkout master filename" does not help, > the file is still believed to be modified by git.
Now, that's an entirely different problem, and I think that there is a bug. I have observed this as well with my own clean filter sometimes, but not always. I haven't found a recipe that reliably exhibits the problem.
-- Hannes