Hi, On Mon, Mar 04, 2024 at 05:14:03PM -0500, Sergio Durigan Junior wrote: > Some Debian packages (namely QEMU, although it has been "fixed" > recently) keep patches using the "unified=0" format, i.e., patches > that were generated without context). For an example of such patch, > see: > > https://salsa.debian.org/qemu-team/qemu/-/blob/4112b90d8217c618aec5050c2059223486150cc0/debian/patches/openbios-spelling-endianess.patch > > git-apply(1) supports the "--unidiff-zero" option, which can handle > these patches. This commit exposes this option to gbp users.
What happens to patches that have context and you add --unidiff-zero? Can you please add a test to 13_test_gbp_pq.py and update the manpages too? Cheers, -- Guido > > Signed-off-by: Sergio Durigan Junior <sergi...@sergiodj.net> > --- > gbp/config.py | 5 +++++ > gbp/git/repository.py | 5 ++++- > gbp/scripts/common/pq.py | 13 ++++++++----- > gbp/scripts/pq.py | 13 +++++++++---- > gbp/scripts/pq_rpm.py | 8 ++++++-- > 5 files changed, 32 insertions(+), 12 deletions(-) > > diff --git a/gbp/config.py b/gbp/config.py > index bad59cde..6fbd7ea2 100644 > --- a/gbp/config.py > +++ b/gbp/config.py > @@ -195,6 +195,7 @@ class GbpOptionParser(OptionParser): > 'time-machine': 1, > 'track': 'True', > 'track-missing': 'False', > + 'unidiff-zero': 'False', > 'upstream-branch': 'upstream', > 'upstream-tag': 'upstream/%(version)s', > 'upstream-tree': 'TAG', > @@ -384,6 +385,10 @@ class GbpOptionParser(OptionParser): > 'bare': > "whether to create a bare repository on the remote side. " > "'Default is '%(bare)s'.", > + 'unidiff-zero': > + "whether to apply patches using git-apply(1)'s '--unidiff-zero' " > + "option, for patches that don't have any context (i.e., were > generated " > + "with '--unified=0'). Default is '%(unidiff-zero)'.", > 'urgency': > "Set urgency level, default is '%(urgency)s'", > 'repo-user': > diff --git a/gbp/git/repository.py b/gbp/git/repository.py > index 972a058f..1c5750c4 100644 > --- a/gbp/git/repository.py > +++ b/gbp/git/repository.py > @@ -1781,7 +1781,8 @@ class GitRepository(object): > output, ret = self._git_getoutput('format-patch', options.args) > return [line.strip() for line in output] > > - def apply_patch(self, patch, index=True, context=None, strip=None, > fix_ws=False): > + def apply_patch(self, patch, index=True, context=None, strip=None, > fix_ws=False, > + unidiff_zero=False): > """Apply a patch using git apply""" > args = [] > if context: > @@ -1792,6 +1793,8 @@ class GitRepository(object): > args.append("--whitespace=fix") > if strip is not None: > args += ['-p', str(strip)] > + if unidiff_zero: > + args += ['--unidiff-zero'] > args.append(patch) > self._git_command("apply", args) > > diff --git a/gbp/scripts/common/pq.py b/gbp/scripts/common/pq.py > index 1a80ec05..2591b875 100644 > --- a/gbp/scripts/common/pq.py > +++ b/gbp/scripts/common/pq.py > @@ -305,13 +305,16 @@ def switch_to_pq_branch(repo, branch): > repo.set_branch(pq_branch) > > > -def apply_single_patch(repo, branch, patch, fallback_author, topic=None): > +def apply_single_patch(repo, branch, patch, fallback_author, topic=None, > + unidiff_zero=False): > switch_to_pq_branch(repo, branch) > - apply_and_commit_patch(repo, patch, fallback_author, topic) > + apply_and_commit_patch(repo, patch, fallback_author, topic, > + unidiff_zero=unidiff_zero) > gbp.log.info("Applied %s" % os.path.basename(patch.path)) > > > -def apply_and_commit_patch(repo, patch, fallback_author, topic=None, > name=None): > +def apply_and_commit_patch(repo, patch, fallback_author, topic=None, > name=None, > + unidiff_zero=False): > """apply a single patch 'patch', add topic 'topic' and commit it""" > author = {'name': patch.author, > 'email': patch.email, > @@ -330,10 +333,10 @@ def apply_and_commit_patch(repo, patch, > fallback_author, topic=None, name=None): > gbp.log.warn("Patch '%s' has no authorship information" % > patch_fn) > > try: > - repo.apply_patch(patch.path, strip=patch.strip) > + repo.apply_patch(patch.path, strip=patch.strip, > unidiff_zero=unidiff_zero) > except GitRepositoryError: > gbp.log.warn("Patch %s failed to apply, retrying with whitespace > fixup" % patch_fn) > - repo.apply_patch(patch.path, strip=patch.strip, fix_ws=True) > + repo.apply_patch(patch.path, strip=patch.strip, > unidiff_zero=unidiff_zero, fix_ws=True) > tree = repo.write_tree() > msg = "%s\n\n%s" % (patch.subject, patch.long_desc) > if topic: > diff --git a/gbp/scripts/pq.py b/gbp/scripts/pq.py > index 78f479ca..d9750f4c 100755 > --- a/gbp/scripts/pq.py > +++ b/gbp/scripts/pq.py > @@ -267,7 +267,7 @@ def safe_patches(series, repo): > > > def import_quilt_patches(repo, branch, series, tries, force, pq_from, > - upstream_tag): > + upstream_tag, unidiff_zero): > """ > apply a series of quilt patches in the series file 'series' to branch > the patch-queue branch for 'branch' > @@ -282,6 +282,7 @@ def import_quilt_patches(repo, branch, series, tries, > force, pq_from, > DEBIAN indicates the current branch, TAG indicates that > the corresponding upstream tag should be used. > @param upstream_tag: upstream tag template to use > + @param unidiff_zero: whether to apply the patch using '--unidiff-zero' > """ > tmpdir = None > series = os.path.join(repo.path, series) > @@ -332,7 +333,8 @@ def import_quilt_patches(repo, branch, series, tries, > force, pq_from, > gbp.log.debug("Applying %s" % patch.path) > try: > name = os.path.basename(patch.path) > - apply_and_commit_patch(repo, patch, maintainer, patch.topic, > name) > + apply_and_commit_patch(repo, patch, maintainer, patch.topic, > name, > + unidiff_zero=unidiff_zero) > except Exception as e: > gbp.log.err("Failed to apply '%s': %s" % (patch.path, e)) > repo.force_head('HEAD', hard=True) > @@ -371,7 +373,8 @@ def import_pq(repo, branch, options): > tries = options.time_machine if (options.time_machine > 0) else 1 > num = import_quilt_patches(repo, branch, series, tries, > options.force, options.pq_from, > - options.upstream_tag) > + options.upstream_tag, > + options.unidiff_zero) > gbp.log.info("%d patches listed in '%s' imported on '%s'" % > (num, series, repo.get_branch())) > > @@ -447,6 +450,7 @@ def build_parser(name): > parser.add_config_file_option(option_name="pq-from", dest="pq_from", > choices=['DEBIAN', 'TAG']) > parser.add_config_file_option(option_name="upstream-tag", > dest="upstream_tag") > parser.add_boolean_config_file_option(option_name="ignore-new", > dest="ignore_new") > + parser.add_boolean_config_file_option(option_name="unidiff-zero", > dest="unidiff_zero") > return parser > > > @@ -504,7 +508,8 @@ def main(argv): > elif action == "apply": > patch = Patch(patchfile) > maintainer = get_maintainer_from_control(repo) > - apply_single_patch(repo, current, patch, maintainer, > options.topic) > + apply_single_patch(repo, current, patch, maintainer, > options.topic, > + options.unidiff_zero) > elif action == "switch": > switch_pq(repo, current, options) > except KeyboardInterrupt: > diff --git a/gbp/scripts/pq_rpm.py b/gbp/scripts/pq_rpm.py > index fcefbb6e..6ff3980d 100755 > --- a/gbp/scripts/pq_rpm.py > +++ b/gbp/scripts/pq_rpm.py > @@ -327,7 +327,8 @@ def import_spec_patches(repo, options): > (base, upstream_commit)) > for patch in queue: > gbp.log.debug("Applying %s" % patch.path) > - apply_and_commit_patch(repo, patch, packager) > + apply_and_commit_patch(repo, patch, packager, > + unidiff_zero=options.unidiff_zero) > except (GbpError, GitRepositoryError) as err: > repo.set_branch(base) > repo.delete_branch(pq_branch) > @@ -406,6 +407,8 @@ def build_parser(name): > parser.add_config_file_option(option_name="spec-file", dest="spec_file") > parser.add_config_file_option(option_name="packaging-dir", > dest="packaging_dir") > + parser.add_boolean_config_file_option(option_name="unidiff-zero", > + dest="unidiff_zero") > return parser > > > @@ -465,7 +468,8 @@ def main(argv): > rebase_pq(repo, options) > elif action == "apply": > patch = Patch(patchfile) > - apply_single_patch(repo, current, patch, fallback_author=None) > + apply_single_patch(repo, current, patch, fallback_author=None, > + unidiff_zero=options.unidiff_zero) > elif action == "switch": > switch_pq(repo, current) > except KeyboardInterrupt: > -- > 2.43.0 > > _______________________________________________ > git-buildpackage mailing list > git-buildpackage@lists.sigxcpu.org > http://lists.sigxcpu.org/mailman/listinfo/git-buildpackage > _______________________________________________ git-buildpackage mailing list git-buildpackage@lists.sigxcpu.org http://lists.sigxcpu.org/mailman/listinfo/git-buildpackage