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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.