1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
import os
import subprocess
import sys
import cliapp
from yarnutils import *
srcdir = os.environ['SRCDIR']
datadir = os.environ['DATADIR']
vars = Variables(datadir)
def ssh_key_file_for_user(user):
return os.path.abspath('{}.key'.format(user))
def get_admin_ssh_key():
return os.environ['ADMIN_SSH_KEY']
def get_user_ssh_key(user):
if user is None:
return get_admin_ssh_key()
else:
return ssh_key_file_for_user(user)
def ssh_keygen(user):
filename = ssh_key_file_for_user(user)
cliapp.runcmd(['ssh-keygen', '-f', filename, '-N', '', '-C', user])
with open(filename + '.pub') as f:
return f.read()
def env_ssh_command(user):
argv = [
'ssh',
'-o', 'PasswordAuthentication=no',
'-o', 'IdentitiesOnly=yes',
'-i', get_user_ssh_key(user),
]
return ' '.join(argv)
def git_as(user, args, **kwargs):
server = os.environ['GITANO_SERVER']
env = dict(os.environ)
env['GIT_SSH_COMMAND'] = env_ssh_command(user)
return cliapp.runcmd_unchecked(
['git'] + args,
stderr=subprocess.STDOUT,
env=env,
**kwargs)
def git_as_checked(user, args, **kwargs):
exit, out, err = git_as(user, args, **kwargs)
sys.stdout.write('STDOUT from git:\n{}'.format(out))
sys.stderr.write('STDERR from git:\n{}'.format(err))
assertEqual(exit, 0)
def gitano(user, args, stdin=None):
server = os.environ['GITANO_SERVER']
kwargs = {
'stderr': subprocess.STDOUT,
'ssh_options': [
'-oPasswordAuthentication=no',
'-oIdentitiesOnly=yes',
'-i', get_user_ssh_key(user),
],
}
if stdin is not None:
kwargs['feed_stdin'] = stdin
return cliapp.ssh_runcmd(
'git@{}'.format(server),
args.split(),
**kwargs)
def gitano_confirm_with_token(prefix, which):
try:
output = gitano(None, '{} {}'.format(prefix, which))
except cliapp.AppException:
pass
else:
last_line = output.splitlines()[-1]
token = last_line.split()[-1]
gitano(None, '{} {} {}'.format(prefix, which, token))
def repo_ssh_url(repo):
return 'ssh://git@{}/{}'.format(os.environ['GITANO_SERVER'], repo)
def local_checkout_dirname(user, repo):
return '{}_{}'.format(user, repo)
|