[pacman-dev] [PATCH] repo-add: try symlink, then hardlink, then copy for DB file
We were seeing some issues when trying to create our new database alias using symlinks on certain filesystems (see FS#19907). Have a fallback method in place where we first try a symlink, then a hard link, then just copy the database if all else fails. Signed-off-by: Dan McGee <dan@archlinux.org> --- scripts/repo-add.sh.in | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 7bde600..2838f81 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -487,7 +487,10 @@ if (( success )); then [[ -f $REPO_DB_FILE ]] && mv -f "$REPO_DB_FILE" "${REPO_DB_FILE}.old" [[ -f $tmpdir/$filename ]] && mv "$tmpdir/$filename" "$REPO_DB_FILE" - ln -sf "$REPO_DB_FILE" "${REPO_DB_FILE%.tar.*}" + dblink="${REPO_DB_FILE%.tar.*}" + ln -sf "$REPO_DB_FILE" "$dblink" 2>/dev/null || \ + ln -f "$REPO_DB_FILE" "$dblink" 2>/dev/null || \ + cp "$REPO_DB_FILE" "$dblink" else msg "$(gettext "No packages modified, nothing to do.")" exit 1 -- 1.7.1
On Thu, Jun 24, 2010 at 10:48 AM, Dan McGee <dan@archlinux.org> wrote:
We were seeing some issues when trying to create our new database alias using symlinks on certain filesystems (see FS#19907). Have a fallback method in place where we first try a symlink, then a hard link, then just copy the database if all else fails.
Signed-off-by: Dan McGee <dan@archlinux.org> --- scripts/repo-add.sh.in | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 7bde600..2838f81 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -487,7 +487,10 @@ if (( success )); then
[[ -f $REPO_DB_FILE ]] && mv -f "$REPO_DB_FILE" "${REPO_DB_FILE}.old" [[ -f $tmpdir/$filename ]] && mv "$tmpdir/$filename" "$REPO_DB_FILE" - ln -sf "$REPO_DB_FILE" "${REPO_DB_FILE%.tar.*}" + dblink="${REPO_DB_FILE%.tar.*}" + ln -sf "$REPO_DB_FILE" "$dblink" 2>/dev/null || \ + ln -f "$REPO_DB_FILE" "$dblink" 2>/dev/null || \ + cp "$REPO_DB_FILE" "$dblink"
Let's make it less constipated looking and have a fatal warning: if ! 2>dev/null \ { ls -sf "$REPO_DB_FILE" "$dblink" || ln -f "$REPO_DB_FILE" "$dblink || cp "$REPO_DB_FILE" "$dblink" || } then error "$(gettext "Could not link nor copy database to '%s'.")" \ "$dblink" exit 1 fi Andres P
else msg "$(gettext "No packages modified, nothing to do.")" exit 1 -- 1.7.1
participants (2)
-
Andres P
-
Dan McGee