@@ -14,6 +14,11 @@ declare -a REPOS=(
14
14
" https://jitpack.io"
15
15
)
16
16
17
+ # These files are not necessary for the build process.
18
+ FILENAMES_BLACKLIST=' -(javadoc|runtime|gwt|headers|sources|src|tests|adapters|modular|site|bin)\.'
19
+ FILETYPES_BLACKLIST=' (pom|json|zip|module|xml|md5|sha1|sha256|sha512)$'
20
+ SIGNATURE_BLACKLIST=' (pom|jar|json|zip|module|xml|md5|asc).asc$'
21
+
17
22
function nix_prefetch() {
18
23
nix store prefetch-file --json " ${1} " 2> /dev/null
19
24
}
@@ -36,7 +41,49 @@ function match_repo_url() {
36
41
37
42
function pom_has_nodeps_jar() {
38
43
grep ' <shadedClassifierName>nodeps</shadedClassifierName>' " ${1} " \
39
- > /dev/null 2>&1
44
+ > /dev/null 2>&1
45
+ }
46
+
47
+ function guess_pkg_files() {
48
+ # Some deps are just POMs, in which case there is no JAR to fetch.
49
+ [[ " ${OBJ_TYPE} " == " " ]] && echo " ${PKG_NAME} .jar"
50
+ [[ " ${OBJ_TYPE} " == " jar" ]] && echo " ${PKG_NAME} .jar"
51
+ [[ " ${OBJ_TYPE} " == " bundle" ]] && echo " ${PKG_NAME} .jar"
52
+ [[ " ${OBJ_TYPE} " =~ aar* ]] && echo " ${PKG_NAME} .aar"
53
+ [[ " ${OBJ_TYPE} " == " aar.asc" ]] && echo " ${PKG_NAME} .${OBJ_TYPE} "
54
+ pom_has_nodeps_jar " ${POM_PATH} " && echo " ${PKG_NAME} -nodeps.jar"
55
+ }
56
+
57
+ function get_pkg_files() {
58
+ REPO_URL=" ${1} "
59
+ PKG_PATH=" ${2} "
60
+ PKG_NAME=" ${3} "
61
+ # Google Maven repo doesn't have normal HTML directory listing.
62
+ if [[ " ${REPO_URL} " == " https://dl.google.com/dl/android/maven2" ]]; then
63
+ FOUND=$( curl --fail -s " ${REPO_URL} /${PKG_PATH} /artifact-metadata.json" )
64
+ # Some older packages do not have artifacts-metadata.json.
65
+ if [[ " $? " -eq 0 ]]; then
66
+ FOUND=$( echo " ${FOUND} " | jq -r ' .artifacts[].name' )
67
+ else
68
+ FOUND=' '
69
+ fi
70
+ else
71
+ FOUND=$(
72
+ curl -s " ${REPO_URL} /${PKG_PATH} /" \
73
+ | htmlq a -a href \
74
+ | grep -e " ^${PKG_NAME} "
75
+ )
76
+ fi
77
+ if [[ " ${FOUND} " == ' ' ]]; then
78
+ guess_pkg_files
79
+ else
80
+ # Filter out files we don't actually need for builds.
81
+ echo " ${FOUND} " \
82
+ | grep -v -E \
83
+ -e " ${FILENAMES_BLACKLIST} " \
84
+ -e " ${FILETYPES_BLACKLIST} " \
85
+ -e " ${SIGNATURE_BLACKLIST} "
86
+ fi
40
87
}
41
88
42
89
function fetch_and_template_file() {
@@ -58,10 +105,6 @@ function fetch_and_template_file() {
58
105
}"
59
106
}
60
107
61
- function fetch_and_template_file_no_fail() {
62
- fetch_and_template_file " ${1} " 2> /dev/null || true
63
- }
64
-
65
108
if [[ -z " ${1} " ]]; then
66
109
echo " Required POM URL argument not given!" >&2
67
110
exit 1
@@ -77,7 +120,7 @@ echo -en "${CLR} - Nix entry for: ${1##*/}\r" >&2
77
120
REPO_URL=$( match_repo_url " ${PKG_URL_NO_EXT} " )
78
121
79
122
if [[ -z " ${REPO_URL} " ]]; then
80
- echo " ! Repo URL not found: %s " " ${REPO_URL }" >&2
123
+ echo " ! Repo URL not found for: ${POM_URL }" >&2
81
124
exit 1
82
125
fi
83
126
# Get the relative path without full URL
@@ -114,12 +157,8 @@ echo -ne "
114
157
\" sha256\" : \" ${POM_SHA256} \"
115
158
}"
116
159
117
- # Some deps are just POMs, in which case there is no JAR to fetch.
118
- [[ " ${OBJ_TYPE} " == " " ]] && fetch_and_template_file_no_fail " ${PKG_NAME} .jar"
119
- [[ " ${OBJ_TYPE} " == " jar" ]] && fetch_and_template_file " ${PKG_NAME} .jar"
120
- [[ " ${OBJ_TYPE} " == " bundle" ]] && fetch_and_template_file " ${PKG_NAME} .jar"
121
- [[ " ${OBJ_TYPE} " =~ aar* ]] && fetch_and_template_file " ${PKG_NAME} .aar"
122
- [[ " ${OBJ_TYPE} " == " aar.asc" ]] && fetch_and_template_file " ${PKG_NAME} .${OBJ_TYPE} "
123
- pom_has_nodeps_jar " ${POM_PATH} " && fetch_and_template_file " ${PKG_NAME} -nodeps.jar"
160
+ for FILE in $( get_pkg_files " ${REPO_URL} " " ${PKG_PATH} " " ${PKG_NAME} " ) ; do
161
+ fetch_and_template_file " ${FILE} "
162
+ done
124
163
125
164
echo -e ' \n }\n },'
0 commit comments