summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2010-11-16 15:00:48 +0100
committerNorbert Thiebaud <nthiebaud@gmail.com>2010-11-30 20:25:20 -0600
commita694de19b40bbd9730c3e7c7d4218cdb39549466 (patch)
treee5d8f381e94f82de71c1eb79d193e5657f11d38b
parent4c8c8751e51b3d4b91f1daff26302b9702fbbfdc (diff)
build: Add the 'g' wrapper to the bootstrap repo.
This is the first step in removing the need for the 'build' repository, and its 'rawbuild' hack.
-rw-r--r--.gitignore217
-rwxr-xr-xg248
2 files changed, 460 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index 67388a475561..6829bde15c4c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,9 @@
*~
.*.sw[op]
+# where the 'subrepos' are located
+/clone
+
# the build directories
/*/unxlng??
/*/unxlng??.pro
@@ -9,13 +12,217 @@
/*/wntmsci??.pro
# autoconf generated stuff
+/aclocal.m4
+/autom4te.cache
+/bootstrap
/ChangeLog
+/config.log
+/config.parms
+/config.status
/configure
-/aclocal.m4
+/Makefile
+/makefile.mk
+/set_soenv
+/visibility.cxx
+
+/*.Set.sh
/*/*.exe
-instsetoo_native/util/LibreOffice*
-instsetoo_native/util/tmon.out
-/*/unxmac??
-/*/unxmac??.pro
+# links to the other repositories
+MathMLDTD
+Mesa
+UnoControls
+accessibility
+afms
+animations
+apache-commons
+apple_remote
+autodoc
+automation
+avmedia
+basctl
+basebmp
+basegfx
+basic
+bean
+beanshell
+berkeleydb
+binfilter
+boost
+bridges
+cairo
+canvas
+chart2
+cli_ure
+codemaker
+comphelper
+configmgr
+connectivity
+cosv
+cppcanvas
+cppu
+cppuhelper
+cppunit
+cpputools
+crashrep
+cui
+curl
+dbaccess
+default_images
+desktop
+dictionaries
+drawinglayer
+dtrans
+editeng
+embeddedobj
+embedserv
+epm
+eventattacher
+expat
+extensions
+external
+external_images
+extras
+fileaccess
+filter
+forms
+formula
+fpicker
+framework
+graphite
+helpcontent2
+hsqldb
+hunspell
+hwpfilter
+hyphen
+i18npool
+i18nutil
+icc
+icu
+idl
+idlc
+io
+javainstaller2
+javaunohelper
+jfreereport
+jpeg
+jurt
+jvmaccess
+jvmfwk
+l10ntools
+languagetool
+libegg
+libtextcat
+libwpd
+libwpg
+libwps
+libxml2
+libxmlsec
+libxslt
+lingucomponent
+linguistic
+lotuswordpro
+lpsolve
+lucene
+mdds
+migrationanalysis
+more_fonts
+moz
+mysqlc
+mysqlcppconn
+mythes
+neon
+nlpsolver
+np_sdk
+nss
+o3tl
+odk
+offapi
+officecfg
+offuh
+ooo_custom_images
+oovbaapi
+oox
+openssl
+package
+packimages
+padmin
+postprocess
+psprint_config
+python
+pyuno
+qadevOOo
+rdbmaker
+readlicense_oo
+redland
+regexp
+registry
+remotebridges
+reportbuilder
+reportdesign
+rhino
+ridljar
+rsc
+sal
+salhelper
+sane
+sax
+saxon
+sc
+scaddins
+sccomp
+scripting
+sd
+sdext
+setup_native
+sfx2
+shell
+slideshow
+smoketestoo_native
+sot
+starmath
+stax
+stoc
+store
+svl
+svtools
+svx
+sw
+swext
+sysui
+test
+testautomation
+testgraphical
+testtools
+tomcat
+toolkit
+tools
+twain
+ucb
+ucbhelper
+udkapi
+udm
+unixODBC
+unodevtools
+unoil
+unotools
+unoxml
+ure
+uui
+vbahelper
+vcl
+vigra
+wizards
+writerfilter
+writerperfect
+x11_extensions
+xmerge
+xml2cmp
+xmlhelp
+xmloff
+xmlscript
+xmlsecurity
+xpdf
+xsltml
+zlib
diff --git a/g b/g
new file mode 100755
index 000000000000..ce43f7208291
--- /dev/null
+++ b/g
@@ -0,0 +1,248 @@
+#!/usr/bin/env bash
+#
+# Wrapper for git to handle more subdirs at the same time
+#
+
+# no params, no action
+if [ "$#" -eq "0" ] ; then
+ git
+ echo
+ echo "Additional options available only in this 'g' wrapper:"
+ echo
+ echo "Usage: g [options] [git commands]"
+ echo " -f Force - act on all the repos, not only the changed ones"
+ echo " -s Silent - do not report the repo names."
+ exit $?
+fi
+
+CLONEDIR=`perl -e 'use Cwd "abs_path"; print abs_path(shift);' $0 | sed -e ' s/\/g$/\/clone/'`
+if [ ! -e ${CLONEDIR} ]; then mkdir -p $CLONEDIR; fi
+RAWBUILDDIR=`perl -e 'use Cwd "abs_path"; print abs_path(shift);' $0 | sed -e ' s/\/g$//'`
+if [ ! -e ${RAWBUILDDIR} ]; then mkdir -p $RAWBUILDDIR; fi
+
+# extra params for some commands, like log
+EXTRA=
+COMMAND="$1"
+PAGER=
+RELATIVIZE=1
+PUSH_ALL=
+ALLOW_EMPTY=
+KEEP_GOING=0
+REPORT_REPOS=1
+
+while [ "${COMMAND:0:1}" = "-" ] ; do
+ case "$COMMAND" in
+ -f) KEEP_GOING=1
+ ;;
+ -s) REPORT_REPOS=0
+ ;;
+ esac
+ shift
+ COMMAND="$1"
+done
+
+case "$COMMAND" in
+ apply)
+ EXTRA="-p0 --stat --apply --index --ignore-space-change --whitespace=error"
+ RELATIVIZE=0
+ ;;
+ diff)
+ PAGER='--no-pager'
+ REPORT_REPOS=0
+ ;;
+ log)
+ if [ "$#" = "1" ] ; then
+ EXTRA='-1'
+ fi
+ PAGER='--no-pager'
+ ;;
+ push)
+ if [ "$#" != "1" ] ; then
+ PUSH_ALL=1
+ fi
+ ;;
+esac
+
+# absolutize the parameters first
+unset FILES
+FILESNUM=0
+while shift ; do
+ PARAM="$1"
+ if [ -z "$PARAM" ] ; then
+ continue
+ elif [ "${PARAM:0:1}" = "-" ] ; then
+ if [ \( "$COMMAND" = "checkout" -a "$PARAM" = "-b" \) -o \
+ \( "$COMMAND" = "clone" -a "$PARAM" = "--reference" \) -o \
+ \( "$COMMAND" = "commit" -a "$PARAM" = "-m" \) -o \
+ \( "$COMMAND" = "commit" -a "$PARAM" = "-am" \) -o \
+ \( "$COMMAND" = "tag" -a "$PARAM" = "-m" \) ]
+ then
+ # params that take an argument
+ FILES[$FILESNUM]="$PARAM"
+ FILESNUM=$(($FILESNUM+1))
+ shift
+ FILES[$FILESNUM]="$1"
+ FILESNUM=$(($FILESNUM+1))
+ else
+ [ "$COMMAND" = "commit" -a "$PARAM" = "--allow-empty" ] && ALLOW_EMPTY=1
+
+ FILES[$FILESNUM]="$PARAM"
+ FILESNUM=$(($FILESNUM+1))
+ fi
+ else
+ if [ "$COMMAND" = "apply" ] ; then
+ grep -qs $'^+ *\t' "$PARAM" && {
+ echo "Patch '$PARAM' introduces tabs in indentation, aborting."
+ echo
+ echo "Please fix the patch (something like s/^\(+ *\)\t/\1 /) and try again."
+ echo
+ exit 1
+ }
+ fi
+
+ # make the paths absolute
+ FILES[$FILESNUM]=`perl -e 'use Cwd "abs_path"; print abs_path(shift);' "$PARAM"`
+ if [ -z "${FILES[$FILESNUM]}" -o ! -e "${FILES[$FILESNUM]}" ] ; then
+ # it is probably not a file, but a tag name, or something
+ FILES[$FILESNUM]="$PARAM"
+ fi
+ FILESNUM=$(($FILESNUM+1))
+ fi
+done
+
+# do it!
+cd "$CLONEDIR"
+DIRS=". `ls`"
+if [ "$COMMAND" = "clone" ] ; then
+ DIRS="artwork base calc components extensions extras filters
+ help impress libs-core libs-extern libs-extern-sys libs-gui
+ postprocess sdk testing ure writer"
+fi
+for DIR in $DIRS ; do
+ if [ \( -d "$DIR" -a -d "$DIR"/.git \) -o \( "$COMMAND" = "clone" \) ] ; then
+ (
+ # executed in a subshell
+ [ "$COMMAND" != "clone" ] && cd $DIR
+
+ # relativize the absolutized params again if we want to operate
+ # only on the files belonging to this exact repo
+ if [ "$RELATIVIZE" = "1" -a -n "$FILES" ] ; then
+ FILESNUM=0
+ INSERTNUM=0
+ PWD=`pwd`
+ PWDLEN=`pwd | wc -c`
+ for I in "${FILES[@]}" ; do
+ I="${I//@REPO@/${DIR}}"
+ unset FILES[$FILESNUM]
+ FILESNUM=$(($FILESNUM+1))
+ # filter out files that don't belong to this repo
+ if [ \( "${I:0:1}" = "/" \) -a \( "$COMMAND" != "clone" \) ] ; then
+ if [ "${I:0:$PWDLEN}" = "$PWD/" ] ; then
+ FILES[$INSERTNUM]="${I:$PWDLEN}"
+ INSERTNUM=$(($INSERTNUM+1))
+ fi
+ else
+ FILES[$INSERTNUM]="$I"
+ INSERTNUM=$(($INSERTNUM+1))
+ fi
+ done
+ [ "$INSERTNUM" = "0" ] && exit 0
+ fi
+
+ # some extra params
+ case "$COMMAND" in
+ apply)
+ for I in * ; do
+ if [ -d "$I" ] ; then
+ EXTRA="$EXTRA --include=$I/*"
+ else
+ EXTRA="$EXTRA --include=$I"
+ fi
+ done
+ ;;
+ commit)
+ if [ "$ALLOW_EMPTY" != "1" ] ; then
+ [ -z "`git diff-index --name-only HEAD --`" ] && exit 0
+ fi
+ ;;
+ push)
+ if [ "$PUSH_ALL" != "1" ] ; then
+ [ -n "`git rev-list origin..HEAD`" ] || exit 0
+ fi
+ ;;
+ status)
+ LOCALCOMMITS="`git rev-list origin..HEAD`"
+ if [ -z "$LOCALCOMMITS" ] ; then
+ [ -z "`git diff-index --name-only HEAD --`" ] && exit 0
+ fi
+ ;;
+ clone)
+ if [ -z "$FILES" ]; then
+ EXTRA="$(git config remote.origin.url|sed 's|/[^/]\+$||')/${DIR}"
+ fi
+ ;;
+ esac
+
+ [ "$REPORT_REPOS" = "1" ] && echo "===== $DIR ====="
+
+ # check for changes
+ HEADREF=`git show-ref --head HEAD`
+
+ # do it!
+ git $PAGER "$COMMAND" $EXTRA "${FILES[@]}"
+ RETURN=$?
+
+ # now we can change the dir in case of clone as well
+ [ "$COMMAND" = "clone" ] && cd $DIR
+
+ # update stamp if the repo changed
+ NEWHEADREF=`git show-ref --head HEAD`
+ [ "$HEADREF" != "$NEWHEADREF" ] && touch $CLONEDIR/repos_changed
+
+ case "$COMMAND" in
+ pull|clone)
+ # update links
+ for link in `ls` ; do
+ if [ ! -e "$RAWBUILDDIR/$link" ] ; then
+ echo "Creating missing link $link"
+ ln -s "$CLONEDIR/$DIR/$link" "$RAWBUILDDIR/$link"
+ fi
+ done
+ ;;
+ status)
+ # git status returns error in some versions, clear that
+ RETURN=0
+ ;;
+ grep)
+ # git grep return an 'error' if nothing is found
+ # still we should continue grepping the other repos
+ RETURN=0
+ ;;
+ esac
+ if [ "$KEEP_GOING" = "1" ] ; then
+ RETURN=0
+ fi
+
+ exit $RETURN
+ ) || exit $?
+ fi
+done
+
+# Cleanup the broken links
+if [ "$COMMAND" = "pull" ] ; then
+ for link in `ls $RAWBUILDDIR` ; do
+ if [ -h "$RAWBUILDDIR/$link" -a ! -e "$RAWBUILDDIR/$link" ]; then
+ echo "Removing broken link $link"
+ rm $RAWBUILDDIR/$link
+ fi
+ done
+fi
+
+# warn
+if [ "$COMMAND" = "apply" ] ; then
+ echo
+ echo "Don't forget to check the status & commit now ;-)"
+ echo
+fi
+
+# vi:set shiftwidth=4 expandtab: