@@ -671,6 +671,32 @@ def test_deserialization_reads_date_after_email(self):
671671 key = (kind + ".decode" , "CLI: signature trailing fields (GIX-34)" )
672672 self .assertEqual (_backend .statistics ().get (key , 0 ), before .get (key , 0 ) + 1 )
673673
674+ def test_deserialization_negative_zero_offset_stays_native (self ):
675+ with fixture_repo ("commit.sh" , "zero-offset" ) as repo :
676+ root = Path (repo .working_dir ).parent
677+ oid = (root / "object-id" ).read_text ().strip ()
678+ tag_oid = (root / "tag-id" ).read_text ().strip ()
679+ repo .git .fsck ("--strict" , oid , tag_oid )
680+ self .assertTrue (repo .git .cat_file ("-p" , tag_oid ).split ("\n " )[3 ].endswith (" -0000" ))
681+ self .assertEqual (
682+ repo .git .show ("--no-patch" , "--format=%ad%n%cd" , "--date=raw" , oid , "--" ),
683+ "1112591163 +0000\n 1112591163 +0000" ,
684+ )
685+ self .assertEqual (repo .git .for_each_ref ("--format=%(taggerdate:raw)" , "refs/tags/v1" ), "1112591163 +0000" )
686+ before = _backend .statistics ()
687+ cmt = Commit (repo , bytes .fromhex (oid ))
688+ self .assertEqual ((cmt .authored_date , cmt .author_tz_offset ), (1112591163 , 0 ))
689+ self .assertEqual ((cmt .committed_date , cmt .committer_tz_offset ), (1112591163 , 0 ))
690+ tag = TagObject (repo , bytes .fromhex (tag_oid ))
691+ self .assertEqual ((tag .tagged_date , tag .tagger_tz_offset ), (1112591163 , 0 ))
692+ if _backend .name == "gix" :
693+ after = _backend .statistics ()
694+ for kind in ("commit" , "tag" ):
695+ key = (kind + ".decode" , "native" )
696+ self .assertEqual (after .get (key , 0 ), before .get (key , 0 ) + 1 )
697+ key = ("Git.execute" , "CLI process" )
698+ self .assertEqual (after .get (key , 0 ), before .get (key , 0 ))
699+
674700 def test_identity_cannot_alter_headers (self ):
675701 """A name or email must not add header lines or present another identity."""
676702 with fixture_repo ("commit.sh" , "tree" , write = True ) as rw_repo :
0 commit comments