[Buildroot] [PATCH 3/4 v2] support/download/git: add support for submodules

Matthew Weber matt at thewebers.ws
Sat Apr 2 05:02:15 UTC 2016


Yann,

On Fri, Apr 1, 2016 at 3:25 PM, Yann E. MORIN <yann.morin.1998 at free.fr> wrote:
> Some git repositories may be split into a master repository and
> submodules. Up until now, we did not have support for submodules,
> because we were using bare clones, in which it is not possible to
> update the list of submodules.
>
> Now that we are using plain clones with a working copy, we can retrieve
> the submdoules.
>
> Add an option to the git downlaod helper to kick the update of
> submodules, so that they are only fetched for those packages that
> require them. Also document the existing -q option at the same time.
>
> Submodules have a .git file at their root, which contains the path to
> the real .git directory of the master repository. Since we remove it,
> there is no point in keeping those .git files either.
>
> Note: this is currently unused, but will be enabled with the follow-up
> patch , that adds the necessary parts in the pkg-generic and pkg-download
> infrastructures.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>

Tested-by: Matt Weber <matt at thewebers.ws>
Reviewed-by: Matt Weber <matt at thewebers.ws>

> ---
>  support/download/git | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/support/download/git b/support/download/git
> index 5672217..99bd996 100755
> --- a/support/download/git
> +++ b/support/download/git
> @@ -6,15 +6,20 @@ set -e
>  # Download helper for git, to be called from the download wrapper script
>  #
>  # Call it as:
> -#   .../git [-q] OUT_FILE REPO_URL CSET BASENAME
> +#   .../git [-q] [-r] OUT_FILE REPO_URL CSET BASENAME
> +#
> +#   -q  Be quiet.
> +#   -r  Clone and archive sub-modules.
>  #
>  # Environment:
>  #   GIT      : the git command to call
>
>  verbose=
> -while getopts :q OPT; do
> +recurse=0
> +while getopts :qr OPT; do
>      case "${OPT}" in
>      q)  verbose=-q; exec >/dev/null;;
> +    r)  recurse=1;;
>      \?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;;
>      esac
>  done
> @@ -61,18 +66,24 @@ pushd "${basename}" >/dev/null
>  # below, if there is an issue anyway. Since most of the cset we're gonna
>  # have to clone are not such special refs, consign the output to oblivion
>  # so as not to alarm unsuspecting users, but still trace it as a warning.
> -if ! _git fetch "'${cset}:${cset}'" >/dev/null 2>&1; then
> +if ! _git fetch origin "'${cset}'" >/dev/null 2>&1; then
>      printf "Could not fetch special ref '%s'; assuming it is not special.\n" "${cset}"
>  fi
>
> -# Checkout the required changeset.
> +# Checkout the required changeset, so that we can update the required
> +# submodules.
>  _git checkout -q "'${cset}'"
>
>  # Get date of commit to generate a reproducible archive.
>  date="$( _git show --no-patch --pretty=format:%cD )"
>
> -# We do not need the .git dir to generate the tarball
> -rm -rf .git
> +# There might be submodules, so fetch them.
> +if [ ${recurse} -eq 1 ]; then
> +    _git submodule update --init --recursive
> +fi
> +
> +# We do not need the .git dir and files to generate the tarball
> +find . \( -name .git -o -name .gitmodules \) -exec rm -rf {} +
>
>  popd >/dev/null
>
> --
> 1.9.1
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot



-- 
Thanks,
Matt



More information about the buildroot mailing list