diff options
author | Ralf Jung <post@ralfj.de> | 2015-02-22 21:11:19 +0100 |
---|---|---|
committer | Ralf Jung <post@ralfj.de> | 2015-02-22 21:11:19 +0100 |
commit | 6843793205d96449af070b5c7b776eaf205f5ad7 (patch) | |
tree | 4baff32bf3fd4258e911f8a478a8607fb25a2681 /git_mirror.py | |
parent | 3316a2663f627d47f62310a754a1b03a739b6e07 (diff) |
add support for setting the SSH identity per-repo
Diffstat (limited to 'git_mirror.py')
-rw-r--r-- | git_mirror.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/git_mirror.py b/git_mirror.py index 636672f..af963df 100644 --- a/git_mirror.py +++ b/git_mirror.py @@ -21,7 +21,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================== -import sys, os, subprocess +import sys, os, os.path, subprocess import configparser, itertools, json, re import email.mime.text, email.utils, smtplib @@ -91,6 +91,7 @@ class Repo: self.name = name self.local = conf['local'] self.owner = conf['owner'] # email address to notify in case of problems + self.deploy_key = conf['deploy-key'] # the SSH ky used for authenticating against remote hosts self.mirrors = {} # maps mirrors to their URLs mirror_prefix = 'mirror-' for name in filter(lambda s: s.startswith(mirror_prefix), conf.keys()): @@ -107,10 +108,18 @@ class Repo: return mirror return None + def setup_env(self): + '''Setup the environment to work with this repository''' + os.chdir(self.local) + ssh_set_ident = os.path.join(os.path.dirname(__file__), 'ssh-set-ident.conf') + os.setenv('GIT_SSH', ssh_set_ident) + ssh_ident = os.path.join(os.path.expanduser('~/.ssh'), self.deploy_key) + os.setenv('SSH_IDENT', ssh_ident) + def update_mirrors(self, ref, oldsha, newsha, except_mirrors = [], suppress_stderr = False): '''Update the <ref> from <oldsha> to <newsha> on all mirrors. The update must already have happened locally.''' assert len(oldsha) == 40 and len(newsha) == 40, "These are not valid SHAs." - os.chdir(self.local) + self.setup_env() # check for a forced update is_forced = newsha != git_nullsha and oldsha != git_nullsha and git_is_forced_update(oldsha, newsha) # tell all the mirrors @@ -127,7 +136,7 @@ class Repo: def update_ref_from_mirror(self, ref, oldsha, newsha, mirror, suppress_stderr = False): '''Update the local version of this <ref> to what's currently on the given <mirror>. <oldsha> and <newsha> are checked. Then update all the other mirrors.''' - os.chdir(self.local) + self.setup_env() url = self.mirrors[mirror] # first check whether the remote really is at newsha remote_state, code = git.ls_remote(url, ref) |