Skip to content

feat(record): add --new flag#1612

Merged
claytonrcarter merged 5 commits into
arxanas:masterfrom
claytonrcarter:record-allow-empty
Jul 10, 2026
Merged

feat(record): add --new flag#1612
claytonrcarter merged 5 commits into
arxanas:masterfrom
claytonrcarter:record-allow-empty

Conversation

@claytonrcarter

@claytonrcarter claytonrcarter commented Sep 26, 2025

Copy link
Copy Markdown
Collaborator

This adds --new support to git record, to create a new, empty commit. --insert works as expected, too.

This required a couple of changes to our tests, too, because this is the first feature in which we create entirely new commits (vs rewriting or modifying existing commits) and I was running into test failures in CI that all focused on time:

  • use a correctly formatted RFC2822 date for our deterministic "dummy date" (git parsed and used the existing date format, but the git2 crate rejected it)
  • explicitly set timezone to UTC in the test env to avoid git picking up whatever timezone is set locally in a dev environment (eg git was using EST/EDT for me, but CI was using UTC)
original description This adds `--allow-empty` support to `git record`. This is not very interesting on it's own, but the fun starts when you pass `--insert`, at which point this should behave as a short hand for `git commit --allow-empty -m ... ; git move -s 'siblings(@)'`.

As is, this change will only create an empty commit if there are no changes at all (staged or in the working copy). Eventually, it would be nice to have "real" support for record --new to create an empty commit regardless of what changes are currently staged or in the working copy, but I don't intend to tackle that at this time.

@claytonrcarter
claytonrcarter force-pushed the record-allow-empty branch 16 times, most recently from ca86bfb to 6a2e4b6 Compare February 6, 2026 15:53
@claytonrcarter
claytonrcarter force-pushed the record-allow-empty branch 5 times, most recently from 858e15c to 10fabee Compare May 26, 2026 01:24
@claytonrcarter
claytonrcarter marked this pull request as ready for review May 26, 2026 01:28
@claytonrcarter claytonrcarter changed the title feat(record): add --allow-empty flag feat(record): add --new flag May 26, 2026
DUMMY_DATE is used to populate GIT_AUTHOR_DATE and GIT_COMMITTER_DATE, both of
which expect dates in RFC2822 format, but DUMMY_DATE was itselt not in RFC2822
format, and it was made less so by appending a 2 digit timezone offset.

This has not been an issue thus far because we were only passing the date to
git as a string, and git seems to be fairly liberal when parsing dates. `git
record --new` seems to be the first time we're actually creating wholey new
commits (vs just modifying existing commits), so we need to set a current time
on these new commits. To do so, we need to parse DUMMY_DATE into a SystemTime
with chrono, and chrono is not lenient when parsing dates, leading to various
errors:

1. The existing format yielded Invalid, because of the time/year order.
2. Fixing the order of the year led to TooShort, because of the 2 digit
   timezone offset.
3. Fixing the timezone offset yielded Impossible, because 2020-10-29 was
   not a Wednesday.

Fun! Regardless, I don't expect these changes to have any impact outside of
the upcoming tests for `record --new`.

Old format: Wed 29 Oct 12:34:56 2020 PDT -02
New format: Thu, 29 Oct 2020 12:34:56 -0200

Ref: https://github.com/git/git/blob/master/Documentation/date-formats.adoc
Ref: https://www.rfc-editor.org/rfc/rfc2822#section-3.3
`record --new` is the first feature in which we create entirely new
commits (vs rewriting or splitting existing commits) and I was running
into test failures in CI that seemed to only differ by timezone.
Explicitly setting the time zone in the test git environment resolved
the issue.
@claytonrcarter

Copy link
Copy Markdown
Collaborator Author

I've been using this for a while and it's been working well.

@claytonrcarter
claytonrcarter enabled auto-merge (rebase) July 10, 2026 02:21
@claytonrcarter
claytonrcarter merged commit 16d9785 into arxanas:master Jul 10, 2026
13 checks passed
@claytonrcarter
claytonrcarter deleted the record-allow-empty branch July 10, 2026 02:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant