diff --git a/main.go b/main.go index ae0a5bb..95dbec7 100644 --- a/main.go +++ b/main.go @@ -1780,7 +1780,7 @@ func (git *repoSync) SyncRepo(ctx context.Context, refreshCreds func(context.Con // Reset the repo (note: not the worktree - that happens later) to the new // ref. This makes subsequent fetches much less expensive. It uses --soft // so no files are checked out. - if _, _, err := git.Run(ctx, git.root, "reset", "--soft", remoteHash); err != nil { + if _, _, err := git.Run(ctx, git.root, "reset", "--soft", remoteHash, "--"); err != nil { return false, "", err } diff --git a/test_e2e.sh b/test_e2e.sh index 142d7c1..855e87c 100755 --- a/test_e2e.sh +++ b/test_e2e.sh @@ -1491,6 +1491,40 @@ function e2e::sync_crash_no_worktree_cleanup_retry() { assert_file_eq "$ROOT/link/file" "${FUNCNAME[0]}" } +############################################## +# Test syncing if a file named for the SHA exists +############################################## +function e2e::sync_sha_shafile_exists() { + echo "${FUNCNAME[0]} 1" > "$REPO/file" + git -C "$REPO" commit -qam "${FUNCNAME[0]} 1" + SHA1=$(git -C "$REPO" rev-list -n1 HEAD) + echo "${FUNCNAME[0]} 2" > "$REPO/file" + git -C "$REPO" commit -qam "${FUNCNAME[0]} 2" + SHA2=$(git -C "$REPO" rev-list -n1 HEAD) + + GIT_SYNC \ + --one-time \ + --repo="file://$REPO" \ + --ref="$SHA1" \ + --root="$ROOT" \ + --link="link" + assert_link_exists "$ROOT/link" + assert_file_exists "$ROOT/link/file" + assert_file_eq "$ROOT/link/file" "${FUNCNAME[0]} 1" + + touch "$ROOT/$SHA2" + + GIT_SYNC \ + --one-time \ + --repo="file://$REPO" \ + --ref="$SHA2" \ + --root="$ROOT" \ + --link="link" + assert_link_exists "$ROOT/link" + assert_file_exists "$ROOT/link/file" + assert_file_eq "$ROOT/link/file" "${FUNCNAME[0]} 2" +} + ############################################## # Test changing repos with storage intact ##############################################