What branch/commit is checked out by default when a user uses this shallow cloned git repository? Also since your manually cloning this repository what happens to patches that OE applies to the git repository or files that are manually copied?
I'm not sure if it is possible but it is probably safer to reuse the git repository as is from sourceipk and see if we can make that git repository shallow so we can preserve any changes to the repo. > -----Original Message----- > From: [email protected] [mailto:meta-arago- > [email protected]] On Behalf Of Maupin, Chase > Sent: Tuesday, July 15, 2014 6:29 AM > To: [email protected] > Subject: [meta-arago] [PATCH 1/4] sourceipk: allow packaging shallow git > clone > > * 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 _______________________________________________ meta-arago mailing list [email protected] http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago
