rpms/python-setuptools/devel svn_versioning_4.patch, NONE, 1.1 python-setuptools.spec, 1.19, 1.20

Konstantin Ryabitsev icon at fedoraproject.org
Tue Jul 14 14:21:23 UTC 2009


Author: icon

Update of /cvs/extras/rpms/python-setuptools/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv12881/devel

Modified Files:
	python-setuptools.spec 
Added Files:
	svn_versioning_4.patch 
Log Message:
Apply patch to fix SVN-1.6 versioning problem.
see #511021


svn_versioning_4.patch:

--- NEW FILE svn_versioning_4.patch ---
Index: setuptools/svn_util.py
===================================================================
--- setuptools/svn_util.py	(revision 0)
+++ setuptools/svn_util.py	(revision 0)
@@ -0,0 +1,109 @@
+import os
+import re
+
+def get_entries_files(base, recurse=True):
+    for base,dirs,files in os.walk(os.curdir):
+        if '.svn' not in dirs:
+            dirs[:] = []
+            continue    # no sense walking uncontrolled subdirs
+        dirs.remove('.svn')
+        f = open(os.path.join(base,'.svn','entries'))
+        yield f.read()
+        f.close()
+
+class SVNEntries(object):
+    def __init__(self, data):
+        self.data = data
+
+    @classmethod
+    def load(class_, base):
+        filename = os.path.join(base, '.svn', 'entries')
+        f = open(filename)
+        result = SVNEntries.read(f)
+        f.close()
+        return result
+
+    @classmethod
+    def read(class_, file):
+        data = file.read()
+        is_xml = data.startswith('<?xml')
+        class_ = [SVNEntriesText, SVNEntriesXML][is_xml]
+        return class_(data)
+
+    def parse_revision(self):
+        all_revs = self.parse_revision_numbers() + [0]
+        return max(all_revs)
+
+class SVNEntriesText(SVNEntries):
+    known_svn_versions = {
+        '1.4.x': 8,
+        '1.5.x': 9,
+        '1.6.x': 10,
+        }
+
+    def __get_cached_sections(self):
+        return self.sections
+        
+    def get_sections(self):
+        SECTION_DIVIDER = '\f\n'
+        sections = self.data.split(SECTION_DIVIDER)
+        sections = map(str.splitlines, sections)
+        try:
+            # remove the SVN version number from the first line
+            svn_version = int(sections[0].pop(0))
+            if not svn_version in self.known_svn_versions.values():
+                log.warn("Unknown subversion verson %d", svn_version)
+        except ValueError:
+            return
+        self.sections = sections
+        self.get_sections = self.__get_cached_sections
+        return self.sections
+
+    def is_valid(self):
+        return bool(self.get_sections())
+    
+    def get_url(self):
+        return self.get_sections()[0][4]
+
+    def parse_revision_numbers(self):
+        revision_line_number = 9
+        rev_numbers = [
+            int(section[revision_line_number])
+            for section in self.get_sections()
+            if len(section)>revision_line_number
+                and section[revision_line_number]
+            ]
+        return rev_numbers
+    
+    def get_undeleted_records(self):
+        undeleted = lambda s: s and s[0] and (len(s) < 6 or s[5] != 'delete')
+        result = [
+            section[0]
+            for section in self.get_sections()
+            if undeleted(section)
+            ]
+        return result
+
+class SVNEntriesXML(SVNEntries):
+    def is_valid(self):
+        return True
+
+    def get_url(self):
+        "Get repository URL"
+        urlre = re.compile('url="([^"]+)"')
+        return urlre.search(self.data).group(1)
+
+    def parse_revision_numbers(self):
+        revre = re.compile('committed-rev="(\d+)"')
+        return [
+            int(m.group(1))
+            for m in revre.finditer(self.data)
+            ]
+    
+    def get_undeleted_records(self):
+        entries_pattern = re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I)
+        results = [
+            unescape(match.group(1))
+            for match in entries_pattern.finditer(self.data)
+            ]
+        return results

Property changes on: setuptools/svn_util.py
___________________________________________________________________
Name: svn:keywords
   + Id Rev Author Date
Name: svn:eol-style
   + native

Index: setuptools/command/egg_info.py
===================================================================
--- setuptools/command/egg_info.py	(revision 72970)
+++ setuptools/command/egg_info.py	(working copy)
@@ -8,6 +8,7 @@
 from distutils.errors import *
 from distutils import log
 from setuptools.command.sdist import sdist
+from setuptools import svn_util
 from distutils.util import convert_path
 from distutils.filelist import FileList
 from pkg_resources import parse_requirements, safe_name, parse_version, \
