Skip to main content
Sign in
Snippets Groups Projects
Commit 53ad5575 authored by Richard Hartmann's avatar Richard Hartmann
Browse files

Merge branch 'master' of github.com:RichiH/vcsh

parents b94219f8 25a68ef8
Branches
Tags
No related merge requests found
...@@ -15,7 +15,7 @@ community around the general idea of version controlling your (digital) life. ...@@ -15,7 +15,7 @@ community around the general idea of version controlling your (digital) life.
* IRC: #vcs-home on irc.oftc.net * IRC: #vcs-home on irc.oftc.net
* Mailing list: vcs-home@lists.madduck.net * Mailing list: http://lists.madduck.net/listinfo/vcs-home
* Pull requests or issues on https://github.com/RichiH/vcsh * Pull requests or issues on https://github.com/RichiH/vcsh
...@@ -98,7 +98,7 @@ To illustrate, this is what a possible directory structure looks like. ...@@ -98,7 +98,7 @@ To illustrate, this is what a possible directory structure looks like.
### available.d ### ### available.d ###
The files you see in $XDG_CONFIG_HOME/mr/available.d are mr configuration files The files you see in $XDG\_CONFIG\_HOME/mr/available.d are mr configuration files
that contain the commands to manage (checkout, update etc.) a single that contain the commands to manage (checkout, update etc.) a single
repository. vcsh repo configs end in .vcsh, git configs end in .git, etc. This repository. vcsh repo configs end in .vcsh, git configs end in .git, etc. This
is optional and your preference. For example, this is what a zsh.vcsh is optional and your preference. For example, this is what a zsh.vcsh
...@@ -116,7 +116,7 @@ this repository and fork your own. ...@@ -116,7 +116,7 @@ this repository and fork your own.
### config.d ### ### config.d ###
$XDG_CONFIG_HOME/mr/available.d contains *all available* repositories. Only $XDG\_CONFIG\_HOME/mr/available.d contains *all available* repositories. Only
files/links present in mr/config.d, however, will be used by mr. That means files/links present in mr/config.d, however, will be used by mr. That means
that in this example, only the zsh, gitconfigs, tmux and vim repositories will that in this example, only the zsh, gitconfigs, tmux and vim repositories will
be checked out. A simple `mr update` run in $HOME will clone or update those be checked out. A simple `mr update` run in $HOME will clone or update those
...@@ -130,11 +130,13 @@ this: ...@@ -130,11 +130,13 @@ this:
[DEFAULT] [DEFAULT]
jobs = 5 jobs = 5
include = cat $XDG_CONFIG_HOME/mr/config.d/* # Use if your mr does not have vcsh support in mainline, yet
include = cat /usr/share/mr/vcsh
include = cat ${XDG_CONFIG_HOME:-$HOME/.config}/mr/config.d/*
### repo.d ### ### repo.d ###
$XDG_CONFIG_HOME/vcsh/repo.d is the directory where all git repositories which $XDG\_CONFIG\_HOME/vcsh/repo.d is the directory where all git repositories which
are under vcsh's control are located. Since their working trees are configured are under vcsh's control are located. Since their working trees are configured
to be in $HOME, the files contained in those repositories will be put in $HOME to be in $HOME, the files contained in those repositories will be put in $HOME
directly. directly.
...@@ -185,10 +187,10 @@ Make sure none of the following files and directories exist for your test ...@@ -185,10 +187,10 @@ Make sure none of the following files and directories exist for your test
* ~/.gitignore.d * ~/.gitignore.d
* ~/.mrconfig * ~/.mrconfig
* $XDG_CONFIG_HOME/mr/available.d/mr.vcsh * $XDG\_CONFIG\_HOME/mr/available.d/mr.vcsh
* $XDG_CONFIG_HOME/mr/available.d/zsh.vcsh * $XDG\_CONFIG\_HOME/mr/available.d/zsh.vcsh
* $XDG_CONFIG_HOME/mr/config.d/mr.vcsh * $XDG\_CONFIG\_HOME/mr/config.d/mr.vcsh
* $XDG_CONFIG_HOME/vcsh/repo.d/mr.git/ * $XDG\_CONFIG\_HOME/vcsh/repo.d/mr.git/
All of the files are part of the template repository, the directory is where All of the files are part of the template repository, the directory is where
the template will be stored. the template will be stored.
... ...
......
Available hooks are: Available hooks are:
pre-command
post-command
pre-enter pre-enter
post-enter post-enter
pre-run pre-run
... ...
......
...@@ -25,6 +25,8 @@ vcsh(1) - manage config files in $HOME via fake bare git repositories ...@@ -25,6 +25,8 @@ vcsh(1) - manage config files in $HOME via fake bare git repositories
`vcsh` setup <repo> `vcsh` setup <repo>
`vcsh` which <substring>
`vcsh` write-gitignore <repo> `vcsh` write-gitignore <repo>
`vcsh` <repo> <gitcommand> `vcsh` <repo> <gitcommand>
...@@ -98,11 +100,14 @@ an interactive user. ...@@ -98,11 +100,14 @@ an interactive user.
* setup: * setup:
Set up repository with recommended settings. Set up repository with recommended settings.
* which <substring>:
Find <substring> in name of any tracked file.
* write-gitignore: * write-gitignore:
Write .gitignore.d/<repo> via git ls-files. Write .gitignore.d/<repo> via git ls-files.
* <repo> <gitcommand>: * <repo> <gitcommand>:
Shortcut to run `vcsh` on a repo. Will prepend `git` to <command> by itself. Shortcut to run `vcsh` on a repo. Will prepend `git` to <command>.
* <repo>: * <repo>:
Shortcut to run `vcsh enter <repo>`. Shortcut to run `vcsh enter <repo>`.
... ...
......
...@@ -35,6 +35,7 @@ help() { ...@@ -35,6 +35,7 @@ help() {
run <repo> \\ run <repo> \\
<command> Use this repository <command> Use this repository
setup Set up repository with recommended settings setup Set up repository with recommended settings
which <substring> Find substring in name of any tracked file
write-gitignore \\ write-gitignore \\
<repo> Write .gitignore.d/<repo> via git ls-files <repo> Write .gitignore.d/<repo> via git ls-files
...@@ -100,7 +101,7 @@ To continue, type 'Yes, do as I say'" ...@@ -100,7 +101,7 @@ To continue, type 'Yes, do as I say'"
for file in $files; do for file in $files; do
rm -f $file || info "could not delete '$file', continuing with deletion" rm -f $file || info "could not delete '$file', continuing with deletion"
done done
rmdir "$GIT_DIR" || error "could not delete '$GIT_DIR'" rm -r "$GIT_DIR" || error "could not delete '$GIT_DIR'"
} }
enter() { enter() {
...@@ -183,6 +184,14 @@ use() { ...@@ -183,6 +184,14 @@ use() {
export VCSH_DIRECTORY="$VCSH_REPO_NAME" export VCSH_DIRECTORY="$VCSH_REPO_NAME"
} }
which() {
for VCSH_REPO_NAME in $(list); do
for VCSH_FILE in $(get_files); do
echo $VCSH_FILE | grep -q "$VCSH_COMMAND_PARAMETER" && echo "$VCSH_REPO_NAME: $VCSH_FILE"
done
done | sort -u
}
write_gitignore() { write_gitignore() {
use use
cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11 cd "$VCSH_BASE" || fatal "could not enter '$VCSH_BASE'" 11
...@@ -219,12 +228,17 @@ if [ ! "x$VCSH_GITIGNORE" = 'xexact' ] && [ ! "x$VCSH_GITIGNORE" = 'xrecursive' ...@@ -219,12 +228,17 @@ if [ ! "x$VCSH_GITIGNORE" = 'xexact' ] && [ ! "x$VCSH_GITIGNORE" = 'xrecursive'
fi fi
if [ "$1" = 'clone' ]; then if [ "$1" = 'clone' ]; then
[ -z $2 ] && fatal "$1: please specify a remote" 1 [ -z "$2" ] && fatal "$1: please specify a remote" 1
export VCSH_COMMAND="$1" export VCSH_COMMAND="$1"
GIT_REMOTE="$2" GIT_REMOTE="$2"
[ -n "$3" ] && VCSH_REPO_NAME="$3" || VCSH_REPO_NAME=$(basename "$GIT_REMOTE" .git) [ -n "$3" ] && VCSH_REPO_NAME="$3" || VCSH_REPO_NAME=$(basename "$GIT_REMOTE" .git)
export VCSH_REPO_NAME export VCSH_REPO_NAME
export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git" export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
elif [ "$1" = 'which' ]; then
[ -z "$2" ] && fatal "$1: please specify a filename" 1
[ -n "$3" ] && fatal "$1: too many parameters" 1
export VCSH_COMMAND="$1"
export VCSH_COMMAND_PARAMETER="$2"
elif [ "$1" = 'delete' ] || elif [ "$1" = 'delete' ] ||
[ "$1" = 'enter' ] || [ "$1" = 'enter' ] ||
[ "$1" = 'init' ] || [ "$1" = 'init' ] ||
...@@ -284,5 +298,7 @@ done ...@@ -284,5 +298,7 @@ done
verbose "$VCSH_COMMAND begin" verbose "$VCSH_COMMAND begin"
export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g') export VCSH_COMMAND=$(echo $VCSH_COMMAND | sed 's/-/_/g')
hook pre-command
$VCSH_COMMAND $VCSH_COMMAND
hook post-command
verbose "$VCSH_COMMAND end, exiting" verbose "$VCSH_COMMAND end, exiting"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment