* Add another flag SRCIPK_SHALLOW_CLONE that will do a shallow
clone of depth 1 to reduce the size of the git history.
* The full history can be fetched again using either of the
following commands based on the version of git being used
- git pull --unshallow (New git versions)
- git pull (older git versions)
* Clean up some of the variable names to make it more clear what
they are storing.
* Create a generic function to determine the fetch reporitory
Signed-off-by: Chase Maupin <[email protected]>
---
meta-arago-distro/classes/sourceipk.bbclass | 100 ++++++++++++++++++++++++---
1 file changed, 89 insertions(+), 11 deletions(-)
diff --git a/meta-arago-distro/classes/sourceipk.bbclass
b/meta-arago-distro/classes/sourceipk.bbclass
index 20dda76..33878ac 100644
--- a/meta-arago-distro/classes/sourceipk.bbclass
+++ b/meta-arago-distro/classes/sourceipk.bbclass
@@ -61,32 +61,111 @@ SRCIPK_INCLUDE_EXTRAFILES ?= "1"
SRCIPK_PRESERVE_GIT ?= "false"
-adjust_git() {
+# Create a shallow clone of the git repository to reduce the size of
+# the sourceipk
+SRCIPK_SHALLOW_CLONE ?= "false"
+
+# This function will return the fetch URL for a git repository passed as
+# the first parameter.
+get_remote() {
+ git_repo="$1"
+
+ if [ "$git_repo" == "" ]
+ then
+ echo "git_repo not passed to get_remote"
+ exit 1
+ fi
+
+ cd $git_repo
+
+ # Get the remote repository fetch URL
+ remote=`git remote -v | grep "(fetch)" | cut -d ' ' -f 1 | cut -c 7- |
tr -d ' '`
+
+ # Since the echo'ed value of this statment is the returned value redirect
+ # the output of this command to /dev/null
+ cd - > /dev/null
+
+ # echo back the remote repository URL as the output of this function
+ echo $remote
+
+ return 0
+}
+
+# Some git repositories are very large and we do not want to ship the
+# full history. Instead we want to limit history to reduce the size while
+# still keeping the git repository in place. The full history can be
+# fetched using git pull --unshallow or just git pull
+# NOTE: This function depends on a git version >= 1.7.10. It will work
+# with older versions but the size will be larger because rather
+# than just a single branch the limited history will be a depth of
+# 1 for all branches and tags.
+limit_git_history() {
+ # By default limit the history to 1 commit since the user can always
+ # use git pull --unshallow to fetch the rest of history. The depth
+ # level of 1 is set to keep from tracking through all merges and
+ # pulling excess history
+ commits="1"
+
+ # Temporary directory to make shallow clones in
+ gitshallowclone="${WORKDIR}/temp-git-shallow-clone"
+
+ # Change directory to the git repository to be safe
+ cd $tmp_dir/${SRCIPK_INSTALL_DIR}
+
+ # Create a temporary directory to hold the shallow git clone
+ mkdir -p $gitshallowclone
+ remote=`get_remote $PWD`
+
+ git clone --depth $commits --branch ${BRANCH} file://$remote
$gitshallowclone
+
+ # remove original kernel clone since we will replace it with the shallow
+ # clone
+ rm -rf $tmp_dir/${SRCIPK_INSTALL_DIR}/.git
+
+ # replace the original kernel git data with the shallow clone git data
+ mv $gitshallowclone/.git $tmp_dir/${SRCIPK_INSTALL_DIR}/
+ rm -rf $gitshallowclone
+
+ cd -
+}
+
+adjust_git() {
orig_dir="$PWD"
cd $tmp_dir/${SRCIPK_INSTALL_DIR}
if [ -d ".git" ]
then
+ # Get the location of the local repository
+ local_repo=`get_remote $PWD`
- # Grab path to cloned local repository
- old=`git remote -v | grep "(fetch)" | cut -d ' ' -f 1 | cut -c 7- |
tr -d ' '`
-
- if [ -d $old -a "${SRCIPK_PRESERVE_GIT}" = "true" ]
+ if [ -d $local_repo -a "${SRCIPK_PRESERVE_GIT}" = "true" ]
then
- cd $old
+ cd $local_repo
+
+ # If SRCIPK_SHALLOW_CLONE is true then make a shallow copy of the
+ # git repository and then fix up the git URLs
+ if [ "${SRCIPK_SHALLOW_CLONE}" == "true" ]
+ then
+ limit_git_history
+ fi
# Grab actual url used to create the repository
- orig=`git remote -v | grep "(fetch)" | cut -d ' ' -f 1 | cut -c
7- | tr -d ' '`
+ remote_repo=`get_remote $PWD`
cd -
- git remote set-url origin $orig $old
+ git remote set-url origin $remote_repo $local_repo
- # Repackage the repository so its a proper clone of the original
(remote) git repository
+ # Repackage the repository so its a proper clone of the original
+ # (remote) git repository
git repack -a -d
- rm .git/objects/info/alternates
+
+ if [ -e .git/objects/info/alternates ]
+ then
+ rm .git/objects/info/alternates
+ fi
else
rm -rf .git
@@ -95,7 +174,6 @@ adjust_git() {
fi
cd $orig_dir
-
}
# Create a README file that describes the contents of the source ipk
--
1.7.9.5
_______________________________________________
meta-arago mailing list
[email protected]
http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago