diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-02-09 14:24:32 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-02-09 14:24:32 -0400 |
commit | 9d5bcc2af4e306ec4d83c234a7ddfa9d65faa75b (patch) | |
tree | 9c19c331cfe0b1cc736becec7ebad91bfd0cdf01 /doc | |
parent | 20473a1744858a07e88dbc0e8c12c470f2f50d97 (diff) |
update
Diffstat (limited to 'doc')
-rw-r--r-- | doc/design/adjusted_branches.mdwn | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/doc/design/adjusted_branches.mdwn b/doc/design/adjusted_branches.mdwn index da3a7e130..82753e381 100644 --- a/doc/design/adjusted_branches.mdwn +++ b/doc/design/adjusted_branches.mdwn @@ -9,6 +9,10 @@ Consider two use cases: Both of these could be met by making `git-annex sync` maintain an adjusted version of the original branch, eg `adjusted/master`. +[Alternatively, it could stay on the master branch, and only adjust the +work tree and index. See WORKTREE notes below for how this choice would +play out.] + [[!toc]] ## filters @@ -32,6 +36,11 @@ Since the adjusted/master branch is not present on the remote, if the user does a `git pull`, it won't merge in changes from origin/master. Which is good because the filter needs to be applied first. +[WORKTREE: `git pull` would update the work tree, and may lead to conflicts +between the adjusted work tree and pulled changes. A post-merge hook would +be needed to re-adjust the work tree, and there would be a window where eg, +not present files would appear in the work tree.] + However, if the user does `git merge origin/master`, they'll get into a state where the filter has not been applied. The post-merge hook could be used to clean up after that. Or, let the user foot-shoot this way; they can @@ -45,6 +54,11 @@ missing file filter would cause it to be removed from the adjusted branch, and receiving a file's content would cause it to appear in the adjusted branch. +These changes would need to be committed to the adjusted branch, otherwise +`git diff` would show them. + +[WORKTREE: Simply adjust the work tree (and index) per the filter.] + ## commit When committing changes, a commit is made as usual to the adjusted branch. @@ -69,7 +83,8 @@ So, the branches would look like this: | B'' Note particularly that B does not have A' in its history; the adjusted -branch is not evident from outside. +branch is not evident from outside. So, we need a way to detect commits +like A'. Also note that B gets merged back to the adjusted branch, re-applying the filter. This will make other checkouts that are in the same adjusted branch @@ -79,6 +94,10 @@ It might be useful to have a post-commit hook that generates the reverse-filtered commit and updates the original branch. And/or `git-annex sync` could do it. +[WORKTREE: A pre-commit hook would be needed to update the staged changes, +reversing the filter before the commit is made. All the other complications +above are avoided.] + ## reverse filtering Reversing filter #1 would mean only converting pointer files to @@ -105,6 +124,26 @@ adjusted/master won't push anything. It would with "matching". Pity. (I continue to feel git picked the wrong default here.) Users may find that surprising. Users of `git-annex sync` won't need to worry about it though. +[WORKTREE: push works as usual] + +## acting on filtered-out files + +If a file is filtered out due to not existing, there should be a way +for `git annex get` to get it. Since the filtered out file is not in the +index, that would not normally work. What to do? + +Maybe instead of making a branch where the file is deleted, it would be +better to delete it from the work tree, but keep the branch as-is. Then +`git annex get` would see the file, as it's in the index. + +But, not maintaining an adjusted branch complicates other things. See +WORKTREE notes throughout this page. Overall, the WORKTREE approach seems +too problimatic. + +Ah, but we know that when filter #2 is in place, any file that `git annex +get` could act on is not in the index. So, it could look at the master branch +instead. (Same for `git annex move --from` and `git annex copy --from`) + ## problems Using `git checkout` when in an adjusted branch is problimatic, because a @@ -113,10 +152,12 @@ you want to get into an adjusted branch, you have to run some command. Or, could make a post-checkout hook. Tags are bit of a problem. If the user tags an ajusted branch, the tag -includes the local adjustments. +includes the local adjustments. +[WORKTREE: not a problem] If the user refers to commit shas (in, eg commit messages), those won't be -visible to anyone else. +visible to anyone else. +[WORKTREE: not a problem] ## integration with view branches @@ -127,3 +168,6 @@ Could go a step further, and implement view branches as another branch adjusting filter, albeit an extreme one. This might improve view branches. For example, it's not currently possible to update a view branch with changes fetched from a remote, and this could get us there. + +[WORKTREE: Wouldn't be able to integrate, unless view branches are changed +into adjusted view worktrees.] |