From 2a61549feb63117b5ffaa6fef5f80feb293b3dbe Mon Sep 17 00:00:00 2001
From: Richard Hartmann <richih.mailinglist@gmail.com>
Date: Wed, 16 Nov 2011 22:29:16 +0100
Subject: [PATCH] Introduce seed-gitignore to, well, seed gitignore..
---
_vcsh | 1 +
doc/vcsh.1.ronn | 13 +++++++++----
vcsh | 27 ++++++++++++++++++++++++---
3 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/_vcsh b/_vcsh
index 4fe1e5f..5a14f64 100644
--- a/_vcsh
+++ b/_vcsh
@@ -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"
))'
diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 541dba0..2705377 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -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
diff --git a/vcsh b/vcsh
index c1b4874..1828880 100755
--- a/vcsh
+++ b/vcsh
@@ -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
--
GitLab