mirror of
https://github.com/tuna/tunasync-scripts.git
synced 2025-04-20 12:24:12 +00:00
update hackage.sh, fixed bugs mentioned in #1 and tuna/tunasync#11
This commit is contained in:
parent
5975d7c5d5
commit
2092a9607a
33
hackage.sh
33
hackage.sh
@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# requires: wget, axel
|
||||||
set -e
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
function remove_broken() {
|
function remove_broken() {
|
||||||
interval=$1
|
interval=$1
|
||||||
@ -8,16 +10,19 @@ function remove_broken() {
|
|||||||
|
|
||||||
if [[ -f ${interval_file} ]]; then
|
if [[ -f ${interval_file} ]]; then
|
||||||
lastcheck=`cat ${interval_file}`
|
lastcheck=`cat ${interval_file}`
|
||||||
between=$(echo "${now}-${lastcheck}" | bc)
|
((between = now - lastcheck))
|
||||||
[[ $between -lt $interval ]] && echo "skip checking"; return 0
|
if ((between < interval)); then
|
||||||
|
echo "skip checking"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
echo "start checking"
|
echo "start checking"
|
||||||
|
|
||||||
mkdir -p "${TUNASYNC_WORKING_DIR}/package"
|
mkdir -p "${TUNASYNC_WORKING_DIR}/package"
|
||||||
cd "${TUNASYNC_WORKING_DIR}/package"
|
cd "${TUNASYNC_WORKING_DIR}/package"
|
||||||
|
|
||||||
ls | while read line; do
|
for line in *; do
|
||||||
echo -n "$line\t\t"
|
printf '%s\t\t' "$line"
|
||||||
tar -tzf $line >/dev/null || (echo "FAIL"; rm $line) && echo "OK"
|
tar -tzf $line >/dev/null || (echo "FAIL"; rm $line) && echo "OK"
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -29,28 +34,33 @@ function must_download() {
|
|||||||
dst=$2
|
dst=$2
|
||||||
while true; do
|
while true; do
|
||||||
echo "downloading: $name"
|
echo "downloading: $name"
|
||||||
wget "$src" -O "$dst" &>/dev/null || true
|
wget "$src" -O "$dst" &>/dev/null
|
||||||
tar -tzf package/$name >/dev/null || rm package/$name && break
|
tar -tzf package/$name >/dev/null || rm package/$name && break
|
||||||
done
|
done
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function hackage_mirror() {
|
function hackage_mirror() {
|
||||||
local_pklist="/tmp/hackage_local_pklist_$$.list"
|
local_pklist="/tmp/hackage_local_pklist_$$.list"
|
||||||
remote_pklist="/tmp/hackage_remote_pklist_$$.list"
|
remote_pklist="/tmp/hackage_remote_pklist_$$.list"
|
||||||
|
base_url="https://hackage.haskell.org"
|
||||||
|
|
||||||
cd ${TUNASYNC_WORKING_DIR}
|
cd ${TUNASYNC_WORKING_DIR}
|
||||||
mkdir -p package
|
mkdir -p package
|
||||||
|
|
||||||
echo "Downloading index..."
|
echo "Downloading index..."
|
||||||
rm index.tar.gz || true
|
rm index.tar.gz || true
|
||||||
axel http://hdiff.luite.com/packages/archive/index.tar.gz -o index.tar.gz > /dev/null
|
axel "${base_url}/packages/index.tar.gz" -o index.tar.gz > /dev/null
|
||||||
|
|
||||||
echo "building local package list"
|
echo "building local package list"
|
||||||
ls package | sed "s/\.tar\.gz$//" > $local_pklist
|
local tmp
|
||||||
|
tmp=(package/*)
|
||||||
|
tmp=(${tmp[@]#package/})
|
||||||
|
printf '%s\n' "${tmp[@]%.tar.gz}" > "${local_pklist}"
|
||||||
echo "preferred-versions" >> $local_pklist # ignore preferred-versions
|
echo "preferred-versions" >> $local_pklist # ignore preferred-versions
|
||||||
|
|
||||||
echo "building remote package list"
|
echo "building remote package list"
|
||||||
tar ztf index.tar.gz | (cut -d/ -f 1,2 2>/dev/null) | sed 's|/|-|' > $remote_pklist
|
tar -ztf index.tar.gz | (cut -d/ -f 1,2 2>/dev/null) | sed 's|/|-|' > $remote_pklist
|
||||||
|
|
||||||
echo "building download list"
|
echo "building download list"
|
||||||
# substract local list from remote list
|
# substract local list from remote list
|
||||||
@ -64,7 +74,7 @@ function hackage_mirror() {
|
|||||||
|
|
||||||
name="$pk.tar.gz"
|
name="$pk.tar.gz"
|
||||||
if [ ! -a package/$name ]; then
|
if [ ! -a package/$name ]; then
|
||||||
must_download "http://hackage.haskell.org/package/$pk/$name" "package/$name" &
|
must_download "${base_url}/package/$pk/$name" "package/$name" &
|
||||||
else
|
else
|
||||||
echo "skip existed: $name"
|
echo "skip existed: $name"
|
||||||
fi
|
fi
|
||||||
@ -72,7 +82,10 @@ function hackage_mirror() {
|
|||||||
|
|
||||||
# delete redundanty files
|
# delete redundanty files
|
||||||
comm <(sort $remote_pklist) <(sort $local_pklist) -13 | while read pk; do
|
comm <(sort $remote_pklist) <(sort $local_pklist) -13 | while read pk; do
|
||||||
name="$pk.tar.gz"
|
if [[ $pk == "preferred-versions" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
name="${pk}.tar.gz"
|
||||||
echo "deleting ${name}"
|
echo "deleting ${name}"
|
||||||
rm "package/$name"
|
rm "package/$name"
|
||||||
done
|
done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user