Skip to content
Snippets Groups Projects
Commit 2a61549f authored by Richard Hartmann's avatar Richard Hartmann
Browse files

Introduce seed-gitignore to, well, seed gitignore..

parent 129c9465
No related branches found
No related tags found
No related merge requests found
......@@ -9,4 +9,5 @@ _arguments \
run\:"run command on repo"
init\:"init & clone from repo"
clone\:"clone from repo"
seed-gitignore\:"seed .gitignore.d/foo from git ls-files"
))'
......@@ -11,6 +11,8 @@ vcsh(1) - manage and sync config files via git
`vcsh` list
`vcsh` seed-gitignore
`vcsh` help
## DESCRIPTION
......@@ -34,20 +36,23 @@ A sample configuration for `vcsh` and `mr` can be found at
## OPTIONS
* init:
Initialize an empty repository
Initialize an empty repository.
* clone:
Clone an existing repository
Clone an existing repository.
* run:
Run command with <$GIT_DIR> and <$GIT_WORK_TREE> set. Allows you to run any
and all commands without any restrictions. Use with care.
* list:
List all local vcsh repositories
List all local vcsh repositories.
* seed-gitignore:
Seed .gitignore.d/<repo> from git ls-files.
* help:
Display help
Display help.
## ENVIRONMENT
......
......@@ -18,7 +18,6 @@ do
fi
done
debug() {
[ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
}
......@@ -42,7 +41,9 @@ help() {
init <repo> Initialize a new repository
clone <remote> \\
[<repo>] Clone from an existing repository" >&2
[<repo>] Clone from an existing repository
seed-gitignore \\
<repo> Seed .gitignore.d/<repo> from git ls-files" >&2
}
use() {
......@@ -152,7 +153,7 @@ elif [ "$1" = 'clone' ]; then
elif [ "$1" = 'init' ]; then
verbose "init begin"
[ -z $2 ] && help && return 0
[ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
export REPO_NAME="$2"
export GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
init
......@@ -170,6 +171,26 @@ elif [ "$1" = 'init' ]; then
# verbose "exit end"
# exit 0
elif [ "$1" = 'seed-gitignore' ]; then
verbose "seed-gitignore begin"
[ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
use "$2"
files=$(git ls-files)
gitignores=$(for file in $(git ls-files); do
while true; do
echo $file; new="${file%/*}"
[ "$file" = "$new" ] && break
file="$new"
done;
done | sort -u | sed 's/^/!/')
[ -e .gitignore.d/$2 ] &&
echo "$SELF: .gitignore.d/$2 exists, moving it to .gitignore.d/$2.bak" &&
mv -f .gitignore.d/$2 .gitignore.d/$2.bak
echo '*' > .gitignore.d/$2
for gitignore in $gitignores; do
echo $gitignore >> .gitignore.d/$2
done
else
verbose "defaulting to calling help()"
help
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment