[Reproducible-builds] [dh-python] 17/183: move fix_locations to dhpython.fs

Jérémy Bobbio lunar at moszumanska.debian.org
Fri Sep 19 15:30:14 UTC 2014


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch pu/reproducible_builds
in repository dh-python.

commit 118e26c81f5cf2c05c7c13d99786d070d6ef47bf
Author: Piotr Ożarowski <piotr at debian.org>
Date:   Sat Jun 29 23:00:35 2013 +0200

    move fix_locations to dhpython.fs
---
 dh_python2     | 49 +++-----------------------------
 dh_python3     | 74 +++---------------------------------------------
 dhpython/fs.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 96 insertions(+), 115 deletions(-)

diff --git a/dh_python2 b/dh_python2
index 0b43c80..b45a755 100755
--- a/dh_python2
+++ b/dh_python2
@@ -35,7 +35,8 @@ sys.path.insert(1, '/usr/share/dh-python/')
 from dhpython.debhelper import DebHelper
 from dhpython.depends import Dependencies
 from dhpython.interpreter import Interpreter
-from dhpython.version import supported, default, Version, VersionRange, \
+from dhpython.fs import fix_locations
+from dhpython.version import supported, default, VersionRange, \
     get_requested_versions
 from dhpython.pydist import validate as validate_pydist
 from dhpython.tools import relative_symlink,\
@@ -53,48 +54,6 @@ os.umask(0o22)
 DEFAULT = default('cpython2')
 SUPPORTED = supported('cpython2')
 
-# naming conventions used in the file:
-# * vrange - version range, pair of max and min versions
-# * fn - file name (without path)
-# * fpath - file path
-
-
-### FILES ######################################################
-def fix_locations(package):
-    """Move files to the right location."""
-    dbg_package = package.endswith('-dbg')
-    interpreter = Interpreter('python-dbg' if dbg_package else 'python')
-    found_versions = {}
-    for version in SUPPORTED:
-        interpreter.version = version
-
-        dstdir = interpreter.sitedir(package)
-        for srcdir in interpreter.old_sitedirs(package):
-            if isdir(srcdir):
-                if version in found_versions:
-                    log.error('files for version %s '
-                              'found in two locations:\n %s\n %s',
-                              version, srcdir, found_versions[version])
-                    exit(2)
-                log.info('Python %s should install files in %s. '
-                         'Did you forget "--install-layout=deb"?',
-                         version, interpreter.sitedir())
-                if not isdir(dstdir):
-                    os.makedirs(dstdir)
-                # TODO: what about relative symlinks?
-                log.debug('moving files from %s to %s', srcdir, dstdir)
-                os.renames(srcdir, dstdir)
-                found_versions[version] = srcdir
-
-        # do the same with debug locations
-        dstdir = interpreter.sitedir(package, gdb=True)
-        for srcdir in interpreter.old_sitedirs(package, gdb=True):
-            if isdir(srcdir):
-                if not isdir(dstdir):
-                    os.makedirs(dstdir)
-                log.debug('moving files from %s to %s', srcdir, dstdir)
-                os.renames(srcdir, dstdir)
-
 
 ### SHARING FILES ##############################################
 def share(package, stats, options):
@@ -414,7 +373,7 @@ def scan(package, dname=None, options=None):
                     continue
 
             elif private_dir:
