Found in the review of the path-recovery work (#148) and deferred from it:
An empty clone's first checkout replaces what is in the folder. A repository that was empty when it was cloned gets its files on a later sync, with a forced checkout. A file the user put into that folder under a name the repository later uses is overwritten.
A first checkout that is cut off is reported as up to date. If that checkout is interrupted after its branch was created, the next sync sees an ordinary clone with nothing to pull and leaves the tree empty or half written.
An empty clone can wait for a branch that will never come. When the origin's first commit lands on another branch than the one the local HEAD names, the sync fetches it and checks nothing out, every time.
Two operations in one folder. A canceled sync stops waiting for its git operations but does not stop them; a clone that ends later cleans up by deleting its folder. Syncing again at once can start a second operation in the same folder.
A clone without .git/index fails with git's count of "conflicts" and no hint of what is wrong.
Clone in WSL clones straight into the destination: one that is cut off leaves a folder that the next attempt takes for a clone and tries to update.
Wanted
The first checkout refuses, before anything changes, when something of the user's is where the repository has a file or needs a folder.
The folder is marked unfinished before the branch is created, so the next sync completes it.
An empty clone follows the origin's default branch when the origin does not have the branch the local HEAD names.
One operation per folder in a process; the second is refused with a message that says to try again in a moment.
A message that names the missing index and how to rebuild it.
The WSL clone is made under a temporary name and moved into place when complete; old leftovers are removed, young ones are left (another gclo may be cloning).
## What can go wrong today
Found in the review of the path-recovery work (#148) and deferred from it:
1. **An empty clone's first checkout replaces what is in the folder.** A repository that was empty when it was cloned gets its files on a later sync, with a forced checkout. A file the user put into that folder under a name the repository later uses is overwritten.
2. **A first checkout that is cut off is reported as up to date.** If that checkout is interrupted after its branch was created, the next sync sees an ordinary clone with nothing to pull and leaves the tree empty or half written.
3. **An empty clone can wait for a branch that will never come.** When the origin's first commit lands on another branch than the one the local HEAD names, the sync fetches it and checks nothing out, every time.
4. **Two operations in one folder.** A canceled sync stops waiting for its git operations but does not stop them; a clone that ends later cleans up by deleting its folder. Syncing again at once can start a second operation in the same folder.
5. **A clone without `.git/index`** fails with git's count of "conflicts" and no hint of what is wrong.
6. **Clone in WSL** clones straight into the destination: one that is cut off leaves a folder that the next attempt takes for a clone and tries to update.
## Wanted
- The first checkout refuses, before anything changes, when something of the user's is where the repository has a file or needs a folder.
- The folder is marked unfinished before the branch is created, so the next sync completes it.
- An empty clone follows the origin's default branch when the origin does not have the branch the local HEAD names.
- One operation per folder in a process; the second is refused with a message that says to try again in a moment.
- A message that names the missing index and how to rebuild it.
- The WSL clone is made under a temporary name and moved into place when complete; old leftovers are removed, young ones are left (another gclo may be cloning).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What can go wrong today
Found in the review of the path-recovery work (#148) and deferred from it:
.git/indexfails with git's count of "conflicts" and no hint of what is wrong.Wanted