add test case for sync_in_adjusted_branch_deleted_recently_added_files
This commit was sponsored by Denis Dzyubenko on Patreon.
This commit is contained in:
parent
d7a88e3510
commit
66ebf1a8f9
2 changed files with 32 additions and 2 deletions
22
Test.hs
22
Test.hs
|
@ -234,6 +234,7 @@ unitTests note = testGroup ("Unit Tests " ++ note)
|
||||||
, testCase "sync" test_sync
|
, testCase "sync" test_sync
|
||||||
, testCase "union merge regression" test_union_merge_regression
|
, testCase "union merge regression" test_union_merge_regression
|
||||||
, testCase "adjusted branch merge regression" test_adjusted_branch_merge_regression
|
, testCase "adjusted branch merge regression" test_adjusted_branch_merge_regression
|
||||||
|
, testCase "adjusted branch subtree regression" test_adjusted_branch_subtree_regression
|
||||||
, testCase "conflict resolution" test_conflict_resolution
|
, testCase "conflict resolution" test_conflict_resolution
|
||||||
, testCase "conflict resolution (adjusted branch)" test_conflict_resolution_adjusted_branch
|
, testCase "conflict resolution (adjusted branch)" test_conflict_resolution_adjusted_branch
|
||||||
, testCase "conflict resolution movein regression" test_conflict_resolution_movein_regression
|
, testCase "conflict resolution movein regression" test_conflict_resolution_movein_regression
|
||||||
|
@ -1425,6 +1426,27 @@ test_adjusted_branch_merge_regression = whenM Annex.AdjustedBranch.isGitVersionS
|
||||||
conflictor `elem` l
|
conflictor `elem` l
|
||||||
@? ("conflictor not present after merge in " ++ what)
|
@? ("conflictor not present after merge in " ++ what)
|
||||||
|
|
||||||
|
{- Regression test for a bug in adjusted branch syncing code, where adding
|
||||||
|
- a subtree to an existing tree lost files. -}
|
||||||
|
test_adjusted_branch_subtree_regression :: Assertion
|
||||||
|
test_adjusted_branch_subtree_regression =
|
||||||
|
whenM Annex.AdjustedBranch.isGitVersionSupported $
|
||||||
|
withtmpclonerepo $ \r -> do
|
||||||
|
indir r $ do
|
||||||
|
disconnectOrigin
|
||||||
|
git_annex "upgrade" [] @? "upgrade failed"
|
||||||
|
git_annex "adjust" ["--unlock", "--force"] @? "adjust failed"
|
||||||
|
createDirectoryIfMissing True "a/b/c"
|
||||||
|
writeFile "a/b/c/d" "foo"
|
||||||
|
git_annex "add" ["a/b/c"] @? "add a/b/c failed"
|
||||||
|
git_annex "sync" [] @? "sync failed"
|
||||||
|
createDirectoryIfMissing True "a/b/x"
|
||||||
|
writeFile "a/b/x/y" "foo"
|
||||||
|
git_annex "add" ["a/b/x"] @? "add a/b/x failed"
|
||||||
|
git_annex "sync" [] @? "sync failed"
|
||||||
|
boolSystem "git" [Param "checkout", Param "master"] @? "git checkout master failed"
|
||||||
|
doesFileExist "a/b/x/y" @? ("a/b/x/y missing from master after adjusted branch sync")
|
||||||
|
|
||||||
{- Set up repos as remotes of each other. -}
|
{- Set up repos as remotes of each other. -}
|
||||||
pair :: FilePath -> FilePath -> Assertion
|
pair :: FilePath -> FilePath -> Assertion
|
||||||
pair r1 r2 = forM_ [r1, r2] $ \r -> indir r $ do
|
pair r1 r2 = forM_ [r1, r2] $ \r -> indir r $ do
|
||||||
|
|
|
@ -64,8 +64,7 @@ tree items, but it can forget that it needed to modify the tree, which
|
||||||
prevents the change from propigating up from the subtree to the root, and
|
prevents the change from propigating up from the subtree to the root, and
|
||||||
so it gets left out of the reverse adjusted commit.
|
so it gets left out of the reverse adjusted commit.
|
||||||
|
|
||||||
I'm committing a fix, but this needs a test case. Leaving bug open for
|
I'm committing a fix.
|
||||||
that.
|
|
||||||
|
|
||||||
With the fix, when I git annex sync in felix's tree, the files that
|
With the fix, when I git annex sync in felix's tree, the files that
|
||||||
were getting wrongly deleted are added. The commit summary shows
|
were getting wrongly deleted are added. The commit summary shows
|
||||||
|
@ -77,4 +76,13 @@ This seems wrong. I think this is a separate bug that was hidden
|
||||||
by the other one, it's grafting in files using their whole path,
|
by the other one, it's grafting in files using their whole path,
|
||||||
to a subtree that is itself part way down that path.
|
to a subtree that is itself part way down that path.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
A simpler case of the both bugs is to have a file like a/b/c/d already
|
||||||
|
committed and make a commit that adds a/b/x/y, without otherwise modifying
|
||||||
|
that tree. On an adjusted branch, `git annex sync` makes a commit of a tree
|
||||||
|
that does not include the new file. It may made a commit on top of it for
|
||||||
|
the adjusted branch that adds the file back, but the file doesn't reach
|
||||||
|
the master branch in this scenario.
|
||||||
|
|
||||||
--[[Joey]]
|
--[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue