Apply patch to fix SVN-1.6 versioning problem. see #511021
This commit is contained in:
parent
6a010e7129
commit
66503d53df
@ -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/pypi/setuptools
|
||||
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@fedoraproject.org> - 0.6c9-4
|
||||
- Apply SVN-1.6 versioning patch (rhbz #511021)
|
||||
|
||||
* Thu Feb 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.6c9-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||
|
||||
|
217
svn_versioning_4.patch
Normal file
217
svn_versioning_4.patch
Normal file
@ -0,0 +1,217 @@
|
||||
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))),
|
Loading…
Reference in New Issue
Block a user