From: "Karl Hasselström" <kha@treskal.com>
To: Catalin Marinas <catalin.marinas@gmail.com>
Cc: git@vger.kernel.org
Subject: [StGit PATCH 2/4] Teach new infrastructure to apply patches
Date: Tue, 29 Jan 2008 04:15:52 +0100 [thread overview]
Message-ID: <20080129031537.1177.87398.stgit@yoghurt> (raw)
In-Reply-To: <20080129031310.1177.83290.stgit@yoghurt>
Two new methods: one index method that applies a patch to that index
or fails without side-effects (without touching a worktree in either
case); and one repository method that uses a temp index to apply a
patch to a tree and returning the new tree (or None if the application
failed), entirely side-effect free.
Nothing uses this yet, but "stg edit" will soon.
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
stgit/lib/git.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/stgit/lib/git.py b/stgit/lib/git.py
index 8678979..9cb2521 100644
--- a/stgit/lib/git.py
+++ b/stgit/lib/git.py
@@ -338,6 +338,23 @@ class Repository(RunWithEnv):
return None
finally:
index.delete()
+ def apply(self, tree, patch_text):
+ """Given a tree and a patch, will either return the new tree that
+ results when the patch is applied, or None if the patch
+ couldn't be applied."""
+ assert isinstance(tree, Tree)
+ if not patch_text:
+ return tree
+ index = self.temp_index()
+ try:
+ index.read_tree(tree)
+ try:
+ index.apply(patch_text)
+ return index.write_tree()
+ except MergeException:
+ return None
+ finally:
+ index.delete()
class MergeException(exception.StgException):
pass
@@ -374,6 +391,13 @@ class Index(RunWithEnv):
"""In-index merge, no worktree involved."""
self.run(['git', 'read-tree', '-m', '-i', '--aggressive',
base.sha1, ours.sha1, theirs.sha1]).no_output()
+ def apply(self, patch_text):
+ """In-index patch application, no worktree involved."""
+ try:
+ self.run(['git', 'apply', '--cached']
+ ).raw_input(patch_text).no_output()
+ except run.RunException:
+ raise MergeException('Patch does not apply cleanly')
def delete(self):
if os.path.isfile(self.__filename):
os.remove(self.__filename)
next prev parent reply other threads:[~2008-01-29 3:16 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-29 2:58 kha/safe and kha/experimental updated Karl Hasselström
2008-01-29 3:02 ` [StGit PATCH 0/5] Various cleanups Karl Hasselström
2008-01-29 3:02 ` [StGit PATCH 1/5] Create index and worktree objects just once Karl Hasselström
2008-01-29 3:03 ` [StGit PATCH 2/5] Wrap excessively long line Karl Hasselström
2008-01-29 3:03 ` [StGit PATCH 3/5] Eliminate temp variable that's used just once Karl Hasselström
2008-01-29 3:04 ` [StGit PATCH 4/5] Simplify editor selection logic Karl Hasselström
2008-01-29 20:09 ` Peter Oberndorfer
2008-01-30 7:28 ` Karl Hasselström
2008-01-30 14:55 ` Jay Soffian
2008-01-30 17:57 ` Karl Hasselström
2008-01-29 3:06 ` [StGit PATCH 5/5] Let the caller supply the diff text to diffstat() Karl Hasselström
2008-01-29 3:10 ` [StGit PATCH 0/2] "stg clean" test+bugfix Karl Hasselström
2008-01-29 3:11 ` [StGit PATCH 1/2] Add test to ensure that "stg clean" preserves conflicting patches Karl Hasselström
2008-01-29 3:12 ` [StGit PATCH 2/2] Don't clean away patches with conflicts Karl Hasselström
2008-01-29 3:15 ` [StGit PATCH 0/4] Rewrite "stg edit" to use new infrastructure Karl Hasselström
2008-01-29 3:15 ` [StGit PATCH 1/4] Teach new infrastructure about the default author and committer Karl Hasselström
2008-01-29 3:15 ` Karl Hasselström [this message]
2008-01-29 3:16 ` [StGit PATCH 3/4] Teach new infrastructure to diff two trees Karl Hasselström
2008-01-29 14:40 ` David Kågedal
2008-01-29 15:57 ` Karl Hasselström
2008-01-29 3:17 ` [StGit PATCH 4/4] Convert "stg edit" to the new infrastructure Karl Hasselström
2008-02-01 7:49 ` [StGit PATCH 0/3] "stg edit" fixups Karl Hasselström
2008-02-01 7:50 ` [StGit PATCH 1/3] Parse the date instead of treating it as an opaque string Karl Hasselström
2008-02-01 7:50 ` [StGit PATCH 2/3] Convert "stg edit" to the new infrastructure Karl Hasselström
2008-02-01 7:50 ` [StGit PATCH 3/3] It's possible to edit unapplied patches now Karl Hasselström
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080129031537.1177.87398.stgit@yoghurt \
--to=kha@treskal.com \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).