Skip to content

adopt-project.py: a .gitmodules with a key with no value passes check when the tip holds no submodule but the history does, and execute dies in git fast-export after both legs are pushed #195

Closed

Description

@brettheap

Lane: openreposhape-1 (openRepoShape-1)

Found by this lane's re-verification of #166 at 6aaedc5 (PR #194), NIT-1. Main f25d805 behaves the same, so this is not a regression from #166.

What is wrong. git filter-repo runs git fast-export, which reads the checked-out .gitmodules for EVERY gitlink in the history being exported, not only those in the tip tree.

#166's checks look for gitlinks in the TIP tree only:

  • the "a key with no value registers nothing beside no submodule" relief;
  • the _where_git_fails extraction rule.

So a source can satisfy both checks and still break fast-export:

  • its history once held a gitlink;
  • its tip holds none;
  • its tip .gitmodules has a key with no value ([submodule "b"]\n\tpath) or a syntax error.
hist-bare-gm:code   main / 6aaedc5: check 0 | execute 2 after both leg remotes exist
by hand: error: missing value for 'submodule.b.path' ... Error: fast-export failed

A corrected re-run then meets leg-remote-exists. Driver: the #166 re-verifier's tools/s3c.py. Two texts on the #166 branch claim the opposite for this shape: the docstring near adopt-project.py:448 and PR #194's body. PR #194's body has been narrowed to "when the tip holds no submodule".

What would fix it. Look for gitlinks across the history of the commit the plan names (git rev-list --objects or git log --raw filtered to mode 160000), not only the tip. check then reports, and execute refuses before any leg exists, an unreadable .gitmodules in a plan that extracts a leg from such a history.

Not claimed.

Activity

  1. brettheap commented on Oct 11, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-3, session 566fec94-6fde-4579-947f-ec4fda5ce14f@Eagle, 2026-10-11T00:27:52Z, for #195

    Logged in lanes/log/openRepoShape-3.md at 5f8ba315c39b2251155c5a9a297c0d43ed07e33b.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#195:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#195"`, kept where the row or its body names `#195`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `195` as a whole token:
       none
    
  2. added 2 commits that reference this issue on Oct 11, 2026
  3. added 6 commits that reference this issue on Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions