[Libreoffice-commits] core.git: bin/git-new-module-workdir config_host.mk.in configure.ac g

Lionel Elie Mamane lionel at mamane.lu
Fri Jun 21 04:36:11 PDT 2013


 bin/git-new-module-workdir |   88 +++++++++++++++++++++++++++++++++++++++++++++
 config_host.mk.in          |    1 
 configure.ac               |   18 +++++++++
 g                          |    9 ++++
 4 files changed, 116 insertions(+)

New commits:
commit aa1a988c7403cac81638c195b753fab7ac3600f9
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Fri Jun 21 13:31:37 2013 +0200

    Reintroduce --with-linked-git option
    
    With slightly different semantics:
    Instead of pointing at a previous checkout,
    point at base directory of all repos.
    
    Change-Id: I254ecc33071be53067c44610b030f737cf75a7ee

diff --git a/bin/git-new-module-workdir b/bin/git-new-module-workdir
new file mode 100755
index 0000000..bfad184
--- /dev/null
+++ b/bin/git-new-module-workdir
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+usage () {
+	echo "usage:" $@
+	exit 127
+}
+
+die () {
+	echo $@
+	exit 128
+}
+
+if test $# -lt 2 || test $# -gt 2
+then
+	usage "$0 <repository> <new_workdir>"
+fi
+
+orig_git=$1
+new_workdir=$2
+branch=$3
+
+# want to make sure that what is pointed to has a .git directory ...
+git_dir=$(cd "$orig_git" 2>/dev/null &&
+  git rev-parse --git-dir 2>/dev/null) ||
+  die "Not a git repository: \"$orig_git\""
+
+case "$git_dir" in
+.git)
+	git_dir="$orig_git/.git"
+	;;
+.)
+	git_dir=$orig_git
+	;;
+esac
+
+# don't link to a configured bare repository
+isbare=$(git --git-dir="$git_dir" config --bool --get core.bare)
+if test ztrue = z$isbare
+then
+	die "\"$git_dir\" has core.bare set to true," \
+		" remove from \"$git_dir/config\" to use $0"
+fi
+
+# don't link to a workdir
+if test -h "$git_dir/config"
+then
+	die "\"$orig_git\" is a working directory only, please specify" \
+		"a complete repository."
+fi
+
+if ! test -d ".git"
+then
+   die "the current directory is not a git workdir"
+fi
+
+# don't recreate a workdir over an existing repository
+if test -e "$new_workdir/.git"
+then
+	die "destination directory '$new_workdir' already exists."
+fi
+
+# make sure the links use full paths
+git_dir=$(cd "$git_dir"; pwd)
+
+# create the workdir
+mkdir -p ".git/modules/$new_workdir" || die "unable to create \".git/modules/$new_workdir\"!"
+
+# create the links to the original repo.  explicitly exclude index, HEAD and
+# logs/HEAD from the list since they are purely related to the current working
+# directory, and should not be shared.
+## LEM: add branches; deprecated, but safer to include it
+for x in branches config refs logs/refs objects info hooks packed-refs remotes rr-cache svn
+do
+	case $x in
+	*/*)
+		mkdir -p "$(dirname ".git/modules/$new_workdir/$x")"
+		;;
+	esac
+	ln -s "$git_dir/$x" ".git/modules/$new_workdir/$x"
+done
+
+# now setup the workdir
+mkdir -p "$new_workdir"
+cd "$new_workdir"
+echo "gitdir: ../.git/modules/$new_workdir" > .git
+# copy the HEAD from the original repository as a default branch
+cp "$git_dir/HEAD" ../.git/modules/$new_workdir/HEAD
+# don't checkout the branch, a subsequent "git module update" will do it
diff --git a/config_host.mk.in b/config_host.mk.in
index a3ecf99..1ce8618 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -174,6 +174,7 @@ export GCONF_LIBS=$(gb_SPACE)@GCONF_LIBS@
 export GIO_CFLAGS=$(gb_SPACE)@GIO_CFLAGS@
 export GIO_LIBS=$(gb_SPACE)@GIO_LIBS@
 export GIT_REFERENCE_SRC=@GIT_REFERENCE_SRC@
+export GIT_LINK_SRC=@GIT_LINK_SRC@
 export GIT_NEEDED_SUBMODULES=@GIT_NEEDED_SUBMODULES@
 export GNOMEVFS_CFLAGS=$(gb_SPACE)@GNOMEVFS_CFLAGS@
 export GNOMEVFS_LIBS=$(gb_SPACE)@GNOMEVFS_LIBS@
diff --git a/configure.ac b/configure.ac
index c7e6438..b9810f3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1238,6 +1238,13 @@ AC_ARG_WITH(referenced-git,
     GIT_REFERENCE_SRC=$withval ,
 )
 
+AC_ARG_WITH(linked-git,
+    AS_HELP_STRING([--with-linked-git=<submodules repo basedir>],
+        [Specify a directory where the repositories of submodules are located.
+         This uses a method similar to git-new-workdir to get submodules.]),
+    GIT_LINK_SRC=$withval ,
+)
+
 AC_ARG_WITH(galleries,
     AS_HELP_STRING([--with-galleries],
         [Specify how galleries should be built. It is possible either to
@@ -11616,6 +11623,17 @@ if test -n "${GIT_REFERENCE_SRC}"; then
 fi
 AC_SUBST(GIT_REFERENCE_SRC)
 
+dnl git submodules linked dirs
+dnl ===================================================================
+if test -n "${GIT_LINK_SRC}"; then
+    for repo in ${GIT_NEEDED_SUBMODULES}; do
+        if ! test -d "${GIT_LINK_SRC}"/${repo}; then
+            AC_MSG_ERROR([linked git: required repository does not exist: ${GIT_LINK_SRC}/${repo}])
+        fi
+    done
+fi
+AC_SUBST(GIT_LINK_SRC)
+
 dnl branding
 dnl ===================================================================
 AC_MSG_CHECKING([for alternative branding images directory])
diff --git a/g b/g
index c24ca3b..e273171 100755
--- a/g
+++ b/g
@@ -152,6 +152,10 @@ get_git_reference()
     if [ -f config_host.mk ]; then
 	REFERENCED_GIT=$(cat config_host.mk | grep GIT_REFERENCE_SRC | sed -e "s/.*=//")
     fi
+    LINKED_GIT=""
+    if [ -f config_host.mk ]; then
+	LINKED_GIT=$(cat config_host.mk | grep GIT_LINK_SRC | sed -e "s/.*=//")
+    fi
 }
 
 do_shortcut_update()
@@ -249,6 +253,11 @@ local configured
     do_shortcut_update
 
     for module in $SUBMODULES_CONFIGURED ; do
+	if [ -n "$LINKED_GIT" ] ; then
+	    if ! [ -d ".git/modules/${module}" ]; then
+		./bin/git-new-module-workdir "${LINKED_GIT}/${module}" "${module}"
+	    fi
+	fi
 	configured=$(git config --local --get submodule.${module}.url)
 	if [ -z "$configured" ] ; then
 	    git submodule init $module || return $?


More information about the Libreoffice-commits mailing list