chiark / gitweb /
Allow rm to recursively remove directories
authorCiaran Gultnieks <ciaran@ciarang.com>
Sun, 27 Oct 2013 17:05:53 +0000 (17:05 +0000)
committerCiaran Gultnieks <ciaran@ciarang.com>
Sun, 27 Oct 2013 17:05:53 +0000 (17:05 +0000)
docs/fdroid.texi
fdroidserver/common.py

index f57985690b2111be3ddb1df9261333071a28b365..80d0abd6b39b475a5eee93a5a5ff958e111ea781 100644 (file)
@@ -840,14 +840,15 @@ which architecture or platform the apk is designed to run on.
 If specified, the package version code in the AndroidManifest.xml is
 replaced with the version code for the build. See also forceversion.
 
-@item rm=<relpath>
-Specifies the relative path of a file to delete before the build is
-done. The path is relative to the base of the build directory - i.e.
-the root of the directory structure checked out from the source
-respository - not necessarily the directory that contains
+@item rm=<relpath1;relpath2;...>
+Specifies the relative paths of files or directories to delete before
+the build is done. The paths are relative to the base of the build
+directory - i.e. the root of the directory structure checked out from
+the source respository - not necessarily the directory that contains
 AndroidManifest.xml.
 
-Multiple files can be specified by separating they with ';'.
+Multiple files/directories can be specified by separating them with ';'.
+Directories will be recursively deleted.
 
 @item fixtrans=yes
 Modifies any instances of string resources that use multiple
index 9732ceb07d650a897c985abb43c89c6cc8e6481a..ce9eb594cd8012b01deeddd32c2a3a2f9aee60ab 100644 (file)
@@ -1424,12 +1424,14 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, sdk_path,
                 path]) != 0:
                 raise BuildException("Failed to amend manifest")
 
-    # Delete unwanted file...
+    # Delete unwanted files...
     if 'rm' in build:
         for part in build['rm'].split(';'):
             dest = os.path.join(build_dir, part.strip())
+            if not os.path.realpath(dest).startswith(os.path.realpath(root_dir)):
+                raise BuildException("rm is outside build root")
             if os.path.exists(dest):
-                os.remove(dest)
+                subprocess.call('rm -rf ' + dest, shell=True)
 
     # Fix apostrophes translation files if necessary...
     if build.get('fixapos', 'no') == 'yes':