-                if exists(fpath):
+                if exists(fpath) and fext != 'so':
                     mode = os.stat(fpath)[ST_MODE]
                     if mode & S_IXUSR or mode & S_IXGRP or mode & S_IXOTH:
                         if (options.no_shebang_rewrite or
@@ -639,7 +598,7 @@ def main():
             except Exception as err:
                 log.error("%s.pyremove: %s", package, err)
                 exit(5)
-            fix_locations(package)
+            fix_locations(package, interpreter, SUPPORTED)
         stats = scan(package, private_dir, options)
         if not private_dir:
             share(package, stats, options)
diff --git a/dh_python3 b/dh_python3
index 2572ad3..9bea7de 100755
--- a/dh_python3
+++ b/dh_python3
@@ -25,9 +25,8 @@ import logging
 import os
 import re
 import sys
-from filecmp import cmp as cmpfile
 from optparse import OptionParser, SUPPRESS_HELP
-from os.path import isdir, islink, exists, join, split
+from os.path import islink, exists, join, split
 from shutil import rmtree, copy as fcopy
 from stat import ST_MODE, S_IXUSR, S_IXGRP, S_IXOTH
 sys.path.insert(1, '/usr/share/dh-python/')
@@ -36,6 +35,7 @@ from dhpython.depends import Dependencies
 from dhpython.interpreter import Interpreter, EXTFILE_RE
 from dhpython.version import supported, default, Version, VersionRange
 from dhpython.pydist import validate as validate_pydist
+from dhpython.fs import fix_locations
 from dhpython.tools import fix_shebang, clean_egg_name
 from dhpython.option import Option
 
@@ -48,72 +48,6 @@ DEFAULT = default('cpython3')
 SUPPORTED = supported('cpython3')
 
 
-### FILES ######################################################
-def fix_locations(package):
-    """Move files to the right location."""
-    dbg_package = package.endswith('-dbg')
-    interpreter = Interpreter('python-dbg' if dbg_package else 'python')
-    for version in SUPPORTED:
-        interpreter.version = version
-
-        dstdir = interpreter.sitedir(package)
-        for srcdir in interpreter.old_sitedirs(package):
-            if isdir(srcdir):
-                # TODO: what about relative symlinks?
-                log.debug('moving files from %s to %s', srcdir, dstdir)
-                share_files(srcdir, dstdir, package.endswith('-dbg'))
-                parent_dir = '/'.join(srcdir.split('/')[:-1])
-                if exists(parent_dir) and not os.listdir(parent_dir):
-                    os.rmdir(parent_dir)
-
-        # do the same with debug locations
-        dstdir = interpreter.sitedir(package, gdb=True)
-        for srcdir in interpreter.old_sitedirs(package, gdb=True):
-            if isdir(srcdir):
-                log.debug('moving files from %s to %s', srcdir, dstdir)
-                share_files(srcdir, dstdir, package.endswith('-dbg'))
-                parent_dir = '/'.join(srcdir.split('/')[:-1])
-                if exists(parent_dir) and not os.listdir(parent_dir):
-                    os.rmdir(parent_dir)
-
-
-def share_files(srcdir, dstdir, dbg_package=False):
-    """Try to move as many files from srcdir to dstdir as possible."""
-    for i in os.listdir(srcdir):
-        fpath1 = join(srcdir, i)
-        if i.rsplit('.', 1)[-1] == 'so':
-            # try to rename extension here as well (in :meth:`scan` info about
-            # Python version is gone)
-            public_dir = PUBLIC_DIR_RE.match(srcdir)
-            if public_dir:
-                ver = public_dir.groups()[0]
-                # note that if ver is empty, default Python version will be used
-                tmp = "python%s-dbg" if dbg_package else "python%s"
-                interpreter = Interpreter(tmp % ver)
-                fpath1_orig = fpath1
-                new_name = interpreter.check_extname(i)
-                if new_name:
-                    fpath1 = join(srcdir, new_name)
-                if exists(fpath1):
-                    log.warn('destination file exist, '
-                             'cannot rename %s to %s', fpath1_orig, fpath1)
-                else:
-                    log.warn('renaming %s to %s', fpath1_orig, fpath1)
-                    os.rename(fpath1_orig, fpath1)
-        fpath2 = join(dstdir, i)
-        if not exists(fpath2):
-            os.renames(fpath1, fpath2)
-            continue
-        if isdir(fpath1):
-            share_files(fpath1, fpath2, dbg_package)
-        elif cmpfile(fpath1, fpath2, shallow=False):
-            os.remove(fpath1)
-        # XXX: check symlinks
-
-    if exists(srcdir) and not os.listdir(srcdir):
-        os.rmdir(srcdir)
-
-
 ### PACKAGE DETAILS ############################################
 def scan(package, dname=None, options=None):
     """Gather statistics about Python files in given package."""
@@ -243,7 +177,7 @@ def scan(package, dname=None, options=None):
                             os.rename(fpath, new_fpath)
 
             elif private_dir:
-                if exists(fpath):
+                if exists(fpath) and fext != 'so':
                     mode = os.stat(fpath)[ST_MODE]
                     if mode & S_IXUSR or mode & S_IXGRP or mode & S_IXOTH:
                         if (options.no_shebang_rewrite or
@@ -422,7 +356,7 @@ def main():
             interpreter.debug = True
 
         if not private_dir:
-            fix_locations(package)
+            fix_locations(package, interpreter, SUPPORTED)
         stats = scan(package, private_dir, options)
 
         dependencies = Dependencies(package, 'cpython3')
diff --git a/dhpython/fs.py b/dhpython/fs.py
new file mode 100644
index 0000000..42e72c5
--- /dev/null
+++ b/dhpython/fs.py
@@ -0,0 +1,88 @@
+# Copyright © 2013 Piotr Ożarowski <piotr at debian.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import logging
+from filecmp import cmp as cmpfile
+from os import listdir, remove, renames, rmdir
+from os.path import exists, isdir, join
+
+log = logging.getLogger(__name__)
+
+
+def fix_locations(package, interpreter, versions):
+    """Move files to the right location."""
+    for version in versions:
+        interpreter.version = version
+
+        dstdir = interpreter.sitedir(package)
+        for srcdir in interpreter.old_sitedirs(package):
+            if isdir(srcdir):
+                # TODO: what about relative symlinks?
+                log.debug('moving files from %s to %s', srcdir, dstdir)
+                share_files(srcdir, dstdir, interpreter)
+                parent_dir = '/'.join(srcdir.split('/')[:-1])
+                if exists(parent_dir) and not listdir(parent_dir):
+                    rmdir(parent_dir)
+
+        # do the same with debug locations
+        dstdir = interpreter.sitedir(package, gdb=True)
+        for srcdir in interpreter.old_sitedirs(package, gdb=True):
+            if isdir(srcdir):
+                log.debug('moving files from %s to %s', srcdir, dstdir)
+                share_files(srcdir, dstdir, interpreter)
+                parent_dir = '/'.join(srcdir.split('/')[:-1])
+                if exists(parent_dir) and not listdir(parent_dir):
+                    rmdir(parent_dir)
+
+
+def share_files(srcdir, dstdir, interpreter):
+    """Try to move as many files from srcdir to dstdir as possible."""
+    for i in listdir(srcdir):
+        fpath1 = join(srcdir, i)
+        if i.rsplit('.', 1)[-1] == 'so':
+            # try to rename extension here as well (in :meth:`scan` info about
+            # Python version is gone)
+            version = interpreter.parse_public_version(srcdir)
+            if version:
+                # note that if ver is empty, default Python version will be used
+                fpath1_orig = fpath1
+                new_name = interpreter.check_extname(i, version)
+                if new_name:
+                    fpath1 = join(srcdir, new_name)
+                if exists(fpath1):
+                    log.warn('destination file exist, '
+                             'cannot rename %s to %s', fpath1_orig, fpath1)
+                else:
+                    log.warn('renaming %s to %s', fpath1_orig, fpath1)
+                    renames(fpath1_orig, fpath1)
+        fpath2 = join(dstdir, i)
+        if not exists(fpath2):
+            renames(fpath1, fpath2)
+            continue
+        if isdir(fpath1):
+            share_files(fpath1, fpath2, interpreter)
+        elif cmpfile(fpath1, fpath2, shallow=False):
+            remove(fpath1)
+        # XXX: check symlinks
+
+    if exists(srcdir) and not listdir(srcdir):
+        rmdir(srcdir)
+
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dh-python.git



More information about the Reproducible-builds mailing list