>-----Original Message-----
>From: Cooper Jr., Franklin
>Sent: Wednesday, July 16, 2014 9:19 AM
>To: Maupin, Chase; [email protected]
>Subject: RE: [meta-arago] [PATCH 1/4] sourceipk: allow packaging
>shallow git clone
>
>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?

Default is that the ${BRANCH} is checked out at the ${SRCREV}.

The copied files like the config are still maintained because we replace the 
git data in the original sourceipk directory rather than doing a whole new 
copy.  So if the files were there before they are still there vs. doing a new 
checkout where they would be lost.

>
>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.

I had not found a way to take an existing repo and turn it into a shallow 
clone.  That is why I make the shallow clone separate and then replace the git 
repo with the shallow clone data.

>
>> -----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

Reply via email to