All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
core.worktree can be set relatively to GIT_DIR, thereby preventing the
hard-coding of the home directory path, which should make a vcsh setup
more portable.
On the other hand, this means that the vcsh repo.d is now invariably
linked to its position, relative to the base directory. Apply this patch
only if you think it to be less likely that people change
~/.config/vcsh/repo.d to something else, than they would rsync/tar/mv
a whole tree to a different $HOME.
Paths are resolved using Git itself, for maximum portability.
In addition to making sure the new method works on new repositories,
I checked that
- "old" repositories can be used with the new code just fine;
- upgrading works.
Signed-off-by: martin f. krafft <madduck@madduck.net>
init() {
[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
init() {
[ ! -e "$GIT_DIR" ] || fatal "'$GIT_DIR' exists" 10
- export GIT_WORK_TREE="$VCSH_BASE"
- mkdir -p "$GIT_WORK_TREE" || fatal "could not create '$GIT_WORK_TREE'" 50
- cd "$GIT_WORK_TREE" || fatal "could not enter '$GIT_WORK_TREE'" 11
+ mkdir -p "$VCSH_BASE" || fatal "could not create '$VCSH_BASE'" 50
+ cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
upgrade() {
hook pre-upgrade
upgrade() {
hook pre-upgrade
- use
- git config core.worktree "$GIT_WORK_TREE"
+ # fake-bare repositories are not bare, actually. Set this to false
+ # because otherwise Git complains "fatal: core.bare and core.worktree
+ # do not make sense"
+ git config core.bare false
+ # in core.worktree, keep a relative reference to the base directory
+ git config core.worktree $(cd $GIT_DIR && GIT_WORK_TREE="$VCSH_BASE" git rev-parse --show-cdup)
[ ! "x$VCSH_GITIGNORE" = 'xnone' ] && git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
git config vcsh.vcsh 'true'
[ ! "x$VCSH_GITIGNORE" = 'xnone' ] && git config core.excludesfile ".gitignore.d/$VCSH_REPO_NAME"
git config vcsh.vcsh 'true'
[ -e "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME"
hook post-upgrade
}
use() {
git_dir_exists
[ -e "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME" ] && git add -f "$VCSH_BASE/.gitignore.d/$VCSH_REPO_NAME"
hook post-upgrade
}
use() {
git_dir_exists
- export GIT_WORK_TREE="$(git config --get core.worktree)"
+ export GIT_WORK_TREE="$(git rev-parse --show-toplevel)"
export VCSH_DIRECTORY="$VCSH_REPO_NAME"
}
export VCSH_DIRECTORY="$VCSH_REPO_NAME"
}