diff options
author | Peter Kjellerstedt <peter.kjellerstedt@axis.com> | 2016-01-27 15:39:52 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-01-29 18:14:54 +0000 |
commit | a88d603b51a9ebb39210d54b667519acfbe465c3 (patch) | |
tree | d2c255cfa18409e5f7458836b3a5a56fc610fd55 /meta/lib | |
parent | 3e98ba4d6c1d1e4919ce373ec031d41c2538f10b (diff) | |
download | openembedded-core-a88d603b51a9ebb39210d54b667519acfbe465c3.tar.gz openembedded-core-a88d603b51a9ebb39210d54b667519acfbe465c3.tar.bz2 openembedded-core-a88d603b51a9ebb39210d54b667519acfbe465c3.zip |
lib/oe/patch: Make GitApplyTree._applypatch() support read-only .git/hooks
Rather than modifying files in .git/hooks, which can be read-only
(e.g., if it is a link to a directory in /usr/share), move away the
entire .git/hooks directory temporarily.
Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/patch.py | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/meta/lib/oe/patch.py b/meta/lib/oe/patch.py index 2255ce437b..4e77168dab 100644 --- a/meta/lib/oe/patch.py +++ b/meta/lib/oe/patch.py @@ -411,14 +411,15 @@ class GitApplyTree(PatchTree): reporoot = (runcmd("git rev-parse --show-toplevel".split(), self.dir) or '').strip() if not reporoot: raise Exception("Cannot get repository root for directory %s" % self.dir) - commithook = os.path.join(reporoot, '.git', 'hooks', 'commit-msg') - commithook_backup = commithook + '.devtool-orig' - applyhook = os.path.join(reporoot, '.git', 'hooks', 'applypatch-msg') - applyhook_backup = applyhook + '.devtool-orig' - if os.path.exists(commithook): - shutil.move(commithook, commithook_backup) - if os.path.exists(applyhook): - shutil.move(applyhook, applyhook_backup) + hooks_dir = os.path.join(reporoot, '.git', 'hooks') + hooks_dir_backup = hooks_dir + '.devtool-orig' + if os.path.lexists(hooks_dir_backup): + raise Exception("Git hooks backup directory already exists: %s" % hooks_dir_backup) + if os.path.lexists(hooks_dir): + shutil.move(hooks_dir, hooks_dir_backup) + os.mkdir(hooks_dir) + commithook = os.path.join(hooks_dir, 'commit-msg') + applyhook = os.path.join(hooks_dir, 'applypatch-msg') with open(commithook, 'w') as f: # NOTE: the formatting here is significant; if you change it you'll also need to # change other places which read it back @@ -467,12 +468,9 @@ class GitApplyTree(PatchTree): os.remove(tmpfile) return output finally: - os.remove(commithook) - os.remove(applyhook) - if os.path.exists(commithook_backup): - shutil.move(commithook_backup, commithook) - if os.path.exists(applyhook_backup): - shutil.move(applyhook_backup, applyhook) + shutil.rmtree(hooks_dir) + if os.path.lexists(hooks_dir_backup): + shutil.move(hooks_dir_backup, hooks_dir) class QuiltTree(PatchSet): |