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