summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Thiebaud <norbert@sqdata.com>2010-11-20 23:06:14 -0600
committerNorbert Thiebaud <nthiebaud@gmail.com>2010-11-30 20:25:21 -0600
commit209f0ab32bbf76e5a9dcec554884b72a44f5883d (patch)
tree1146da533a0dad45a81a72fd5c1fcc508f0d2dbc
parente8e9bebc5038dd29905c7d33771ae505e6567444 (diff)
add some utility scripts to create new workdir
based on kohei blog on the subject, adapted for the 'bootstrap' build
-rwxr-xr-xbin/git-new-workdir82
-rwxr-xr-xbin/git-ps152
-rwxr-xr-xbin/mkworkdir108
-rw-r--r--bin/repo-list1
4 files changed, 243 insertions, 0 deletions
diff --git a/bin/git-new-workdir b/bin/git-new-workdir
new file mode 100755
index 000000000..3ad2c0cea
--- /dev/null
+++ b/bin/git-new-workdir
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+usage () {
+ echo "usage:" $@
+ exit 127
+}
+
+die () {
+ echo $@
+ exit 128
+}
+
+if test $# -lt 2 || test $# -gt 3
+then
+ usage "$0 <repository> <new_workdir> [<branch>]"
+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 -L "$git_dir/config"
+then
+ die "\"$orig_git\" is a working directory only, please specify" \
+ "a complete repository."
+fi
+
+# don't recreate a workdir over an existing repository
+if test -e "$new_workdir"
+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 "$new_workdir/.git" || die "unable to create \"$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.
+for x in config refs logs/refs objects info hooks packed-refs remotes rr-cache svn
+do
+ case $x in
+ */*)
+ mkdir -p "$(dirname "$new_workdir/.git/$x")"
+ ;;
+ esac
+ ln -s "$git_dir/$x" "$new_workdir/.git/$x"
+done
+
+# now setup the workdir
+cd "$new_workdir"
+# copy the HEAD from the original repository as a default branch
+cp "$git_dir/HEAD" .git/HEAD
+# checkout the branch (either the same as HEAD from the original repository, or
+# the one that was asked for)
+git checkout -f $branch
diff --git a/bin/git-ps1 b/bin/git-ps1
new file mode 100755
index 000000000..8a0980091
--- /dev/null
+++ b/bin/git-ps1
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+r=
+b=
+g="$(git rev-parse --git-dir 2>/dev/null)"
+
+if [ -n "$g" ]; then
+ if [ -d "$g/../.dotest" ]
+ then
+ if test -f "$g/../.dotest/rebasing"
+ then
+ r="|REBASE"
+ elif test -f "$g/../.dotest/applying"
+ then
+ r="|AM"
+ else
+ r="|AM/REBASE"
+ fi
+ b="$(git symbolic-ref HEAD 2>/dev/null)"
+ elif [ -f "$g/.dotest-merge/interactive" ]
+ then
+ r="|REBASE-i"
+ b="$(cat "$g/.dotest-merge/head-name")"
+ elif [ -d "$g/.dotest-merge" ]
+ then
+ r="|REBASE-m"
+ b="$(cat "$g/.dotest-merge/head-name")"
+ elif [ -f "$g/MERGE_HEAD" ]
+ then
+ r="|MERGING"
+ b="$(git symbolic-ref HEAD 2>/dev/null)"
+ else
+ if [ -f "$g/BISECT_LOG" ]
+ then
+ r="|BISECTING"
+ fi
+ if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
+ then
+ if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
+ then
+ b="$(cut -c1-7 "$g/HEAD")..."
+ fi
+ fi
+ fi
+
+ if [ -n "$1" ]; then
+ printf "$1" "${b##refs/heads/}$r"
+ else
+ printf "%s" "${b##refs/heads/}$r"
+ fi
+else
+ printf "not-in-git"
+fi
diff --git a/bin/mkworkdir b/bin/mkworkdir
new file mode 100755
index 000000000..10630f830
--- /dev/null
+++ b/bin/mkworkdir
@@ -0,0 +1,108 @@
+#!/usr/bin/env bash
+
+BASEDIR=$(dirname $0)
+GIT_NEW_WORKDIR=`which git-new-workdir 2>/dev/null`
+if [ -z $GIT_NEW_WORKDIR ] ; then
+ GIT_NEW_WORKDIR="$BASEDIR/git-new-workdir"
+fi
+
+print_help() {
+ echo "Usage: $1 [-s | --source bootstrap_reference_repo_path] [ -d | --workdir-base-path path] [ --as alias_name] [branch name]"
+ echo "--source is optional if you are currently in a bootstrap git repository, in which case that repository is used as source"
+ echo "--workdir-base-path is optional if you have defined LO_BASE_WORKDIR in your environement"
+ echo "--as is the name of the directory that will be the bootstrap of your new workdir ensemble. the default is the branch name used to create the workdir"
+ echo "the branch name is optional, the default is 'master'"
+}
+
+die() {
+ echo $1
+ exit 1
+}
+
+BOOTSTRAP_DIR=
+DEST_DIR=${LO_BASE_WORKDIR:-}
+BRANCH="master"
+
+while [ "${1:-}" != "" ] ; do
+ case $1 in
+ -s | --source )
+ shift
+ BOOTSTRAP_DIR="$1"
+ ;;
+ -d | --workdir-base-path )
+ shift
+ DEST_DIR="$1"
+ ;;
+ --as )
+ shift
+ WKDIR_NAME="$1"
+ ;;
+ -h | --help )
+ print_help $0
+ exit 0
+ ;;
+ -* )
+ die "invalid option $1"
+ ;;
+ *)
+ if [ -z "$BRANCH" ] ; then
+ BRANCH="$1"
+ else
+ die "Too many arguments"
+ fi
+ ;;
+ esac
+ shift
+done
+
+
+if [ -z "$BOOTSTRAP_DIR" ]; then
+ BOOTSTRAP_DIR=$(git rev-parse --git-dir 2>/dev/null) || die "Cannot use the current working directory as implicit source: Not a git repository"
+
+ case "$BOOTSTRAP_DIR" in
+ .git)
+ BOOTSTRAP_DIR="$(pwd)"
+ ;;
+ .)
+ cd .. && BOOTSTRAP_DIR=$(pwd)
+ ;;
+ esac
+fi
+
+if [ -z "$DEST_DIR" ]; then
+ echo "destination directory is missing."
+ print_help $0
+ exit 1
+fi
+
+if [ -z "$WKDIR_NAME" ]; then
+ WKDIR_NAME="$BRANCH"
+fi
+
+if [ -e "$DEST_DIR/$WKDIR_NAME" ]; then
+ die "$DEST_DIR/$WKDIR_NAME already exists."
+fi
+
+echo "===== bootstrap ====="
+$GIT_NEW_WORKDIR $BOOTSTRAP_DIR "$DEST_DIR/$WKDIR_NAME" $BRANCH
+
+echo "creating directory $DEST_DIR/$WKDIR_NAME/clone"
+mkdir -p "$DEST_DIR/$WKDIR_NAME/clone" || die "failed to create $DEST_DIR/$WKDIR_NAME/clone"
+
+REPOS=$(cat ${BASEDIR}/repo-list)
+
+cd "$DEST_DIR/$WKDIR_NAME"
+
+for repo in $REPOS; do
+ repo_path="${BOOTSTRAP_DIR}/clone/$repo"
+ echo "===== $repo ====="
+ $GIT_NEW_WORKDIR $repo_path "$DEST_DIR/$WKDIR_NAME/clone/$repo" $BRANCH
+ for link in $(ls ./clone/$repo) ; do
+ if [ ! -e "$link" ] ; then
+ echo "Creating link $link"
+ ln -s "./clone/$repo/$link" "$link"
+ fi
+ done
+
+done
+
diff --git a/bin/repo-list b/bin/repo-list
new file mode 100644
index 000000000..349fb7df4
--- /dev/null
+++ b/bin/repo-list
@@ -0,0 +1 @@
+artwork base calc components extensions extras filters help impress libs-core libs-extern libs-extern-sys libs-gui postprocess sdk testing ure writer