@@ -205,30 +206,20 @@
 
     def get_svn_revision(self):
         revision = 0
-        urlre = re.compile('url="([^"]+)"')
-        revre = re.compile('committed-rev="(\d+)"')
 
         for base,dirs,files in os.walk(os.curdir):
             if '.svn' not in dirs:
                 dirs[:] = []
                 continue    # no sense walking uncontrolled subdirs
             dirs.remove('.svn')
-            f = open(os.path.join(base,'.svn','entries'))
-            data = f.read()
-            f.close()
-
-            if data.startswith('9') or data.startswith('8'):
-                data = map(str.splitlines,data.split('\n\x0c\n'))
-                del data[0][0]  # get rid of the '8' or '9'
-                dirurl = data[0][3]
-                localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]+[0])
-            elif data.startswith('<?xml'):
-                dirurl = urlre.search(data).group(1)    # get repository URL
-                localrev = max([int(m.group(1)) for m in revre.finditer(data)]+[0])
-            else:
+            
+            entries = svn_util.SVNEntries.load(base)
+            if not entries.is_valid():
                 log.warn("unrecognized .svn/entries format; skipping %s", base)
                 dirs[:] = []
                 continue
+            localrev = entries.parse_revision()
+            dirurl = entries.get_url()
             if base==os.curdir:
                 base_url = dirurl+'/'   # save the root url
             elif not dirurl.startswith(base_url):
@@ -243,7 +234,6 @@
 
 
 
-
     def find_sources(self):
         """Generate SOURCES.txt manifest file"""
         manifest_filename = os.path.join(self.egg_info,"SOURCES.txt")
Index: setuptools/command/sdist.py
===================================================================
--- setuptools/command/sdist.py	(revision 72970)
+++ setuptools/command/sdist.py	(working copy)
@@ -2,6 +2,7 @@
 from distutils.util import convert_path
 from distutils import log
 import os, re, sys, pkg_resources
+from setuptools.svn_util import SVNEntries
 
 entities = [
     ("<","<"), (">", ">"), (""", '"'), ("'", "'"),
@@ -80,24 +81,11 @@
             yield joinpath(dirname, parts[0])
 
 
-entries_pattern = re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I)
 
 def entries_finder(dirname, filename):
-    f = open(filename,'rU')
-    data = f.read()
-    f.close()
-    if data.startswith('9') or data.startswith('8'):    # subversion 1.5/1.4
-        for record in map(str.splitlines, data.split('\n\x0c\n')[1:]):
-            if not record or len(record)>=6 and record[5]=="delete":
-                continue    # skip deleted
-            yield joinpath(dirname, record[0])
-    elif data.startswith('<?xml'):
-        for match in entries_pattern.finditer(data):
-            yield joinpath(dirname,unescape(match.group(1)))
-    else:
-        log.warn("unrecognized .svn/entries format in %s", dirname)
+    for record in SVNEntries.load(dirname).get_undeleted_records():
+        yield joinpath(dirname, record)
 
-
 finders = [
     (convert_path('CVS/Entries'),
         re_finder(re.compile(r"^\w?/([^/]+)/", re.M))),


Index: python-setuptools.spec
===================================================================
RCS file: /cvs/extras/rpms/python-setuptools/devel/python-setuptools.spec,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -p -r1.19 -r1.20
--- python-setuptools.spec	26 Feb 2009 23:24:56 -0000	1.19
+++ python-setuptools.spec	14 Jul 2009 14:20:53 -0000	1.20
@@ -2,7 +2,7 @@
 
 Name:           python-setuptools
 Version:        0.6c9
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        Easily build and distribute Python packages
 
 Group:          Applications/System
@@ -11,6 +11,7 @@ URL:            http://pypi.python.org/p
 Source0:        http://pypi.python.org/packages/source/s/setuptools/setuptools-%{version}.tar.gz
 Source1:        psfl.txt
 Source2:        zpl.txt
+Patch0:         http://bugs.python.org/setuptools/file55/svn_versioning_4.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildArch:      noarch
@@ -41,6 +42,7 @@ requiring setuptools.
 
 %prep
 %setup -q -n setuptools-%{version}
+%patch0 -p0 -b .svn16
 find -name '*.txt' | xargs chmod -x
 find -name '*.py' | xargs sed -i '1s|^#!python|#!%{__python}|'
 
@@ -84,6 +86,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Tue Jul 14 2009 Konstantin Ryabitsev <icon at fedoraproject.org> - 0.6c9-4
+- Apply SVN-1.6 versioning patch (rhbz #511021)
+
 * Thu Feb 26 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.6c9-3
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
 




More information about the fedora-extras-commits mailing list