summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/add.c10
-rwxr-xr-xpactest/pmdb.py13
-rw-r--r--pactest/tests/upgrade045.py16
-rwxr-xr-xpactest/util.py6
-rw-r--r--scripts/makepkg.sh.in7
5 files changed, 44 insertions, 8 deletions
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index 610cc25c..6c0a1eae 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -355,14 +355,12 @@ static int extract_single_file(struct archive *archive,
* links, etc.
* 12- skip extraction, dir already exists.
*/
- struct stat lsbuf;
- if(_alpm_lstat(filename, &lsbuf) != 0) {
+
+ /* do both a lstat and a stat, so we can see what symlinks point to */
+ struct stat lsbuf, sbuf;
+ if(_alpm_lstat(filename, &lsbuf) != 0 || stat(filename, &sbuf) != 0) {
/* cases 1,2,3: couldn't stat an existing file, skip all backup checks */
} else {
- /* do a stat as well, so we can see what symlinks point to */
- struct stat sbuf;
- stat(filename, &sbuf);
-
if(S_ISDIR(lsbuf.st_mode) && S_ISDIR(entrymode)) {
/* case 12: existing dir, ignore it */
if(lsbuf.st_mode != entrymode) {
diff --git a/pactest/pmdb.py b/pactest/pmdb.py
index cc852c2a..af392000 100755
--- a/pactest/pmdb.py
+++ b/pactest/pmdb.py
@@ -119,7 +119,10 @@ class pmdb:
# desc
filename = os.path.join(path, "desc")
- fd = file(filename, "r")
+ if not os.path.isfile(filename):
+ print "invalid db entry found (desc missing) for pkg", pkgname
+ return None
+ fd = open(filename, "r")
while 1:
line = fd.readline()
if not line:
@@ -158,7 +161,10 @@ class pmdb:
# files
filename = os.path.join(path, "files")
- fd = file(filename, "r")
+ if not os.path.isfile(filename):
+ print "invalid db entry found (files missing) for pkg", pkgname
+ return None
+ fd = open(filename, "r")
while 1:
line = fd.readline()
if not line:
@@ -177,6 +183,9 @@ class pmdb:
# depends
filename = os.path.join(path, "depends")
+ if not os.path.isfile(filename):
+ print "invalid db entry found (depends missing) for pkg", pkgname
+ return None
fd = file(filename, "r")
while 1:
line = fd.readline()
diff --git a/pactest/tests/upgrade045.py b/pactest/tests/upgrade045.py
new file mode 100644
index 00000000..b2f81274
--- /dev/null
+++ b/pactest/tests/upgrade045.py
@@ -0,0 +1,16 @@
+self.description = "FS#9235"
+
+lp = pmpkg("foo")
+lp.files = ["etc/foo.cfg -> etc/foo.cfg"]
+lp.backup = ["etc/foo.cfg"]
+self.addpkg2db("local", lp)
+
+p1 = pmpkg("foo", "1.0-2")
+p1.files = ["etc/foo.cfg*"]
+p1.backup = ["etc/foo.cfg"]
+self.addpkg(p1)
+
+self.args = "-U %s" % p1.filename()
+
+self.addrule("PKG_VERSION=foo|1.0-2")
+self.addrule("FILE_EXIST=etc/foo.cfg")
diff --git a/pactest/util.py b/pactest/util.py
index b24bfdcf..2a6ff4e7 100755
--- a/pactest/util.py
+++ b/pactest/util.py
@@ -196,6 +196,9 @@ def mkcfgfile(filename, root, option, db):
def getmd5sum(filename):
"""
"""
+ if not os.path.isfile(filename):
+ print "file %s does not exist!" % filename
+ return ""
fd = open(filename, "rb")
checksum = md5.new()
while 1:
@@ -223,6 +226,9 @@ def mkmd5sum(data):
def getmtime(filename):
"""
"""
+ if not os.path.exists(filename):
+ print "path %s does not exist!" % filename
+ return 0, 0, 0
st = os.stat(filename)
return st[stat.ST_ATIME], st[stat.ST_MTIME], st[stat.ST_CTIME]
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 68ad5978..cecda1d2 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -998,23 +998,30 @@ devel_check() {
# This will only be used on the first call to makepkg; subsequent
# calls to makepkg via fakeroot will explicitly pass the version
# number to avoid having to determine the version number twice.
+ # Also do a brief check to make sure we have the VCS tool available.
oldpkgver=$pkgver
if [ ! -z ${_darcstrunk} ] && [ ! -z ${_darcsmod} ] ; then
+ [ $(type -p darcs) ] || return 0
msg "$(gettext "Determining latest darcs revision...")"
newpkgver=$(date +%Y%m%d)
elif [ ! -z ${_cvsroot} ] && [ ! -z ${_cvsmod} ] ; then
+ [ $(type -p cvs) ] || return 0
msg "$(gettext "Determining latest cvs revision...")"
newpkgver=$(date +%Y%m%d)
elif [ ! -z ${_gitroot} ] && [ ! -z ${_gitname} ] ; then
+ [ $(type -p git) ] || return 0
msg "$(gettext "Determining latest git revision...")"
newpkgver=$(date +%Y%m%d)
elif [ ! -z ${_svntrunk} ] && [ ! -z ${_svnmod} ] ; then
+ [ $(type -p svn) ] || return 0
msg "$(gettext "Determining latest svn revision...")"
newpkgver=$(svn log $_svntrunk --limit 1 -q | sed -n 's/^r\([0-9]*\) .*$/\1/p')
elif [ ! -z ${_bzrtrunk} ] && [ ! -z ${_bzrmod} ] ; then
+ [ $(type -p bzr) ] || return 0
msg "$(gettext "Determining latest bzr revision...")"
newpkgver=$(bzr revno ${_bzrtrunk})
elif [ ! -z ${_hgroot} ] && [ ! -z ${_hgrepo} ] ; then
+ [ $(type -p hg) ] || return 0
msg "$(gettext "Determining latest hg revision...")"
if [ -d ./src/$_hgrepo ] ; then
cd ./src/$_hgrepo