download/git: support Git LFS
Git Large File Storage replaces large files with text pointers in the
Git repository while storing the contents on a remote server. If a
repository is using this extension, then git-lfs must be used to
checkout the large files before the source archive is generated.
Signed-off-by: John Keeping <john@metanate.com>
[vfazio:
- add git-lfs to DL_TOOLS_DEPENDENCIES
- fixup for 5a0d681394
("infra/pkg-download: make the DOWNLOAD macro fully parameterised")
]
Signed-off-by: Vincent Fazio <vfazio@xes-inc.com>
[Arnout:
- don't "git lfs install";
- recurse into submodules.
]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
This commit is contained in:
parent
b4841d722f
commit
cff428fe31
@ -344,6 +344,10 @@ not and can not work as people would expect it should:
|
||||
submodules when they contain bundled libraries, in which case we
|
||||
prefer to use those libraries from their own package.
|
||||
|
||||
* +LIBFOO_GIT_LFS+ should be set to +YES+ if the Git repository uses
|
||||
Git LFS to store large files out of band. This is only available for
|
||||
packages downloaded with git (i.e. when +LIBFOO_SITE_METHOD=git+).
|
||||
|
||||
* +LIBFOO_STRIP_COMPONENTS+ is the number of leading components
|
||||
(directories) that tar must strip from file names on extraction.
|
||||
The tarball for most packages has one leading component named
|
||||
|
@ -119,6 +119,7 @@ define DOWNLOAD
|
||||
-N '$($(2)_RAWNAME)' \
|
||||
-o '$($(2)_DL_DIR)/$(notdir $(1))' \
|
||||
$(if $($(2)_GIT_SUBMODULES),-r) \
|
||||
$(if $($(2)_GIT_LFS),-l) \
|
||||
$(foreach uri,$(call DOWNLOAD_URIS,$(1),$(2)),-u $(uri)) \
|
||||
$(QUIET) \
|
||||
-- \
|
||||
|
@ -1207,6 +1207,9 @@ ifeq ($$($(2)_SITE_METHOD),svn)
|
||||
DL_TOOLS_DEPENDENCIES += svn
|
||||
else ifeq ($$($(2)_SITE_METHOD),git)
|
||||
DL_TOOLS_DEPENDENCIES += git
|
||||
ifneq ($$($(2)_GIT_LFS),)
|
||||
DL_TOOLS_DEPENDENCIES += git-lfs
|
||||
endif
|
||||
else ifeq ($$($(2)_SITE_METHOD),bzr)
|
||||
DL_TOOLS_DEPENDENCIES += bzr
|
||||
else ifeq ($$($(2)_SITE_METHOD),scp)
|
||||
|
@ -17,15 +17,15 @@
|
||||
# We want to catch any unexpected failure, and exit immediately.
|
||||
set -e
|
||||
|
||||
export BR_BACKEND_DL_GETOPTS=":hc:d:o:n:N:H:ru:qf:e"
|
||||
export BR_BACKEND_DL_GETOPTS=":hc:d:o:n:N:H:lru:qf:e"
|
||||
|
||||
main() {
|
||||
local OPT OPTARG
|
||||
local backend output hfile recurse quiet rc
|
||||
local backend output hfile large_file recurse quiet rc
|
||||
local -a uris
|
||||
|
||||
# Parse our options; anything after '--' is for the backend
|
||||
while getopts ":c:d:D:o:n:N:H:rf:u:q" OPT; do
|
||||
while getopts ":c:d:D:o:n:N:H:lrf:u:q" OPT; do
|
||||
case "${OPT}" in
|
||||
c) cset="${OPTARG}";;
|
||||
d) dl_dir="${OPTARG}";;
|
||||
@ -34,6 +34,7 @@ main() {
|
||||
n) raw_base_name="${OPTARG}";;
|
||||
N) base_name="${OPTARG}";;
|
||||
H) hfile="${OPTARG}";;
|
||||
l) large_file="-l";;
|
||||
r) recurse="-r";;
|
||||
f) filename="${OPTARG}";;
|
||||
u) uris+=( "${OPTARG}" );;
|
||||
@ -127,7 +128,7 @@ main() {
|
||||
-f "${filename}" \
|
||||
-u "${uri}" \
|
||||
-o "${tmpf}" \
|
||||
${quiet} ${recurse} -- "${@}"
|
||||
${quiet} ${large_file} ${recurse} -- "${@}"
|
||||
then
|
||||
# cd back to keep path coherence
|
||||
cd "${OLDPWD}"
|
||||
|
@ -51,10 +51,12 @@ _on_error() {
|
||||
}
|
||||
|
||||
quiet=
|
||||
large_file=0
|
||||
recurse=0
|
||||
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
|
||||
case "${OPT}" in
|
||||
q) quiet=-q; exec >/dev/null;;
|
||||
l) large_file=1;;
|
||||
r) recurse=1;;
|
||||
o) output="${OPTARG}";;
|
||||
u) uri="${OPTARG}";;
|
||||
@ -205,6 +207,17 @@ if [ ${recurse} -eq 1 ]; then
|
||||
done
|
||||
fi
|
||||
|
||||
# If there are large files then fetch them.
|
||||
if [ ${large_file} -eq 1 ]; then
|
||||
_git lfs fetch
|
||||
_git lfs checkout
|
||||
# If there are also submodules, recurse into them,
|
||||
if [ ${recurse} -eq 1 ]; then
|
||||
_git submodule foreach --recursive ${GIT} lfs fetch
|
||||
_git submodule foreach --recursive ${GIT} lfs checkout
|
||||
fi
|
||||
fi
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
# Generate the archive.
|
||||
|
Loading…
Reference in New Issue
Block a user