Add support for reverse applying a patch with <Patch reverse="[tT]rue">..

This commit is contained in:
Ozan Çağlayan
2010-01-23 13:22:07 +00:00
parent 2eb8943986
commit efb97cc392
6 changed files with 14 additions and 4 deletions
+4
View File
@@ -1,3 +1,7 @@
2010-01-23 Ozan Çağlayan <ozan@pardus.org.tr>
* Add support for optional reverse="[tT]rue" in <Patch> for reverse applying
a patch.
2010-01-22 Gökçen Eraslan <gokcen@pardus.org.tr> 2010-01-22 Gökçen Eraslan <gokcen@pardus.org.tr>
* pisi/actionsapi/perlmodules.py: Do not ignore parameter in make * pisi/actionsapi/perlmodules.py: Do not ignore parameter in make
method (eg. perl Build test). Tests of some perl modules have never run method (eg. perl Build test). Tests of some perl modules have never run
+1
View File
@@ -63,6 +63,7 @@
<!ATTLIST Patch compressionType CDATA #IMPLIED> <!ATTLIST Patch compressionType CDATA #IMPLIED>
<!ATTLIST Patch level CDATA #IMPLIED> <!ATTLIST Patch level CDATA #IMPLIED>
<!ATTLIST Patch target CDATA #IMPLIED> <!ATTLIST Patch target CDATA #IMPLIED>
<!ATTLIST Patch reverse CDATA #IMPLIED>
<!-- Package Section --> <!-- Package Section -->
+3
View File
@@ -1372,6 +1372,9 @@
<optional> <optional>
<attribute name="target"/> <attribute name="target"/>
</optional> </optional>
<optional>
<attribute name="reverse"/>
</optional>
</group> </group>
</define> </define>
+2 -1
View File
@@ -613,6 +613,7 @@ class Builder:
for patch in self.spec.source.patches: for patch in self.spec.source.patches:
patchFile = pisi.util.join_path(files_dir, patch.filename) patchFile = pisi.util.join_path(files_dir, patch.filename)
relativePath = patch.filename relativePath = patch.filename
reverseApply = patch.reverse.lower() == "true"
if patch.compressionType: if patch.compressionType:
patchFile = pisi.util.uncompress(patchFile, patchFile = pisi.util.uncompress(patchFile,
compressType=patch.compressionType, compressType=patch.compressionType,
@@ -620,7 +621,7 @@ class Builder:
relativePath = relativePath.rsplit(".%s" % patch.compressionType, 1)[0] relativePath = relativePath.rsplit(".%s" % patch.compressionType, 1)[0]
ctx.ui.action(_("* Applying patch: %s") % patch.filename) ctx.ui.action(_("* Applying patch: %s") % patch.filename)
pisi.util.do_patch(self.srcDir, patchFile, level=patch.level, name=relativePath) pisi.util.do_patch(self.srcDir, patchFile, level=patch.level, name=relativePath, reverse=reverseApply)
return True return True
def generate_static_package_object(self): def generate_static_package_object(self):
+1
View File
@@ -83,6 +83,7 @@ class Patch:
s_Filename = [autoxml.String, autoxml.mandatory] s_Filename = [autoxml.String, autoxml.mandatory]
a_compressionType = [autoxml.String, autoxml.optional] a_compressionType = [autoxml.String, autoxml.optional]
a_level = [autoxml.Integer, autoxml.optional] a_level = [autoxml.Integer, autoxml.optional]
a_reverse = [autoxml.String, autoxml.optional]
#FIXME: what's the cleanest way to give a default value for reading level? #FIXME: what's the cleanest way to give a default value for reading level?
#def decode_hook(self, node, errs, where): #def decode_hook(self, node, errs, where):
+3 -3
View File
@@ -463,7 +463,7 @@ def uncompress(patchFile, compressType="gz", targetDir=None):
return filePath return filePath
def do_patch(sourceDir, patchFile, level=0, name=None): def do_patch(sourceDir, patchFile, level=0, name=None, reverse=False):
"""Apply given patch to the sourceDir.""" """Apply given patch to the sourceDir."""
cwd = os.getcwd() cwd = os.getcwd()
if os.path.exists(sourceDir): if os.path.exists(sourceDir):
@@ -485,12 +485,12 @@ def do_patch(sourceDir, patchFile, level=0, name=None):
if not os.path.exists(patchesDir): if not os.path.exists(patchesDir):
os.makedirs(patchesDir) os.makedirs(patchesDir)
# Import original patch into quilt tree # Import original patch into quilt tree
(ret, out, err) = run_batch('quilt import -p %d -P %s \"%s\"' % (level, name, patchFile)) (ret, out, err) = run_batch('quilt import %s -p %d -P %s \"%s\"' % (("-R" if reverse else ""), level, name, patchFile))
# run quilt push to apply original patch into tree # run quilt push to apply original patch into tree
(ret, out, err) = run_batch('quilt push') (ret, out, err) = run_batch('quilt push')
else: else:
# run GNU patch to apply original patch into tree # run GNU patch to apply original patch into tree
(ret, out, err) = run_batch("patch --remove-empty-files --no-backup-if-mismatch -p%d < \"%s\"" % (level, patchFile)) (ret, out, err) = run_batch("patch --remove-empty-files --no-backup-if-mismatch %s -p%d < \"%s\"" % (("-R" if reverse else ""), level, patchFile))
if ret: if ret:
if out is None and err is None: if out is None and err is None: