summaryrefslogtreecommitdiff
path: root/include/env/init.sh
diff options
context:
space:
mode:
Diffstat (limited to 'include/env/init.sh')
-rw-r--r--include/env/init.sh42
1 files changed, 35 insertions, 7 deletions
diff --git a/include/env/init.sh b/include/env/init.sh
index ffd03407..74ad8166 100644
--- a/include/env/init.sh
+++ b/include/env/init.sh
@@ -356,21 +356,49 @@ git_init()
"git_init" "$@"; :
done
- [ -L ".git" ] && \
+ git_init_src .
+ fx_ git_init_src x_ find src -maxdepth 1 -mindepth 1 -type d
+}
+
+git_init_src()
+{
+ gitdir="${1-}"
+
+ [ -z "$gitdir" ] && \
+ err "Invalid argument" git_init_src "$@"
+ [ -L "$gitdir/.git" ] && \
err "'$xbmkpwd/.git' is a symlink" "git_init" "$@"
- [ -e ".git" ] && \
+ [ -e "$gitdir/.git" ] && \
return 0
+ git_projectname="${gitdir#*/}"
+ git_treename="${git_projectname#*/}"
+ [ "$git_projectname" = "${git_projectname#*/}" ] && \
+ git_treename=""
+
+ git_projectname="${git_projectname%%/*}"
+ git_treename="${git_treename%%*/}"
+
+ if ! singletree "$git_projectname"; then
+ if [ -z "$git_treename" ]; then
+ fx_ git_init_src x_ find "$gitdir" -maxdepth 1 \
+ -mindepth 1 -type d
+ return 0
+ fi
+ fi
+
(
export GIT_COMMITTER_DATE="@$versiondate +0000"
export GIT_AUTHOR_DATE="@$versiondate +0000"
- x_ git init 1>/dev/null 2>/dev/null
- x_ git add -A . 1>/dev/null 2>/dev/null
- x_ git -c user.name="xbmk" -c user.email="xbmk@example.com" \
- commit -m "$projectname $version" \
+ x_ git -C "$gitdir" init 1>/dev/null 2>/dev/null
+ x_ git -C "$gitdir" add -A . 1>/dev/null 2>/dev/null
+ x_ git -C "$gitdir" -c user.name="xbmk" \
+ -c user.email="xbmk@example.com" \
+ commit -m "$projectname $version $gitdir" \
--author="xbmk <xbmk@example.com>" 1>/dev/null 2>/dev/null
- x_ git -c user.name="xbmk" -c user.email="xbmk@example.com" \
+ x_ git -C "$gitdir" -c user.name="xbmk" \
+ -c user.email="xbmk@example.com" \
tag -a "$version" -m "$projectname $version" \
1>/dev/null 2>/dev/null; :