On Tue, Jul 15, 2014 at 06:28:32AM -0500, Chase Maupin wrote:
> * 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
If you are worried about the file not being present:
rm -f .git/objects/info/alternates
Otherwise looks reasonable.
>
> 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
_______________________________________________
meta-arago mailing list
[email protected]
http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago