From 1c4f4b449a827256450ebd0feb427b52c5ce95cf Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 27 Feb 2023 15:29:28 -0400 Subject: [PATCH] support --unlock-present adjustment of view branches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When generating the view, check if the key is present. When syncing in a view branch with an adjustment, run adjustedBranchRefreshFull the same as is done when syncing in other adjusted branches. This is needed because the docs for git-annex adjust --unlock-present suggest using git-annex sync to update the branch when annex.adjustedbranchrefresh is not set. Note that, with annex.adjustedbranchrefresh set, it just works! The adjusted branch gets updated in the usual way and it doesn't matter that there's a view branch underneath. And of course, re-running git-annex adjut --unlock-present also works, as suggested in the docs. Sponsored-by: Erik Bjäreholt on Patreon --- Annex/View.hs | 10 ++++++++++ CHANGELOG | 8 ++++++++ Command/Sync.hs | 23 +++++++++++++---------- doc/git-annex-adjust.mdwn | 4 +++- doc/git-annex-view.mdwn | 6 ++++++ 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/Annex/View.hs b/Annex/View.hs index 35ba205707..55ac5ba097 100644 --- a/Annex/View.hs +++ b/Annex/View.hs @@ -33,6 +33,7 @@ import Annex.GitOverlay import Annex.Link import Annex.CatFile import Annex.Concurrent +import Annex.Content.Presence import Logs import Logs.MetaData import Logs.View @@ -510,6 +511,15 @@ applyView'' mkviewedfile getfilemetadata view madj l clean conv = do Nothing -> stagesymlink uh f k Just (LinkAdjustment UnlockAdjustment) -> stagepointerfile uh f k mtreeitemtype + Just (LinkPresentAdjustment UnlockPresentAdjustment) -> + ifM (inAnnex k) + ( stagepointerfile uh f k mtreeitemtype + , stagesymlink uh f k + ) + Just (PresenceAdjustment HideMissingAdjustment _) -> + whenM (inAnnex k) + ( stagesymlink uh f k + ) _ -> stagesymlink uh f k stagesymlink uh f k = do diff --git a/CHANGELOG b/CHANGELOG index 0f7c7ce6c7..407f6a238a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,11 @@ +git-annex (10.20230228) UNRELEASED; urgency=medium + + * Support adjusted view branches. Using git-annex view in an adjusted + branch, or git-annex adjust in a view branch will enter an adjusted + view branch. --unlock and --unlock-present adjustments are supported. + + -- Joey Hess Mon, 27 Feb 2023 12:31:14 -0400 + git-annex (10.20230227) upstream; urgency=medium * Fix more breakage caused by git's fix for CVE-2022-24765, this time diff --git a/Command/Sync.hs b/Command/Sync.hs index f378950592..8a977cfc2c 100644 --- a/Command/Sync.hs +++ b/Command/Sync.hs @@ -451,23 +451,26 @@ updateBranches (Just branch, madj) = do ] unless ok $ giveup $ "failed to update view" + case madj' of + Nothing -> noop + Just adj -> updateadjustedbranch adj -- When in an adjusted branch, propigate any changes - -- made to it back to the original branch. The adjusted - -- branch may also need to be updated, if the adjustment - -- is not stable, and the usual configuration does not - -- update it. + -- made to it back to the original branch. Nothing -> case madj of Just adj -> do - let origbranch = branch - propigateAdjustedCommits origbranch adj - unless (adjustmentIsStable adj) $ - annexAdjustedBranchRefresh <$> Annex.getGitConfig >>= \case - 0 -> adjustedBranchRefreshFull adj origbranch - _ -> return () + propigateAdjustedCommits branch adj + updateadjustedbranch adj Nothing -> noop -- Update the sync branch to match the new state of the branch inRepo $ updateBranch (syncBranch branch) (fromViewBranch branch) + where + -- The adjusted branch may also need to be updated, if the adjustment + -- is not stable, and the usual configuration does not update it. + updateadjustedbranch adj = unless (adjustmentIsStable adj) $ + annexAdjustedBranchRefresh <$> Annex.getGitConfig >>= \case + 0 -> adjustedBranchRefreshFull adj branch + _ -> return () updateBranch :: Git.Branch -> Git.Branch -> Git.Repo -> IO () updateBranch syncbranch updateto g = diff --git a/doc/git-annex-adjust.mdwn b/doc/git-annex-adjust.mdwn index 746e287069..fd573ec904 100644 --- a/doc/git-annex-adjust.mdwn +++ b/doc/git-annex-adjust.mdwn @@ -59,7 +59,7 @@ and will also propagate commits back to the original branch. * `--lock` - Lock all annexed file in the adjusted branch. This may be preferred + Lock all annexed files in the adjusted branch. This may be preferred by those who like seeing broken symlinks when the content of an annexed file is not present. @@ -128,6 +128,8 @@ and will also propagate commits back to the original branch. [[git-annex-sync]](1) +[[git-annex-view]](1) + # AUTHOR Joey Hess diff --git a/doc/git-annex-view.mdwn b/doc/git-annex-view.mdwn index 2182420573..f1a22d2f85 100644 --- a/doc/git-annex-view.mdwn +++ b/doc/git-annex-view.mdwn @@ -44,6 +44,10 @@ into the `_` directory and committing will unset the metadata. The name of the `_` directory can be changed using the annex.viewunsetdirectory git config. +In a view, annexed files are usually locked, but when both this command +and [[git-annex-adjust]](1) are used, files in the view will be +adjusted. + # OPTIONS * The [[git-annex-common-options]](1) can be used. @@ -62,6 +66,8 @@ git config. [[git-annex-vcycle]](1) +[[git-annex-adjust]](1) + # AUTHOR Joey Hess