diff --git a/archrelease.in b/archrelease.in
index 5bc2c90b25c2747449762d09f341d5fba64d630a..533a5474b7d1c563912cef83a31d29e2d59016a0 100644
--- a/archrelease.in
+++ b/archrelease.in
@@ -54,6 +54,9 @@ for file in "${known_files[@]}"; do
 	fi
 done
 
+# gracefully handle files containing an "@" character
+known_files=("${known_files[@]/%/@}")
+
 for tag in "$@"; do
 	stat_busy "Copying ${trunk} to ${tag}"
 
diff --git a/commitpkg.in b/commitpkg.in
index b5cf04388c43e821290bb7782b6c07276e02b5ee..8b874260efbc0c40e23d688638926aa2d6c57e56 100644
--- a/commitpkg.in
+++ b/commitpkg.in
@@ -57,7 +57,7 @@ esac
 
 # check if all local source files are under version control
 for s in "${source[@]}"; do
-	if [[ $s != *://* ]] && ! svn status -v "$s" | grep -q '^[ AMRX~]'; then
+	if [[ $s != *://* ]] && ! svn status -v "$s@" | grep -q '^[ AMRX~]'; then
 		die "$s is not under version control"
 	fi
 done