[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#682906: marked as done (unblock: python-defaults/2.7.3-2)



Your message dated Fri, 8 Feb 2013 23:29:53 +0100
with message-id <20130208222953.GU8837@radis.cristau.org>
and subject line Re: Bug#682906: unblock: python-defaults/2.7.3-2
has caused the Debian Bug report #682906,
regarding unblock: python-defaults/2.7.3-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
682906: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=682906
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package python-defaults

The RC bug in unstable (#680793) that prevented this from migrating with an
automatice freeze exception is fixed in this upload.  Unblocking this will do
a number of beneficial things for squeeze:

 - Match the version number for python and python2.7.3.  Although this is
   costmetic, it does cause confusion.

 - Matches the feature set in squeeze between dh_python2 and dh_python3.  It
   would be difficult for backporters, derivatives, and third party vendors to
   keep straight which did what with a skewed feature set.  This is better
   avoided.

This is low risk to do because the changes have already been exercised in
dh_python3.  In fact, the issues it had were with dh_python2 code that had not
been completely adapted to python3.  The changes in this package for python
are solid.

I am attaching both the debdiff for this upload and for testing to show the
minor nature of the changes from what already had, at one time, a freeze
exception.

unblock python-defaults/2.7.3-2
diff -Nru python-defaults-2.7.3/debian/changelog python-defaults-2.7.3/debian/changelog
--- python-defaults-2.7.3/debian/changelog	2012-06-30 14:24:03.000000000 -0400
+++ python-defaults-2.7.3/debian/changelog	2012-07-26 18:26:27.000000000 -0400
@@ -1,3 +1,15 @@
+python-defaults (2.7.3-2) unstable; urgency=low
+
+  * dh_python2: ignore empty files while trying to normalize shebangs
+    (Closes: #680793)
+  * Fix lack of python-imaging in pydist/dist_fallback
+    - Add python-imaging override to pydist/generate_fallback_list.py
+    - pydist/dist_fallback: Regenerate to add python-imaging (which wasn't
+      recognized before due to .pth file) along with a few automatic
+      adjustments 
+
+ -- Piotr Ożarowski <piotr@debian.org>  Thu, 26 Jul 2012 23:03:32 +0200
+
 python-defaults (2.7.3-1) unstable; urgency=low
 
   [ Piotr Ożarowski ]
diff -Nru python-defaults-2.7.3/debpython/tools.py python-defaults-2.7.3/debpython/tools.py
--- python-defaults-2.7.3/debpython/tools.py	2012-06-09 18:08:06.000000000 -0400
+++ python-defaults-2.7.3/debpython/tools.py	2012-07-26 18:26:10.000000000 -0400
@@ -100,6 +100,9 @@
     try:
         with open(fpath) as fp:
             fcontent = fp.readlines()
+        if not fcontent:
+            log.debug('fix_shebang: ignoring empty file: %s', fpath)
+            return None
     except IOError:
         log.error('cannot open %s', fpath)
         return False
diff -Nru python-defaults-2.7.3/pydist/dist_fallback python-defaults-2.7.3/pydist/dist_fallback
--- python-defaults-2.7.3/pydist/dist_fallback	2012-06-30 08:22:25.000000000 -0400
+++ python-defaults-2.7.3/pydist/dist_fallback	2012-07-26 18:26:10.000000000 -0400
@@ -2,6 +2,7 @@
 setuptools python-pkg-resources
 wsgiref python (>= 2.5) | python-wsgiref
 argparse python (>= 2.7) | python-argparse
+pil python-imaging
 AddOns python-peak.util
 BatchModify trac-batchmodify
 BitTornado bittornado
@@ -193,6 +194,7 @@
 deluge deluge-common
 devscripts devscripts
 dicompyler dicompyler
+dispcalGUI dispcalgui
 dissy dissy
 djagios djagios
 django_ajax_selects django-ajax-selects
@@ -372,7 +374,6 @@
 osc osc
 pYsearch python-yahoo
 pbundler pbundler
-pdfposter pdfposter
 pdfshuffler pdfshuffler
 pep8 pep8
 perroquet perroquet
@@ -405,7 +406,6 @@
 pyacidobasic python-acidobasic
 pyacoustid python-acoustid
 pyalsaaudio python-alsaaudio
-pybackpack pybackpack
 pybloom python-bloomfilter
 pybridge pybridge
 pybtex pybtex
@@ -450,7 +450,6 @@
 pyrite_publisher pyrite-publisher
 pysane python-imaging-sane
 pysatellites python-satellites
-pysendfile python-sendfile
 pyserial python-serial
 pysnmp python-pysnmp4
 pysnmp_apps python-pysnmp4-apps
@@ -625,9 +624,9 @@
 udev_discover udev-discover
 ufw ufw
 unattended_upgrades unattended-upgrades
-undertaker undertaker
 unittest_xml_reporting python-xmlrunner
 urlscan urlscan
+vamos undertaker
 vboxapi virtualbox
 virtaal virtaal
 virtinst virtinst
diff -Nru python-defaults-2.7.3/pydist/generate_fallback_list.py python-defaults-2.7.3/pydist/generate_fallback_list.py
--- python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-06-10 08:07:25.000000000 -0400
+++ python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-07-26 18:26:10.000000000 -0400
@@ -72,4 +72,6 @@
 fp.write('setuptools python-pkg-resources\n')
 fp.write('wsgiref python (>= 2.5) | python-wsgiref\n')
 fp.write('argparse python (>= 2.7) | python-argparse\n')
+# wasn't recognized due to .pth file (egg-info is in PIL/ and not in *-packages/)
+fp.write('pil python-imaging\n')
 fp.writelines(result)
diff -Nru python-defaults-2.7.3~rc2/debian/changelog python-defaults-2.7.3/debian/changelog
--- python-defaults-2.7.3~rc2/debian/changelog	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/changelog	2012-07-26 18:26:27.000000000 -0400
@@ -1,3 +1,46 @@
+python-defaults (2.7.3-2) unstable; urgency=low
+
+  * dh_python2: ignore empty files while trying to normalize shebangs
+    (Closes: #680793)
+  * Fix lack of python-imaging in pydist/dist_fallback
+    - Add python-imaging override to pydist/generate_fallback_list.py
+    - pydist/dist_fallback: Regenerate to add python-imaging (which wasn't
+      recognized before due to .pth file) along with a few automatic
+      adjustments 
+
+ -- Piotr Ożarowski <piotr@debian.org>  Thu, 26 Jul 2012 23:03:32 +0200
+
+python-defaults (2.7.3-1) unstable; urgency=low
+
+  [ Piotr Ożarowski ]
+  * dh_python2:
+    - remove even more \.so.* dangling symlinks, thanks to Stefano
+      Rivera for providing a test case
+    - rewrite shebangs by default (disable via --no-shebang-rewrite),
+      examples:
+       + "/usr/bin/env python*" → "/usr/bin/python*"
+       + "/usr/local/bin/python foo" → "/usr/bin/python foo"
+       + "/usr/bin/python2" → "/usr/bin/python"
+    - new --shebang option to replace all shebangs in bin dirs
+      (example: --shebang /usr/bin/python2.6)
+    - no longer generates python2.X | python2.Y depenendies for public modules
+      (Closes: 625740)
+    - translate Python version numbers into Debian ones for those
+      require.txt items that have a pydist file with (uscan like) rules
+      or PEP386 flag (Closes: #653740)
+  * Improve dh_python2 manpage a bit, add information about cleaning debug
+    packages (Closes: #653741)
+  * pyversions, dh_python2, pycompile: allow to override system's list of
+    supported Python versions via DEBPYTHON_SUPPORTED and default Python
+    version via DEBPYTHON_DEFAULT env. variables
+  * Debhelper's python2 sequence now inserts dh_python2 before dh_installinit
+    (closes: 670418)
+
+  [ Scott Kitterman ]
+  * Bump upstream version to match current unstable/wheezy python2.7 version
+
+ -- Piotr Ożarowski <piotr@debian.org>  Sat, 30 Jun 2012 20:23:59 +0200
+
 python-defaults (2.7.3~rc2-1) unstable; urgency=low
 
   [ Scott Kitterman ]
diff -Nru python-defaults-2.7.3~rc2/debian/control python-defaults-2.7.3/debian/control
--- python-defaults-2.7.3~rc2/debian/control	2012-06-05 22:59:07.000000000 -0400
+++ python-defaults-2.7.3/debian/control	2012-07-26 18:26:10.000000000 -0400
@@ -13,7 +13,7 @@
 Package: python
 Architecture: all
 Priority: standard
-Depends: ${misc:Depends}, python2.7 (>= 2.7.3~rc2-1~), python-minimal (= ${binary:Version})
+Depends: ${misc:Depends}, python2.7 (>= 2.7.3-1~), python-minimal (= ${binary:Version})
 Suggests: python-doc (= ${binary:Version}), python-tk (= ${binary:Version})
 Conflicts: python-central (<< 0.5.5)
 Breaks: python-csv (<< 1.0-4), python-bz2 (<< 1.1-8), python-email (<< 2.5.5-3), update-manager-core (<< 0.200.5-2)
@@ -30,11 +30,11 @@
 Package: python-minimal
 Architecture: all
 Priority: standard
-Depends: ${misc:Depends}, python2.7-minimal (>= 2.7.3~rc2-1~), dpkg (>= 1.13.20)
+Depends: ${misc:Depends}, python2.7-minimal (>= 2.7.3-1~), dpkg (>= 1.13.20)
 Recommends: python
 Conflicts: python-central (<< 0.5.5)
-Breaks: python (<= 2.7.3~rc2-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
-Replaces: python (<= 2.7.3~rc2-1~)
+Breaks: python (<= 2.7.3-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
+Replaces: python (<= 2.7.3-1~)
 Description: minimal subset of the Python language (default version)
  This package contains the interpreter and some essential modules.  It's used
  in the boot process for some basic tasks.
@@ -43,7 +43,7 @@
 
 Package: python-examples
 Architecture: all
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-examples (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-examples (>= 2.7.3-1~)
 Description: examples for the Python language (default version)
  Examples, Demos and Tools for Python. These are files included in
  the upstream Python distribution.
@@ -53,7 +53,7 @@
 
 Package: python-dev
 Architecture: all
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dev (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dev (>= 2.7.3-1~)
 Description: header files and a static library for Python (default)
  Header files, a static library and development tools for building
  Python modules, extending the Python interpreter or embedding Python
@@ -66,8 +66,8 @@
 Architecture: all
 Depends: ${misc:Depends}, python (= ${binary:Version}), python-tk (>= 2.4.3-3), idle-python2.7
 Enhances: python
-Replaces: python (<< 2.7.3~rc2-1~)
-Breaks: python (<< 2.7.3~rc2-1~)
+Replaces: python (<< 2.7.3-1~)
+Breaks: python (<< 2.7.3-1~)
 Description: IDE for Python using Tkinter (default version)
  IDLE is an Integrated Development Environment for Python.
  IDLE is written using Tkinter and therefore quite platform-independent.
@@ -78,7 +78,7 @@
 Package: python-doc
 Section: doc
 Architecture: all
-Depends: ${misc:Depends}, python2.7-doc (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python2.7-doc (>= 2.7.3-1~)
 Suggests: python-examples, python (= ${binary:Version})
 Breaks: python (<< 2.3.5)
 Replaces: python (<< 2.3.5)
@@ -104,7 +104,7 @@
 Architecture: all
 Section: debug
 Priority: extra
-Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dbg (>= 2.7.3~rc2-1~)
+Depends: ${misc:Depends}, python (= ${binary:Version}), python2.7-dbg (>= 2.7.3-1~)
 Provides: python-gdbm-dbg, python-tk-dbg
 Description: debug build of the Python Interpreter (version 2.7)
  Python interpreter configured with --pydebug. Dynamically loaded modules are
diff -Nru python-defaults-2.7.3~rc2/debian/control.in python-defaults-2.7.3/debian/control.in
--- python-defaults-2.7.3~rc2/debian/control.in	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/control.in	2012-07-26 18:26:10.000000000 -0400
@@ -33,8 +33,8 @@
 Depends: ${misc:Depends}, @PVER@-minimal (>= @PREVVER@), dpkg (>= 1.13.20)
 Recommends: python
 Conflicts: python-central (<< 0.5.5)
-Breaks: python (<= 2.7.3~rc2-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
-Replaces: python (<= 2.7.3~rc2-1~)
+Breaks: python (<= 2.7.3-1~), python-dev (<< 2.6), python-dbg (<< 2.6), python-all (<< 2.6), python-all-dev (<< 2.6), python-all-dbg (<< 2.6), python-examples (<< 2.6), idle (<< 2.6), python2.5-minimal (<< 2.5.5-7), python2.6-minimal (<< 2.6.5~rc2-2), python3.1-minimal (<< 3.1.2~rc1-2), python-support (<< 1.0.10ubuntu2)
+Replaces: python (<= 2.7.3-1~)
 Description: minimal subset of the Python language (default version)
  This package contains the interpreter and some essential modules.  It's used
  in the boot process for some basic tasks.
@@ -66,8 +66,8 @@
 Architecture: all
 Depends: ${misc:Depends}, python (= ${binary:Version}), python-tk (>= 2.4.3-3), idle-@PVER@
 Enhances: python
-Replaces: python (<< 2.7.3~rc2-1~)
-Breaks: python (<< 2.7.3~rc2-1~)
+Replaces: python (<< 2.7.3-1~)
+Breaks: python (<< 2.7.3-1~)
 Description: IDE for Python using Tkinter (default version)
  IDLE is an Integrated Development Environment for Python.
  IDLE is written using Tkinter and therefore quite platform-independent.
diff -Nru python-defaults-2.7.3~rc2/debian/python-policy.sgml python-defaults-2.7.3/debian/python-policy.sgml
--- python-defaults-2.7.3~rc2/debian/python-policy.sgml	2012-06-05 23:07:12.000000000 -0400
+++ python-defaults-2.7.3/debian/python-policy.sgml	2012-07-26 18:26:10.000000000 -0400
@@ -330,7 +330,7 @@
 	  <item>
 	    <p>
 	      /usr/share/python/runtime.d/*.rtremove: these are called when
-	      a runtime is installed or stops being supported.  The first
+	      a runtime is removed or stops being supported.  The first
 	      argument is "rtremove", and the second argument is the
 	      affected runtime (for example
 	      python<var>X</var>.<var>Y</var>).
diff -Nru python-defaults-2.7.3~rc2/debian/pyversions.py python-defaults-2.7.3/debian/pyversions.py
--- python-defaults-2.7.3~rc2/debian/pyversions.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/pyversions.py	2012-07-26 18:26:10.000000000 -0400
@@ -110,7 +110,8 @@
     else:
         return _unsupported_versions
 
-_supported_versions = None
+_supported_versions = ["python%s" % ver for ver in \
+                       os.environ.get('DEBPYTHON_SUPPORTED', '').split()]
 def supported_versions(version_only=False):
     global _supported_versions
     if not _supported_versions:
@@ -144,7 +145,9 @@
     else:
         return _supported_versions
 
-_default_version = None
+_default_version = "python%s" % os.environ.get('DEBPYTHON_DEFAULT', '')
+if _default_version == 'python':
+    _default_version = None
 def default_version(version_only=False):
     global _default_version
     if not _default_version:
diff -Nru python-defaults-2.7.3~rc2/debian/rules python-defaults-2.7.3/debian/rules
--- python-defaults-2.7.3~rc2/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -20,7 +20,7 @@
 export PVER=python2.7
 
 PREVVER	:= $(shell awk '/^python/ && NR > 1 {print substr($$2,2,length($$2)-2); exit}' debian/changelog)
-PREVVER := 2.7.3~rc2-1~
+PREVVER := 2.7.3-1~
 
 PWD		:= $(shell pwd)
 
diff -Nru python-defaults-2.7.3~rc2/debpython/debhelper.py python-defaults-2.7.3/debpython/debhelper.py
--- python-defaults-2.7.3~rc2/debpython/debhelper.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/debhelper.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
diff -Nru python-defaults-2.7.3~rc2/debpython/depends.py python-defaults-2.7.3/debpython/depends.py
--- python-defaults-2.7.3~rc2/debpython/depends.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/depends.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
@@ -94,11 +94,13 @@
             tpl = 'python-dbg' if dbgpkg else 'python'
             minv = pub_vers[0]
             maxv = pub_vers[-1]
-            if dbgpkg:
-                tpl2 = 'python%d.%d-dbg'
-            else:
-                tpl2 = 'python%d.%d'
-            self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))
+            # generating "python2.X | python2.Y | python2.Z" dependencies
+            # disabled (see #625740):
+            #if dbgpkg:
+            #    tpl2 = 'python%d.%d-dbg'
+            #else:
+            #    tpl2 = 'python%d.%d'
+            #self.depend(' | '.join(tpl2 % i for i in debsorted(pub_vers)))
 
             # additional Depends to block python package transitions
             if minv <= DEFAULT:
@@ -112,21 +114,17 @@
         if stats['compile']:
             self.depend(MINPYCDEP)
 
-        if not options.ignore_shebangs:
-            for interpreter, version in stats['shebangs']:
-                self.depend(interpreter)
+        for interpreter, version in stats['shebangs']:
+            self.depend(interpreter)
 
         for private_dir, details in stats['private_dirs'].iteritems():
-            if options.ignore_shebangs:
-                versions = []
-            else:
-                versions = list(v for i, v in details.get('shebangs', []) if v)
+            versions = list(v for i, v in details.get('shebangs', []) if v)
 
             for v in versions:
                 if v in SUPPORTED:
                     self.depend("python%d.%d" % v)
                 else:
-                    log.warn('dependency on python%s (from shebang) ignored'
+                    log.info('dependency on python%s (from shebang) ignored'
                              ' - it\'s not supported anymore', vrepr(v))
             # /usr/bin/python shebang → add python to Depends
             if any(True for i, v in details.get('shebangs', []) if v is None):
diff -Nru python-defaults-2.7.3~rc2/debpython/files.py python-defaults-2.7.3/debpython/files.py
--- python-defaults-2.7.3~rc2/debpython/files.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/files.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
diff -Nru python-defaults-2.7.3~rc2/debpython/namespace.py python-defaults-2.7.3/debpython/namespace.py
--- python-defaults-2.7.3~rc2/debpython/namespace.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/namespace.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2011 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2011-2012 Piotr Ożarowski <piotr@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
diff -Nru python-defaults-2.7.3~rc2/debpython/option.py python-defaults-2.7.3/debpython/option.py
--- python-defaults-2.7.3~rc2/debpython/option.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/option.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
diff -Nru python-defaults-2.7.3~rc2/debpython/pydist.py python-defaults-2.7.3/debpython/pydist.py
--- python-defaults-2.7.3~rc2/debpython/pydist.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/pydist.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
@@ -24,6 +24,7 @@
 import os
 import re
 from os.path import exists, isdir, join
+from string import maketrans
 from subprocess import PIPE, Popen
 from debpython.version import vrepr, getver, get_requested_versions
 from debpython.tools import memoize
@@ -41,7 +42,7 @@
         ;\s*
         (?P<standard>PEP386)?                    # PEP-386 mode
         \s*
-        (?P<rules>s/.*)?                         # translator rules
+        (?P<rules>(?:s|tr|y).*)?                 # translator rules
     )?
     """, re.VERBOSE)
 REQUIRES_RE = re.compile(r'''
@@ -117,13 +118,13 @@
     req = safe_name(name) + rest
 
     data = load()
-    req_dict = REQUIRES_RE.match(req)
-    if not req_dict:
+    req_d = REQUIRES_RE.match(req)
+    if not req_d:
         log.info('please ask dh_python2 author to fix REQUIRES_RE '
                  'or your upstream author to fix requires.txt')
         raise Exception('requirement is not valid: %s' % req)
-    req_dict = req_dict.groupdict()
-    name = req_dict['name']
+    req_d = req_d.groupdict()
+    name = req_d['name']
     details = data.get(name.lower())
     if details:
         for item in details:
@@ -134,12 +135,13 @@
             if not item['dependency']:
                 return  # this requirement should be ignored
             if item['dependency'].endswith(')'):
-                # no need to translate versions if version is hardcoded in Debian
-                # dependency
-                return item['dependency']
-            if req_dict['version']:
-                # FIXME: translate it (rules, versions)
+                # no need to translate versions if version is hardcoded in
+                # Debian dependency
                 return item['dependency']
+            if req_d['version'] and (item['standard'] or item['rules']) and\
+               req_d['operator'] not in (None, '=='):
+                v = _translate(req_d['version'], item['rules'], item['standard'])
+                return "%s (%s %s)" % (item['dependency'], req_d['operator'], v)
             else:
                 return item['dependency']
 
@@ -231,3 +233,53 @@
 def ci_regexp(name):
     """Return case insensitive dpkg -S regexp."""
     return ''.join("[%s%s]" % (i.upper(), i) if i.isalpha() else i for i in name.lower())
+
+
+PRE_VER_RE = re.compile(r'[-.]?(alpha|beta|rc|dev|a|b|c)')
+GROUP_RE = re.compile(r'\$(\d+)')
+
+
+def _pl2py(pattern):
+    """Convert Perl RE patterns used in uscan to Python's
+
+    >>> print _pl2py('foo$3')
+    foo\g<3>
+    """
+    return GROUP_RE.sub(r'\\g<\1>', pattern)
+
+
+def _translate(version, rules, standard):
+    """Translate Python version into Debian one.
+
+    >>> _translate('1.C2betac', ['s/c//gi'], None)
+    '1.2beta'
+    >>> _translate('5-fooa1.2beta3-fooD',
+    ...     ['s/^/1:/', 's/-foo//g', 's:([A-Z]):+$1:'], 'PEP386')
+    '1:5~a1.2~beta3+D'
+    >>> _translate('x.y.x.z', ['tr/xy/ab/', 'y,z,Z,'], None)
+    'a.b.a.Z'
+    """
+    for rule in rules:
+        # uscan supports s, tr and y operations
+        if rule.startswith(('tr', 'y')):
+            # Note: no support for escaped separator in the pattern
+            pos = 1 if rule.startswith('y') else 2
+            tmp = rule[pos + 1:].split(rule[pos])
+            version = version.translate(maketrans(tmp[0], tmp[1]))
+        elif rule.startswith('s'):
+            # uscan supports: g, u and x flags
+            tmp = rule[2:].split(rule[1])
+            pattern = re.compile(tmp[0])
+            count = 1
+            if tmp[2:]:
+                flags = tmp[2]
+                if 'g' in flags:
+                    count = 0
+                if 'i' in flags:
+                    pattern = re.compile(tmp[0], re.I)
+            version = pattern.sub(_pl2py(tmp[1]), version, count)
+        else:
+            log.warn('unknown rule ignored: %s', rule)
+    if standard == 'PEP386':
+        version = PRE_VER_RE.sub('~\g<1>', version)
+    return version
diff -Nru python-defaults-2.7.3~rc2/debpython/tools.py python-defaults-2.7.3/debpython/tools.py
--- python-defaults-2.7.3~rc2/debpython/tools.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/tools.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
@@ -33,7 +33,7 @@
 
 log = logging.getLogger(__name__)
 EGGnPTH_RE = re.compile(r'(.*?)(-py\d\.\d(?:-[^.]*)?)?(\.egg-info|\.pth)$')
-SHEBANG_RE = re.compile(r'^#!\s*/usr/bin/(?:env\s+)?(python(\d+\.\d+)?(?:-dbg)?).*')
+SHEBANG_RE = re.compile(r'^#!\s*(.*?/bin/.*?)(python(\d+\.\d+)?(?:-dbg)?)(?:\s(.*))?')
 SHAREDLIB_RE = re.compile(r'NEEDED.*libpython(\d\.\d)')
 INSTALL_RE = re.compile(r"""
     (?P<pattern>.+?)  # file pattern
@@ -92,6 +92,42 @@
     return os.symlink(relpath(target, link), link)
 
 
+def fix_shebang(fpath, replacement=None):
+    """Normalize file's shebang.
+
+    :param replacement: new shebang command (path to interpreter and options)
+    """
+    try:
+        with open(fpath) as fp:
+            fcontent = fp.readlines()
+        if not fcontent:
+            log.debug('fix_shebang: ignoring empty file: %s', fpath)
+            return None
+    except IOError:
+        log.error('cannot open %s', fpath)
+        return False
+
+    match = SHEBANG_RE.match(fcontent[0])
+    if not match:
+        return None
+    if not replacement:
+        path, interpreter, version, argv = match.groups()
+        if path != '/usr/bin':  # f.e. /usr/local/* or */bin/env
+            replacement = "/usr/bin/%s" % interpreter
+        if interpreter == 'python2':
+            replacement = '/usr/bin/python'
+        if replacement and argv:
+            replacement += " %s" % argv
+    if replacement:
+        log.info('replacing shebang in %s (%s)', fpath, fcontent[0])
+        # do not catch IOError here, the file is zeroed at this stage so it's
+        # better to fail dh_python2
+        with open(fpath, 'w') as fp:
+            fp.write("#! %s\n" % replacement)
+            fp.writelines(fcontent[1:])
+    return True
+
+
 def shebang2pyver(fpath):
     """Check file's shebang.
 
@@ -105,10 +141,10 @@
             if not match:
                 return None
             res = match.groups()
-            if res != (None, None):
-                if res[1]:
-                    res = res[0], getver(res[1])
-                return res
+            if res[1:3] != (None, None):
+                if res[2]:
+                    return res[1], getver(res[2])
+                return res[1], None
     except IOError:
         log.error('cannot open %s', fpath)
 
diff -Nru python-defaults-2.7.3~rc2/debpython/version.py python-defaults-2.7.3/debpython/version.py
--- python-defaults-2.7.3~rc2/debpython/version.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/debpython/version.py	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 # -*- coding: UTF-8 -*-
-# Copyright © 2010 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
@@ -22,6 +22,7 @@
 import logging
 import re
 from ConfigParser import SafeConfigParser
+from os import environ
 from os.path import exists, dirname, join
 from types import GeneratorType
 
@@ -36,18 +37,23 @@
 
 # try to read debian_defaults and get a list of supported Python versions and
 # the default one from there
-_config = SafeConfigParser()
-_config.read(['/usr/share/python/debian_defaults',
-             join(dirname(__file__), '..', 'debian', 'debian_defaults')])
+_supported = environ.get('DEBPYTHON_SUPPORTED')
+_default = environ.get('DEBPYTHON_DEFAULT')
+if not _supported or not _default:
+    _config = SafeConfigParser()
+    _config.read('/usr/share/python/debian_defaults')
+    if not _default:
+        _default = _config.get('DEFAULT', 'default-version')[6:]
+    if not _supported:
+        _supported = _config.get('DEFAULT', 'supported-versions')\
+                     .replace('python', '')
 try:
-    DEFAULT = tuple(int(i) for i in _config.get('DEFAULT',
-                    'default-version')[6:].split('.'))
+    DEFAULT = tuple(int(i) for i in _default.split('.'))
 except Exception:
     log.exception('cannot read debian_defaults')
 try:
-    SUPPORTED = tuple(tuple(int(j) for j in i.strip()[6:].split('.'))\
-                            for i in _config.get('DEFAULT',
-                                'supported-versions').split(','))
+    SUPPORTED = tuple(tuple(int(j) for j in i.strip().split('.'))
+                            for i in _supported.split(','))
 except Exception:
     log.exception('cannot read debian_defaults')
 
@@ -83,10 +89,10 @@
             versions = set(v for v in SUPPORTED if minv <= v < maxv)
 
     if available:
-        versions = set(v for v in versions \
+        versions = set(v for v in versions
                        if exists("/usr/bin/python%d.%d" % v))
     elif available is False:
-        versions = set(v for v in versions \
+        versions = set(v for v in versions
                        if not exists("/usr/bin/python%d.%d" % v))
 
     return versions
@@ -190,7 +196,7 @@
         minv = sorted(hardcoded)[0]
 
     if current:
-        versions = sorted(get("%s-%s" % (minv if minv else '', \
+        versions = sorted(get("%s-%s" % (minv if minv else '',
                                          maxv if maxv else '')))
         if not versions:
             raise ValueError("version range doesn't match installed Python versions: %s" % value)
diff -Nru python-defaults-2.7.3~rc2/dh_python2 python-defaults-2.7.3/dh_python2
--- python-defaults-2.7.3~rc2/dh_python2	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/dh_python2	2012-07-26 18:26:10.000000000 -0400
@@ -1,7 +1,7 @@
 #! /usr/bin/python
 # -*- coding: UTF-8 -*- vim: et ts=4 sw=4
 
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
@@ -42,8 +42,8 @@
 from debpython.pydist import validate as validate_pydist, \
                              PUBLIC_DIR_RE
 from debpython.tools import sitedir, relative_symlink, \
-                            shebang2pyver, so2pyver, \
-                            clean_egg_name, \
+                            fix_shebang, shebang2pyver, \
+                            so2pyver, clean_egg_name, \
                             pyinstall, pyremove
 from debpython.option import Option
 
@@ -299,7 +299,7 @@
 
 
 ### PACKAGE DETAILS ############################################
-def scan(package, dname=None, clean_dbg_pkg=True):
+def scan(package, dname=None, options=None):
     """Gather statistics about Python files in given package."""
     r = {'requires.txt': set(),
          'nsp.txt': set(),
@@ -358,7 +358,7 @@
         # handle some EGG related data (.egg-info dirs)
         for name in dirs:
             if name.endswith('.egg-info'):
-                if dbg_package and clean_dbg_pkg:
+                if dbg_package and options.clean_dbg_pkg:
                     rmtree(join(root, name))
                     dirs.remove(name)
                     continue
@@ -380,6 +380,11 @@
             fpath = join(root, fn)
             if not exists(fpath):
                 # could be removed while handling .so symlinks
+                if islink(fpath) and '.so.' in split(fpath)[-1]:
+                    # dangling symlink to (now removed/renamed) .so file
+                    # which wasn't removed yet (see test3's quux.so.0)
+                    log.info('removing symlink: %s', fpath)
+                    os.remove(fpath)
                 continue
             fext = fn.rsplit('.', 1)[-1]
             if fext in ('pyc', 'pyo'):
@@ -399,18 +404,22 @@
                             os.remove(lpath)
                         log.info('renaming %s to %s', dstfpath, fn)
                         os.rename(dstfpath, fpath)
-                if dbg_package and clean_dbg_pkg and fext not in ('so', 'h'):
+                if dbg_package and options.clean_dbg_pkg and \
+                   fext not in ('so', 'h'):
                     os.remove(join(root, fn))
                     continue
 
             elif private_dir:
-                if exists(join(root, fn)):
-                    mode = os.stat(join(root, fn))[ST_MODE]
+                if exists(fpath):
+                    mode = os.stat(fpath)[ST_MODE]
                     if mode & S_IXUSR or mode & S_IXGRP or mode & S_IXOTH:
-                        res = shebang2pyver(join(root, fn))
-                        if res:
-                            r['private_dirs'].setdefault(private_dir, {})\
-                                .setdefault('shebangs', set()).add(res)
+                        if (options.no_shebang_rewrite or \
+                            fix_shebang(fpath, options.shebang)) and \
+                           not options.ignore_shebangs:
+                            res = shebang2pyver(fpath)
+                            if res:
+                                r['private_dirs'].setdefault(private_dir, {})\
+                                    .setdefault('shebangs', set()).add(res)
 
             if public_dir or private_dir:
                 if fext == 'so':
@@ -447,11 +456,14 @@
                 continue
             # search for scripts in bin dirs
             if bin_dir:
-                res = shebang2pyver(fpath)
-                if res:
-                    r['shebangs'].add(res)
+                if (options.no_shebang_rewrite or \
+                    fix_shebang(fpath, options.shebang)) and \
+                   not options.ignore_shebangs:
+                     res = shebang2pyver(fpath)
+                     if res:
+                         r['shebangs'].add(res)
 
-    if dbg_package and clean_dbg_pkg:
+    if dbg_package and options.clean_dbg_pkg:
         # remove empty directories in -dbg packages
         proot = proot + '/usr/lib'
         for root, dirs, file_names in os.walk(proot, topdown=False):
@@ -468,7 +480,7 @@
 ################################################################
 def main():
     usage = '%prog -p PACKAGE [-V [X.Y][-][A.B]] DIR [-X REGEXPR]\n'
-    parser = OptionParser(usage, version='%prog 2.0~beta1',
+    parser = OptionParser(usage, version='%prog 2.1',
                                    option_class=Option)
     parser.add_option('--no-guessing-versions', action='store_false',
         dest='guess_versions', default=True,
@@ -514,6 +526,8 @@
         help='recreate __init__.py files for given namespaces at install time')
     parser.add_option('--clean-pycentral', action='store_true', default=False,
         help='generate maintainer script that will remove pycentral files')
+    parser.add_option('--shebang',
+        help='use given command as shebang in scripts')
     parser.add_option('--ignore-shebangs', action='store_true', default=False,
         help='do not translate shebangs into Debian dependencies')
     parser.add_option('--ignore-namespace', action='store_true', default=False,
@@ -521,6 +535,8 @@
     parser.add_option('--no-dbg-cleaning', action='store_false',
             dest='clean_dbg_pkg', default=True,
         help='do not remove files from debug packages')
+    parser.add_option('--no-shebang-rewrite', action='store_true',
+            default=False, help='do not rewrite shebangs')
     # ignore some debhelper options:
     parser.add_option('-O', help=SUPPRESS_HELP)
 
@@ -588,7 +604,7 @@
             if not pyremove(package, options.vrange):
                 exit(5)
             fix_locations(package)
-        stats = scan(package, private_dir, options.clean_dbg_pkg)
+        stats = scan(package, private_dir, options)
         if not private_dir:
             share(package, stats, options)
             pyshared_dir = "debian/%s/usr/share/pyshared/" % package
diff -Nru python-defaults-2.7.3~rc2/dh_python2.rst python-defaults-2.7.3/dh_python2.rst
--- python-defaults-2.7.3~rc2/dh_python2.rst	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/dh_python2.rst	2012-07-26 18:26:10.000000000 -0400
@@ -22,13 +22,13 @@
  * build module/application using its standard build system,
    remember to build extensions for all supported Python versions (loop over
    ``pyversions -vr``),
- * install files to the *standard* locations, add ``--install-layout=deb`` to
+ * install files to the *standard* locations, add `--install-layout=deb` to
    setup.py's install command if your package is using distutils,
- * add ``python2`` to dh's ``--with`` option, or:
- * include /usr/share/cdbs/1/class/python-distutils.mk in debian/rules and
-   depend on cdbs (>= 0.4.90), or:
- * call dh_python2 in the binary-* target,
- * add ${python:Depends} to Depends,
+ * add `python2` to dh's --with option, or:
+ * `include /usr/share/cdbs/1/class/python-distutils.mk` in debian/rules and
+   depend on `cdbs (>= 0.4.90)`, or:
+ * call ``dh_python2`` in the `binary-*` target,
+ * add `${python:Depends}` to Depends
 
 NOTES
 -----
@@ -43,11 +43,13 @@
 dependencies
 ~~~~~~~~~~~~
 dh_python2 tries to translate Python dependencies from requires.txt file to
-Debian dependencies, use debian/pydist-overrides or --no-guessing-deps option
-to override it. If you want dh_python2 to generate more strict dependencies
-(f.e. to avoid ABI problems) create debian/python-foo.pydist file. See
-/usr/share/doc/python-doc/README.PyDist (provided by python-doc package) for
-more information.
+Debian dependencies. Use debian/pydist-overrides or --no-guessing-deps option
+to override it if the guess is incorrect. If you want dh_python2 to generate
+more strict dependencies (f.e. to avoid ABI problems) create
+debian/python-foo.pydist file. See /usr/share/doc/python-doc/README.PyDist
+(provided by python-doc package) for more information. If the pydist file
+contains PEP386 flag or set of (uscan like) rules, dh_python2 will make the
+depedency versioned (version requirements are ignored by default).
 
 namespace feature
 ~~~~~~~~~~~~~~~~~
@@ -70,24 +72,33 @@
 dh_python2 with --skip-private option and add another call with a path to this
 directory and new options.
 
+debug packages
+~~~~~~~~~~~~~~
+In binary packages which name ends with `-dbg`, all files in
+`/usr/lib/python2.X/{site,dist}-packages/` directory 
+that have extensions different than `so` or `h` are removed by default.
+Use --no-dbg-cleaning option to disable this feature.
+
 pyinstall files
 ~~~~~~~~~~~~~~~
 Files listed in debian/pkg.pyinstall file will be installed as public modules
 for all requested Python versions (dh_install doesn't know about python's site-
 vs. dist-packages issue).
 
-Syntax: "path/to/file [VERSION_RANGE] [NAMESPACE]". debian directory is
-automatically removed from the path, so you can place your files in debian/
-directory and install them from this location (if you want to install them in
-"debian" namespace, set NAMESPACE to debian). If NAMESPACE is set, all listed
-files will be installed in .../dist-packages/NAMESPACE/ directory.
+Syntax: ``path/to/file [VERSION_RANGE] [NAMESPACE]``
+
+debian directory is automatically removed from the path, so you can place your
+files in debian/ directory and install them from this location (if you want to
+install them in "debian" namespace, set NAMESPACE to debian). If NAMESPACE is
+set, all listed files will be installed in .../dist-packages/NAMESPACE/
+directory.
 
 Examples:
- * `foo.py` (installs .../dist-packages/foo.py for all supported Python versions)
- * `foo/bar.py 2.6-` (installs .../dist-packages/foo/bar.py for versions >= 2.6)
- * `foo/bar.py spam` (installs .../dist-packages/spam/bar.py)
- * `debian/*.py spam.egg 2.5` (installs .../python2.5/site-packages/spam/egg/\*.py
-   files)
+ * ``foo.py`` installs .../dist-packages/foo.py for all supported Python versions
+ * ``foo/bar.py 2.6-`` installs .../dist-packages/foo/bar.py for versions >= 2.6
+ * ``foo/bar.py spam`` installs .../dist-packages/spam/bar.py
+ * ``debian/*.py spam.egg 2.5`` installs .../python2.5/site-packages/spam/egg/\*.py
+   files
 
 pyremove files
 ~~~~~~~~~~~~~~
@@ -96,8 +107,18 @@
 debian/pkg.pyremove file.
 
 Examples:
- * `*.pth` (removes .pth files from .../dist-packages/)
- * `bar/baz.py 2.5` (removes .../python2.5/site-packages/bar/baz.py)
+ * ``*.pth`` removes .pth files from .../dist-packages/
+ * ``bar/baz.py 2.5`` removes .../python2.5/site-packages/bar/baz.py
+
+overriding supported / default Python versions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you want to override system's list of supported Python versions or the
+default one (f.e. to build a package that includes symlinks for older version
+of Python or compile .py files only for given interpreter version), you can do
+that via `DEBPYTHON_SUPPORTED` and/or `DEBPYTHON_DEFAULT` env. variables.
+
+Example: ``2.5,2.7`` limits the list of supported Python versions to Python 2.5
+and Python 2.7.
 
 
 OPTIONS
@@ -112,6 +133,8 @@
 
 --no-dbg-cleaning	do not remove any files from debug packages
 
+--no-shebang-rewrite	do not rewrite shebangs
+
 --skip-private	don't check private directories
 
 -v, --verbose	turn verbose mode on
@@ -156,6 +179,8 @@
 --clean-pycentral	generate maintainer script that will remove byte code
   generated by python-central helper
 
+--shebang=COMMAND	use given command as shebang in scripts
+
 --ignore-shebangs	do not translate shebangs into Debian dependencies
 
 SEE ALSO
diff -Nru python-defaults-2.7.3~rc2/Makefile python-defaults-2.7.3/Makefile
--- python-defaults-2.7.3~rc2/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -30,6 +30,9 @@
 %.1: %.rst
 	rst2man $< > $@
 
+%.html: %.rst
+	rst2html $< > $@
+
 manpages: $(MANPAGES)
 
 dist_fallback:
diff -Nru python-defaults-2.7.3~rc2/pyclean python-defaults-2.7.3/pyclean
--- python-defaults-2.7.3~rc2/pyclean	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pyclean	2012-07-26 18:26:10.000000000 -0400
@@ -1,8 +1,7 @@
 #! /usr/bin/python
-# -*- coding: UTF-8 -*-
-# vim: et ts=4 sw=4
-
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# -*- coding: UTF-8 -*- vim: et ts=4 sw=4
+#
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@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
diff -Nru python-defaults-2.7.3~rc2/pycompile python-defaults-2.7.3/pycompile
--- python-defaults-2.7.3~rc2/pycompile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pycompile	2012-07-26 18:26:10.000000000 -0400
@@ -1,8 +1,7 @@
 #! /usr/bin/python
-# -*- coding: utf-8 -*-
-# vim: et ts=4 sw=4
-
-# Copyright © 2010-2011 Piotr Ożarowski <piotr@debian.org>
+# -*- coding: utf-8 -*- vim: et ts=4 sw=4
+#
+# Copyright © 2010-2012 Piotr Ożarowski <piotr@debian.org>
 # Copyright © 2010 Canonical Ltd
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
diff -Nru python-defaults-2.7.3~rc2/pydist/dist_fallback python-defaults-2.7.3/pydist/dist_fallback
--- python-defaults-2.7.3~rc2/pydist/dist_fallback	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pydist/dist_fallback	2012-07-26 18:26:10.000000000 -0400
@@ -2,7 +2,9 @@
 setuptools python-pkg-resources
 wsgiref python (>= 2.5) | python-wsgiref
 argparse python (>= 2.7) | python-argparse
+pil python-imaging
 AddOns python-peak.util
+BatchModify trac-batchmodify
 BitTornado bittornado
 BitTorrent bittorrent
 Bitten trac-bitten-slave
@@ -10,12 +12,12 @@
 BytecodeAssembler python-peak.util
 BzrPipeline bzr-pipeline
 BzrTools bzrtools
+Calendar_and_Contacts_Server calendarserver
 CedarBackup2 cedar-backup2
 CherryPy python-cherrypy3
 CherryTree cherrytree
 ClusterShell clustershell
 Codeville codeville
-Connectome_Viewer connectomeviewer
 ControlAula controlaula
 CoverageTestRunner python-coverage-test-runner
 DITrack ditrack
@@ -36,12 +38,12 @@
 GaussSum gausssum
 GeoIP_Python python-geoip
 GitPython python-git
-Gufw gufw
 HarvestMan harvestman
 ISO8583_Module python-iso8583
 Ibid ibid
 JCC jcc
 Loom bzr-loom
+MAT mat
 Magic_file_extensions python-magic
 Mirage mirage
 Mnemosyne mnemosyne
@@ -75,15 +77,17 @@
 PyWavelets python-pywt
 PyWebDAV python-webdav
 PyYAML python-yaml
+Py_ python-py++
 Pygmy pygmy
 Pyjamas pyjamas-pyjs
 Pymacs pymacs
-Pyste libboost-python1.46-dev
+Pyste libboost-python1.49-dev
 PythonDaap python-daap
 QuantLib_Python quantlib-python
 Quixote python-quixote1
+Ren_Py python-renpy
+Roadmap_Plugin trac-roadmap
 RunSnakeRun runsnakerun
-SSSDConfig python-sss
 ScientificPython python-scientific
 Shinken shinken-core
 Sonata sonata
@@ -106,7 +110,7 @@
 TracHTTPAuth trac-httpauth
 TracMasterTickets trac-mastertickets
 TracMercurial trac-mercurial
-TracPrivateTickets trac-privateticketsplugin
+TracPrivateTickets trac-privatetickets
 TracSpamFilter trac-spamfilter
 TracSubTicketsPlugin trac-subtickets
 TracTags trac-tags
@@ -119,15 +123,20 @@
 Turtle_Art turtleart
 UNKNOWN python-pdfrw
 UnknownHorizons unknown-horizons
+VirtualMailManager vmm
 WikiTableMacro trac-wikitablemacro
 Wikkid wikkid
+WordPress_Library python-wordpresslib
+X_Tile x-tile
 ZODB3 python-zodb
 _tifffile tifffile
 activity_log_manager activity-log-manager
 adns_python python-adns
 agtl agtl
+alembic alembic
 allmydata_tahoe tahoe-lafs
 apache_libcloud python-libcloud
+apparmor apparmor-utils
 apt_clone apt-clone
 apt_p2p apt-p2p
 apt_xapian_index apt-xapian-index
@@ -138,12 +147,13 @@
 archmage archmage
 arcjobtool arcjobtool
 arista arista
-astk code-aster-run
 atheist atheist
 autokey autokey-common
+beautifulsoup4 python-bs4
 bicyclerepair bicyclerepair
 bitbake bitbake
 bley bley
+bookletimposer bookletimposer
 bpython bpython
 buildbot buildbot
 buildbot_slave buildbot-slave
@@ -159,8 +169,6 @@
 bzr_git bzr-git
 bzr_grep bzr-grep
 bzr_gtk bzr-gtk
-bzr_hg bzr-hg
-bzr_pqm bzr-pqm
 bzr_rewrite bzr-rewrite
 bzr_search bzr-search
 bzr_stats bzr-stats
@@ -168,6 +176,7 @@
 bzr_upload bzr-upload
 bzr_xmloutput bzr-xmloutput
 cappuccino cappuccino
+carbon graphite-carbon
 cardstories cardstories
 cfget cfget
 chirp chirp
@@ -176,29 +185,30 @@
 cmdtest cmdtest
 cpuset cpuset
 cvs2svn cvs2svn
-cwm python-swap
 d_feet d-feet
 d_rats d-rats
+datapm datapm
+dblatex dblatex
 dctrl2xml dctrl2xml
 debpartial_mirror debpartial-mirror
 deluge deluge-common
 devscripts devscripts
 dicompyler dicompyler
+dispcalGUI dispcalgui
 dissy dissy
 djagios djagios
 django_ajax_selects django-ajax-selects
 django_filter django-filter
 django_openid_auth python-django-auth-openid
-django_tables django-tables
+django_tables2 django-tables
 django_tastypie python-tastypie
 djextdirect python-django-extdirect
+dkimpy python-dkim
 dot2tex dot2tex
 driconf driconf
 dtrx dtrx
 duplicity duplicity
 dvcs_autosync dvcs-autosync
-earcandy earcandy
-ears ears
 eficas eficas
 elisa python-moovida
 elisa_plugin_amazon moovida-plugins-bad
@@ -243,10 +253,10 @@
 fontypython fontypython
 frescobaldi frescobaldi
 fts fts
+fts_clacks fts-clacks
 fts_fai fts-fai-ldap
 fts_ltsp fts-ltsp-ldap
 fts_opsi fts-opsi
-funkload funkload
 fuse_python python-fuse
 fusil fusil
 fusion_icon fusion-icon
@@ -255,16 +265,19 @@
 gameclock gameclock
 gaphor gaphor
 gastablesgui gastables
+gbp git-buildpackage
 gdevilspie gdevilspie
 gdmodule python-gd
 genbackupdata genbackupdata
 getmail getmail4
 geximon geximon
-git_build_package git-buildpackage
+git_review git-review
 github_cli github-cli
 giws giws
 gjots2 gjots2
+glipper glipper
 globs globs
+glue glue-sprite
 gmobilemedia gmobilemedia
 gnome_activity_journal gnome-activity-journal
 gnome_app_install gnome-codec-install
@@ -286,39 +299,43 @@
 hellanzb hellanzb
 hgnested mercurial-nested
 hgsvn hgsvn
+hitchhhiker hitchhiker
 hotwire hotwire
+httpcode httpcode
+httpie httpie
 hyde hyde
 ibus_tegaki ibus-tegaki
 icalview trac-icalviewplugin
 identicurse identicurse
 imposm.parser python-imposm-parser
-include_server distcc-pump
 iotop iotop
 ipython ipython
 isoquery isoquery
 jack jack
 jsb jsonbot
+juju juju
 kedpm kedpm
+keepnote keepnote
 key_mon key-mon
 keymapper keymapper
 kiki kiki
 lastfmsubmitd lastfmsubmitd
 lazygal lazygal
+legit legit
 libsbml libsbml5-python
 libtpclient_py python-tp-client
 libtpproto_py python-tp-netlib
 lio lio-utils
-live_magic live-magic
 llnl_babel python-sidl
 llnl_babel_sidl_sidlx python-sidl
 loggerhead loggerhead
 londonlaw londonlaw
 lptools lptools
 lshell lshell
-lucene pylucene
 ludev_t ludevit
 lybniz lybniz
 mayavi mayavi2
+mcomix mcomix
 mecab_python python-mecab
 mercurial mercurial-common
 mic mic2
@@ -326,6 +343,7 @@
 mingc python-ming
 mini_dinstall mini-dinstall
 miro miro
+mitmproxy mitmproxy
 mod_python libapache2-mod-python
 moin python-moinmoin
 moosic moosic
@@ -333,10 +351,13 @@
 mpDris mpdris
 museek_python_bindings python-museek
 musiclibrarian musiclibrarian
+mysql_utilities mysql-utilities
+nautilus_pastebin nautilus-pastebin
 neso tryton-neso
 netsnmp_python libsnmp-python
 nfoview nfoview
 nglister nglister
+nml nml
 nsscache nsscache
 nxt_python python-nxt
 obMenu obmenu
@@ -352,11 +373,12 @@
 openstack.common python-openstack-common
 osc osc
 pYsearch python-yahoo
-pdfposter pdfposter
+pbundler pbundler
 pdfshuffler pdfshuffler
 pep8 pep8
 perroquet perroquet
-picard picard
+pgxnclient pgxnclient
+photofilmstrip photofilmstrip
 pithos pithos
 pkpgcounter pkpgcounter
 playitslowly playitslowly
@@ -374,17 +396,16 @@
 puddletag puddletag
 purity_ng purity-ng
 pyExcelerator python-excelerator
+pyFAI pyfai
 pyLibravatar python-libravatar
 pyOpenSSL python-openssl
 pyPortMidi python-pypm
 py_Asterisk python-asterisk
 py_pypcap python-pypcap
 py_rrdtool python-rrdtool
-py_sendfile python-sendfile
 pyacidobasic python-acidobasic
 pyacoustid python-acoustid
 pyalsaaudio python-alsaaudio
-pybackpack pybackpack
 pybloom python-bloomfilter
 pybridge pybridge
 pybtex pybtex
@@ -394,7 +415,6 @@
 pychm python-chm
 pycrypto python-crypto
 pydicom python-dicom
-pydkim python-dkim
 pydns python-dns
 pyenchant python-enchant
 pyepr python-epr
@@ -404,12 +424,13 @@
 pygopherd pygopherd
 pygpgme python-gpgme
 pygpiv python-gpiv
+pygrib python-grib
 pyliblo python-liblo
 pyliblzma python-lzma
 pylibpcap python-libpcap
-pylibssh2 python-libssh2
 pylibtiff python-libtiff
 pylint pylint
+pylogsparser python-logsparser
 pymecavideo python-mecavideo
 pymilter python-milter
 pymol pymol
@@ -420,17 +441,17 @@
 pynids python-nids
 pynifti python-nifti
 pyogg python-ogg
+pyp pyp
 pyparallel python-parallel
 pyppd pyppd
 pyprompter pyprompter
-pyqonsole pyqonsole
 pyremctl python-remctl
 pyrit pyrit
 pyrite_publisher pyrite-publisher
 pysane python-imaging-sane
 pysatellites python-satellites
 pyserial python-serial
-pysnmp python-pysnmp2
+pysnmp python-pysnmp4
 pysnmp_apps python-pysnmp4-apps
 pysnmp_mibs python-pysnmp4-mibs
 pysparse python-sparse
@@ -439,6 +460,7 @@
 pysqlite python-pysqlite1.1
 pystatgrab python-statgrab
 pysubnettree python-subnettree
+pysurfer python-surfer
 pytagsfs pytagsfs
 pytcpwrap python-tcpwrap
 python2_biggles python-pybiggles
@@ -468,12 +490,6 @@
 qpid_python python-qpid
 qpid_qmf python-qpid-extras-qmf
 qpid_tools qpid-tools
-quantum_cisco_plugin quantum-plugin-cisco
-quantum_client quantum-client
-quantum_common quantum-common
-quantum_openvswitch_plugin quantum-plugin-openvswitch
-quantum_sample_plugin quantum-plugin-sample
-quantum_server quantum-server
 quisk quisk
 quodlibet exfalso
 qweborf qweborf
@@ -489,7 +505,6 @@
 relational_pyside relational
 relational_readline relational-cli
 remuco remuco-base
-renpy_module python-renpy
 repoze.what.plugins.sql python-repoze.what-plugins
 repoze.what.plugins.xml python-repoze.what-plugins
 repoze.what_pylons python-repoze.what-plugins
@@ -502,19 +517,28 @@
 roundup roundup
 rpl rpl
 rst2pdf rst2pdf
+rubber rubber
+salt salt-common
 scikit_learn python-sklearn
+scikits_image python-skimage
 screenlets screenlets
 seivot seivot
+sensitivetickets trac-sensitivetickets
+servefile servefile
 sessioninstaller sessioninstaller
 shedskin shedskin
-skeinforge skeinforge
 slapos.core slapos-client
+slimit slimit
 smart python-smartpm
 snimpy snimpy
 spambayes spambayes
 spectacle spectacle
 specto specto
+sphinxcontrib_actdiag python-sphinxcontrib.actdiag
+sphinxcontrib_blockdiag python-sphinxcontrib.blockdiag
 sphinxcontrib_issuetracker python-sphinxcontrib.issuetracker
+sphinxcontrib_nwdiag python-sphinxcontrib.nwdiag
+sphinxcontrib_seqdiag python-sphinxcontrib.seqdiag
 sphinxcontrib_spelling python-sphinxcontrib.spelling
 spyder python-spyderlib
 sqlalchemy_migrate python-migrate
@@ -524,8 +548,7 @@
 supervisor supervisor
 supybot supybot
 svnmailer svnmailer
-synce_kpm synce-kpm
-synce_sync_engine synce-sync-engine
+synaptiks kde-config-touchpad
 tailor tailor
 targetcli targetcli
 tcm lio-utils
@@ -535,11 +558,12 @@
 tegaki_tools python-tegakitools
 tegaki_train tegaki-train
 tgext.crud python-tgext.admin
+tilelite tilelite
 tinyeartrainer tinyeartrainer
 tortoisehg tortoisehg
 transifex_client transifex-client
 translate_toolkit translate-toolkit
-trash trash-cli
+trash_cli trash-cli
 trimage trimage
 tritium tritium
 tryton tryton-client
@@ -600,9 +624,9 @@
 udev_discover udev-discover
 ufw ufw
 unattended_upgrades unattended-upgrades
-undertaker undertaker
 unittest_xml_reporting python-xmlrunner
 urlscan urlscan
+vamos undertaker
 vboxapi virtualbox
 virtaal virtaal
 virtinst virtinst
@@ -610,6 +634,7 @@
 virtualenvwrapper virtualenvwrapper
 wammu wammu
 web.py python-webpy
+weboob python-weboob-core
 whyteboard whyteboard
 wikipediafs wikipediafs
 winpdb winpdb
@@ -619,12 +644,10 @@
 xml_marshaller python-xmlmarshaller
 xmldiff xmldiff
 xmms2tray xmms2tray
-xxdiff_scripts xxdiff-scripts
 yagtd yagtd
 yokadi yokadi
 yum_metadata_parser python-sqlitecachec
 zenmap zenmap
 zeroinstall_injector zeroinstall-injector
-zhone zhone-illume-glue
 zim zim
 zinnia_python python-zinnia
diff -Nru python-defaults-2.7.3~rc2/pydist/generate_fallback_list.py python-defaults-2.7.3/pydist/generate_fallback_list.py
--- python-defaults-2.7.3~rc2/pydist/generate_fallback_list.py	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/pydist/generate_fallback_list.py	2012-07-26 18:26:10.000000000 -0400
@@ -72,4 +72,6 @@
 fp.write('setuptools python-pkg-resources\n')
 fp.write('wsgiref python (>= 2.5) | python-wsgiref\n')
 fp.write('argparse python (>= 2.7) | python-argparse\n')
+# wasn't recognized due to .pth file (egg-info is in PIL/ and not in *-packages/)
+fp.write('pil python-imaging\n')
 fp.writelines(result)
diff -Nru python-defaults-2.7.3~rc2/python2.pm python-defaults-2.7.3/python2.pm
--- python-defaults-2.7.3~rc2/python2.pm	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/python2.pm	2012-07-26 18:26:10.000000000 -0400
@@ -5,7 +5,7 @@
 use strict;
 use Debian::Debhelper::Dh_Lib;
 
-insert_after("dh_perl", "dh_python2");
+insert_before("dh_installinit", "dh_python2");
 remove_command("dh_pycentral");
 remove_command("dh_pysupport");
 
diff -Nru python-defaults-2.7.3~rc2/tests/common.mk python-defaults-2.7.3/tests/common.mk
--- python-defaults-2.7.3~rc2/tests/common.mk	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/common.mk	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,12 @@
+#!/usr/bin/make -f
+
+export DEBPYTHON_DEFAULT ?= $(shell sed -rne 's,^default-version = python(.*),\1,p' ../../debian/debian_defaults)
+export DEBPYTHON_SUPPORTED ?= $(shell sed -rne '/^supported-versions/{s/^supported-versions = (.*)/\1/g;s/python//g;s/,//g;p}' ../../debian/debian_defaults)
+
+all: run check
+
+run: clean
+	dpkg-buildpackage -b -us -uc
+
+clean-common:
+	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/Makefile python-defaults-2.7.3/tests/Makefile
--- python-defaults-2.7.3~rc2/tests/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,7 +1,7 @@
 #!/usr/bin/make -f
 
 # enable or disable tests here:
-TESTS := test1 test2 test3 test4 test5 test6
+TESTS := test1 test2 test3 test4 test5 test6 test7
 
 all: $(TESTS)
 
diff -Nru python-defaults-2.7.3~rc2/tests/t1/debian/pydist-overrides python-defaults-2.7.3/tests/t1/debian/pydist-overrides
--- python-defaults-2.7.3~rc2/tests/t1/debian/pydist-overrides	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/debian/pydist-overrides	2012-07-26 18:26:10.000000000 -0400
@@ -1,5 +1,5 @@
 Mako python-mako (>= 0.2)
 SQLAlchemy python-sqlalchemy (>= 0.6)
-Foo python-foo
+Foo python-foo; PEP386 s/^/2:/
 Bar python-bar
 Baz
diff -Nru python-defaults-2.7.3~rc2/tests/t1/debian/rules python-defaults-2.7.3/tests/t1/debian/rules
--- python-defaults-2.7.3~rc2/tests/t1/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -12,5 +12,5 @@
 	DH_VERBOSE=1 ../../dh_python2\
 		--depends 'SQLAlchemy >= 0.6.1'\
 		--recommends Mako\
-		--suggests 'Foo >= 0.1'\
+		--suggests 'Foo >= 0.1rc2'\
 		--suggests 'bar >= 1.0'
diff -Nru python-defaults-2.7.3~rc2/tests/t1/Makefile python-defaults-2.7.3/tests/t1/Makefile
--- python-defaults-2.7.3~rc2/tests/t1/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t1/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,20 +1,16 @@
 #!/usr/bin/make -f
 
-all: run check
-
-DPY=$(shell PYTHONPATH=../../ python -c 'import debpython.version as v; print(v.vrepr(v.DEFAULT))')
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+DPY=$(DEBPYTHON_DEFAULT)
 
 check:
 	grep -q "Depends: .*python-mako" debian/python-foo/DEBIAN/control
+	grep -q 'python-foo (>= 2:0.1~rc2)' debian/python-foo/DEBIAN/control
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo/__init__.py
 	test ! -f debian/python-foo/usr/lib/python2.6/dist-packages/foo/spam.py
 	grep -q "Depends: .*python (<<" debian/python-foo/DEBIAN/control
 	[ `readlink debian/python-foo/usr/lib/python$(DPY)/dist-packages/foo/absolute_link_to_tmp` = /tmp ]
 	[ `readlink debian/python-foo/usr/lib/python$(DPY)/dist-packages/foo/link_to_parent_dir` = .. ]
 
-clean:
-	./debian/rules clean
+clean: clean-common
 	rm -rf lib/Foo.egg-info
diff -Nru python-defaults-2.7.3~rc2/tests/t2/Makefile python-defaults-2.7.3/tests/t2/Makefile
--- python-defaults-2.7.3~rc2/tests/t2/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t2/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,16 +1,10 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo.py
 	test -f debian/python-foo/usr/lib/python2.6/dist-packages/bar/bar.py
 	grep -q pycompile debian/python-foo/DEBIAN/postinst
 	grep -q pyclean debian/python-foo/DEBIAN/prerm
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t3/debian/rules python-defaults-2.7.3/tests/t3/debian/rules
--- python-defaults-2.7.3~rc2/tests/t3/debian/rules	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t3/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -19,4 +19,12 @@
 		/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1
 	dh_link /usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1 \
 		/usr/lib/python${DPY}/dist-packages/foo/baz.so
+	# ... second style of multiple symlinks
+	cp debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/bar.so \
+	   debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0
+	dh_link /usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0 \
+		/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	dh_link /usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0 \
+		/usr/lib/python${DPY}/dist-packages/foo/quux.so
+	# ... and complex multiple symlinks
 	DH_VERBOSE=1 ../../dh_python2
diff -Nru python-defaults-2.7.3~rc2/tests/t3/Makefile python-defaults-2.7.3/tests/t3/Makefile
--- python-defaults-2.7.3~rc2/tests/t3/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t3/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,11 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-DPY=$(shell PYTHONPATH=../../ python -c 'import debpython.version as v; print(v.vrepr(v.DEFAULT))')
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+DPY=$(DEBPYTHON_DEFAULT)
 
 check:
 	grep -q "pycompile -p python-foo /usr/lib/python-foo -V $(DPY)"\
@@ -17,7 +13,10 @@
 	test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so
 	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1
 	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/baz.so.0.1.2
+	test -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so
+	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	test ! -L debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0
+	test ! -f debian/python-foo/usr/lib/python${DPY}/dist-packages/foo/quux.so.0.0.0
 
-clean:
-	./debian/rules clean
+clean: clean-common
 	rm -rf lib/Foo.egg-info build
diff -Nru python-defaults-2.7.3~rc2/tests/t4/Makefile python-defaults-2.7.3/tests/t4/Makefile
--- python-defaults-2.7.3~rc2/tests/t4/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t4/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	grep -q python2.6 debian/foo/usr/share/foo/foo.py
@@ -14,6 +11,3 @@
 	grep -q python2.4 debian/foo/usr/share/foo/baz.py
 	test ! -x debian/foo/usr/share/foo/baz.py
 	grep -q Depends:.*python2.4 debian/foo/DEBIAN/control && false || true
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t5/Makefile python-defaults-2.7.3/tests/t5/Makefile
--- python-defaults-2.7.3~rc2/tests/t5/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t5/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	# test dh_python2
@@ -29,6 +26,3 @@
 	do [ `ls debian/python-foo/usr/lib/python2.*/*-packages/$$i/__init__.py 2>/dev/null || true | wc -l` = 0 ];\
 	[ `ls debian/python-foo/usr/lib/python2.*/*-packages/$$i/__init__.pyc 2>/dev/null || true | wc -l` = 0 ];\
 	done
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t6/Makefile python-defaults-2.7.3/tests/t6/Makefile
--- python-defaults-2.7.3~rc2/tests/t6/Makefile	2012-06-05 22:58:56.000000000 -0400
+++ python-defaults-2.7.3/tests/t6/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -1,10 +1,7 @@
 #!/usr/bin/make -f
 
-all: run check
-
-
-run: clean
-	dpkg-buildpackage -b -us -uc
+include ../common.mk
+clean: clean-common
 
 check:
 	# python2.4 hardcoded via `dh_python2 -V 2.4`
@@ -19,6 +16,3 @@
 	grep -q Depends:.*python2.6 debian/foo/DEBIAN/control
 	grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate
 	grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst
-
-clean:
-	./debian/rules clean
diff -Nru python-defaults-2.7.3~rc2/tests/t7/bar.py python-defaults-2.7.3/tests/t7/bar.py
--- python-defaults-2.7.3~rc2/tests/t7/bar.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/bar.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/bin/env python
+"env in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/baz.py python-defaults-2.7.3/tests/t7/baz.py
--- python-defaults-2.7.3~rc2/tests/t7/baz.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/baz.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/local/bin/python
+"/usr/local in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/changelog python-defaults-2.7.3/tests/t7/debian/changelog
--- python-defaults-2.7.3~rc2/tests/t7/debian/changelog	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/changelog	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,5 @@
+foo (1.0) unstable; urgency=low
+
+  * Initial release
+
+ -- Piotr Ożarowski <piotr@debian.org>  Sun, 10 Jun 2012 14:09:45 +0200
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/compat python-defaults-2.7.3/tests/t7/debian/compat
--- python-defaults-2.7.3~rc2/tests/t7/debian/compat	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/compat	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+8
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/control python-defaults-2.7.3/tests/t7/debian/control
--- python-defaults-2.7.3~rc2/tests/t7/debian/control	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/control	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,13 @@
+Source: foo
+Section: misc
+Priority: optional
+Maintainer: Piotr Ożarowski <piotr@debian.org>
+Build-Depends: debhelper (>= 7.0.50~)
+Build-Depends-Indep: python
+Standards-Version: 3.9.3
+
+Package: foo
+Architecture: all
+Depends: ${python:Depends}, ${misc:Depends}
+Description: example 7 - shebangs
+ exemple package #7 - shebang related tests
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/copyright python-defaults-2.7.3/tests/t7/debian/copyright
--- python-defaults-2.7.3~rc2/tests/t7/debian/copyright	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/copyright	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+The Debian packaging is © 2012, Piotr Ożarowski <piotr@debian.org> and
+is licensed under the MIT License.
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/install python-defaults-2.7.3/tests/t7/debian/install
--- python-defaults-2.7.3~rc2/tests/t7/debian/install	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/install	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,7 @@
+foo.py /usr/share/foo/
+baz.py /usr/share/foo/
+spam.py /usr/share/foo/
+bar.py /usr/share/bar/
+spam.py /usr/share/bar/
+baz.py /usr/share/baz24/
+spam.py /usr/share/baz24/
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/rules python-defaults-2.7.3/tests/t7/debian/rules
--- python-defaults-2.7.3~rc2/tests/t7/debian/rules	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/rules	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+%:
+	dh $@ --buildsystem=python_distutils
+
+override_dh_pysupport:
+	DH_VERBOSE=1 ../../dh_python2
+	DH_VERBOSE=1 ../../dh_python2 /usr/share/bar
+	DH_VERBOSE=1 ../../dh_python2 /usr/share/baz24 --shebang '/usr/bin/python2.4 -OO'
+
+clean:
+	dh_clean
diff -Nru python-defaults-2.7.3~rc2/tests/t7/debian/source/format python-defaults-2.7.3/tests/t7/debian/source/format
--- python-defaults-2.7.3~rc2/tests/t7/debian/source/format	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/debian/source/format	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+3.0 (native)
diff -Nru python-defaults-2.7.3~rc2/tests/t7/foo.py python-defaults-2.7.3/tests/t7/foo.py
--- python-defaults-2.7.3~rc2/tests/t7/foo.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/foo.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,2 @@
+#!/usr/local/bin/python2.6
+"/usr/local/bin/python2.6 hardcoded in shebang"
diff -Nru python-defaults-2.7.3~rc2/tests/t7/Makefile python-defaults-2.7.3/tests/t7/Makefile
--- python-defaults-2.7.3~rc2/tests/t7/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/Makefile	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+
+include ../common.mk
+clean: clean-common
+
+check:
+	# python2.4 hardcoded via `dh_python2 -shebang ...python2.4`
+	grep -q '\-V 2.4 /usr/share/baz24' debian/foo/usr/share/python/runtime.d/foo.rtupdate
+	grep -q '/usr/share/baz24 \-V 2.4' debian/foo/DEBIAN/postinst
+	grep -q '#! /usr/bin/python2.4 -OO' debian/foo/usr/share/baz24/baz.py
+	# python2.6 hardcoded via shebang
+	grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate
+	grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst
+	# /env removed from shebang 
+	grep -q '#! /usr/bin/python' debian/foo/usr/share/bar/bar.py
+	# /local removed from shebang 
+	grep -q '#! /usr/bin/python' debian/foo/usr/share/foo/baz.py
+	grep -q '#! /usr/bin/python2.6' debian/foo/usr/share/foo/foo.py
diff -Nru python-defaults-2.7.3~rc2/tests/t7/spam.py python-defaults-2.7.3/tests/t7/spam.py
--- python-defaults-2.7.3~rc2/tests/t7/spam.py	1969-12-31 19:00:00.000000000 -0500
+++ python-defaults-2.7.3/tests/t7/spam.py	2012-07-26 18:26:10.000000000 -0400
@@ -0,0 +1 @@
+print('spam')

--- End Message ---
--- Begin Message ---
On Fri, Feb  8, 2013 at 16:31:25 -0500, Scott Kitterman wrote:

> On Friday, February 08, 2013 09:53:49 AM Dmitry Shachnev wrote:
> ...
> > The revert is attached and alternatively available at
> ...
> Thanks.  Uploaded.
> 
And unblocked.

Cheers,
Julien

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply to: