( )⚙ D11400 narrow: fix commits of empty files

This is an archive of the discontinued Mercurial Phabricator instance.

narrow: fix commits of empty files
ClosedPublic

Authored by valentin.gatienbaron on Sep 10 2021, 3:13 PM.

Details

Summary

The problem is that when committing a new file with empty contents (or
in general empty file with filelog p1 = -1), hg commit with narrow
doesn't create a filelog revision at all, which causes failures in
further commands.

The problem seems to be that:

  • hg thinks that instead of creating a new filelog revision, it can use the filelog's p1 (the nullrev)
  • because it thinks the file contents is the same in that revision and in p1
  • because narrowfilelog.cmp(nullrev, b'') is True (unlike with filelog.cmp)

It's not clear to me which cmp behaves better. But I think it makes
sense to change the commit code to not to "reuse" the null rev when
adding an empty file with filelog p1 == filelog p2 == -1. This is
consistent with never writing the null rev in the manifest, which `hg
verify` claims is an invariant:

inside/c@4: manifest refers to unknown revision 000000000000

Diff Detail

Repository
rHG Mercurial
Branch
default
Lint
No Linters Available
Unit
No Unit Test Coverage

Event Timeline

Alphare requested changes to this revision.Sep 13 2021, 6:07 AM
Alphare added a subscriber: Alphare.

Other than my request in the test, the change seems like a good idea to me.

tests/test-narrow-commit.t
110–111

I would add a check that the file has actually been added by the commit and not just silently creating an empty commit somehow.

This revision now requires changes to proceed.Sep 13 2021, 6:07 AM
valentin.gatienbaron marked an inline comment as done.Sep 13 2021, 9:22 AM
Alphare accepted this revision.Sep 13 2021, 9:23 AM

Thanks. I'll queue this on stable.

This revision is now accepted and ready to land.Sep 13 2021, 9:23 AM
Alphare updated this revision to Diff 30216.Sep 13 2021, 11:35 AM
This revision was automatically updated to reflect the committed changes.