On Fri, Feb 19, 2010 at 3:26 PM, Mark Pustjens <pustjens@xxxxxx> wrote: > Hi List, > > The attached patch fixes a TODO in lib-pacman of aif. > Instead of hardcoding that `core' is always available locally and falling > back to net for others, it now checks /src/ for repos. > > It assumes repos are stored at /src/$repo/pkg/. All these repos are added as > cache dirs. > > While preparing pacman, a number of repo names are provided to be prepared. > > All those repos which were requested are added as actual repo. If this repo > is available locally, the url points to disk. Otherwise it falls back to the > mirrorlist. CCing to the arch-releng list
diff -u -Naur aif-2009.08.07/src/core/libs/lib-pacman.sh aif-2009.08.07-new/src/core/libs/lib-pacman.sh --- aif-2009.08.07/src/core/libs/lib-pacman.sh 2009-08-07 21:25:04.000000000 +0200 +++ aif-2009.08.07-new/src/core/libs/lib-pacman.sh 2010-02-19 22:12:33.000000000 +0100 @@ -62,25 +62,34 @@ [ "$var_PKG_SOURCE_TYPE" = "cd" ] && local serverurl="${var_FILE_URL}" [ "$var_PKG_SOURCE_TYPE" = "net" ] && local serverurl="${var_SYNC_URL}" - [ -z "$1" ] && repos=core - [ -n "$1" ] && repos="$@" - # Setup a pacman.conf in /tmp - cat << EOF > /tmp/pacman.conf -[options] -CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg -CacheDir = /src/core/pkg -EOF - -for repo in $repos -do - #TODO: this is a VERY, VERY dirty hack. we fall back to net for any non-core repo because we only have core on the CD. also user maybe didn't pick a mirror yet - if [ "$repo" != core ] - then - add_pacman_repo target ${repo} "Include = $var_MIRRORLIST" + if [ -z "$1" ]; then + repos="core" else - add_pacman_repo target ${repo} "Server = ${serverurl/\$repo/$repo}" # replace literal '$repo' in the serverurl string by "$repo" where $repo is our variable. + repos="$@" fi -done + + # We make the assumption that /src/ contains a number of directories, each + # of which contains a package repository under subdir `pkg'. + # Eg: /src/core/pkg is a package repository. + local_repos=`ls /src/` + + # Setup a pacman.conf in /tmp + echo "[options]" > /tmp/pacman.conf + echo "CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg" >> /tmp/pacman.conf + for repo in ${local_repos}; do + echo "CacheDir = /src/${repo}/pkg" >> /tmp/pacman.conf + done + + # Add each repo to the config file + # If the repo is available locally, add a local url, otherwise refer to the mirrorlist. + for repo in ${repos}; do + if echo "${local_repos}" | grep "^${repo}$" >/dev/null ;then + add_pacman_repo target ${repo} "Server = file:///src/${repo}/pkg" + else + add_pacman_repo target ${repo} "Include = ${var_MIRRORLIST}" + fi + done + # Set up the necessary directories for pacman use [ ! -d "${var_TARGET_DIR}/var/cache/pacman/pkg" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/cache/pacman/pkg" [ ! -d "${var_TARGET_DIR}/var/lib/pacman" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/lib/pacman"