summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--000.yarn18
-rw-r--r--lib.py56
-rw-r--r--yarnhelper.py43
3 files changed, 64 insertions, 53 deletions
diff --git a/000.yarn b/000.yarn
index 1657eca..adf3780 100644
--- a/000.yarn
+++ b/000.yarn
@@ -276,7 +276,7 @@ WHEN admin creates user
None,
'user add {} {}@example.com Test {}'.format(
username, username, username))
- pubkey = helper.ssh_keygen(username)
+ pubkey = ssh_keygen(username)
gitano(None,
'as {} sshkey add default'.format(username), stdin=pubkey)
@@ -314,14 +314,14 @@ WHEN admin created repository
user = 'admin'
url = helper.repo_ssh_url(repo)
dirname = helper.local_checkout_dirname(user, repo)
- helper.git_as_checked(None, ['clone', url, dirname])
+ git_as_checked(None, ['clone', url, dirname])
cliapp.runcmd(['git', 'config', 'user.email', user], cwd=dirname)
cliapp.runcmd(['git', 'config', 'user.name', user], cwd=dirname)
with open(os.path.join(dirname, 'foo.txt'), 'a') as f:
f.write('')
cliapp.runcmd(['git', 'add', 'foo.txt'], cwd=dirname)
cliapp.runcmd(['git', 'commit', '-mfoo'], cwd=dirname)
- helper.git_as_checked(None, ['push', '--all'], cwd=dirname)
+ git_as_checked(None, ['push', '--all'], cwd=dirname)
WHEN admin sets repository config
-----------------------------------------------------------------------------
@@ -340,7 +340,7 @@ THEN a user can clone a repository
repo = get_next_match()
url = helper.repo_ssh_url(repo)
dirname = helper.local_checkout_dirname(user, repo)
- helper.git_as_checked(user, ['clone', url, dirname])
+ git_as_checked(user, ['clone', url, dirname])
cliapp.runcmd(['git', 'config', 'user.email', user], cwd=dirname)
cliapp.runcmd(['git', 'config', 'user.name', user], cwd=dirname)
@@ -352,7 +352,7 @@ THEN a user can't clone a repository
repo = get_next_match()
url = helper.repo_ssh_url(repo)
dirname = helper.local_checkout_dirname(user, repo)
- exit, out, err = helper.git_as(user, ['clone', url, dirname])
+ exit, out, err = git_as(user, ['clone', url, dirname])
helper.assertNotEqual(exit, 0)
THEN a repository can be cloned over the git protocol
@@ -396,7 +396,7 @@ THEN a user can push all local branches
repo = get_next_match()
url = helper.repo_ssh_url(repo)
dirname = helper.local_checkout_dirname(user, repo)
- helper.git_as_checked(user, ['push', '--all', 'origin'], cwd=dirname)
+ git_as_checked(user, ['push', '--all', 'origin'], cwd=dirname)
THEN a user can push all local tags
-----------------------------------------------------------------------------
@@ -406,7 +406,7 @@ THEN a user can push all local tags
repo = get_next_match()
url = helper.repo_ssh_url(repo)
dirname = helper.local_checkout_dirname(user, repo)
- helper.git_as_checked(user, ['push', '--tags', 'origin'], cwd=dirname)
+ git_as_checked(user, ['push', '--tags', 'origin'], cwd=dirname)
THEN a user can't push local branches
-----------------------------------------------------------------------------
@@ -415,7 +415,7 @@ THEN a user can't push local branches
user = get_next_match()
repo = get_next_match()
dirname = helper.local_checkout_dirname(user, repo)
- exit, out, err = helper.git_as(
+ exit, out, err = git_as(
user,
['push', '--all', 'origin'], cwd=dirname)
sys.stdout.write(out)
@@ -429,7 +429,7 @@ THEN a user can't push local tags
user = get_next_match()
repo = get_next_match()
dirname = helper.local_checkout_dirname(user, repo)
- exit, out, err = helper.git_as(
+ exit, out, err = git_as(
user,
['push', '--tags', 'origin'], cwd=dirname)
helper.assertNotEqual(exit, 0)
diff --git a/lib.py b/lib.py
index 4982e32..611e8a1 100644
--- a/lib.py
+++ b/lib.py
@@ -1,4 +1,5 @@
import os
+import subprocess
import sys
import cliapp
@@ -15,6 +16,59 @@ 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 = {
@@ -22,7 +76,7 @@ def gitano(user, args, stdin=None):
'ssh_options': [
'-oPasswordAuthentication=no',
'-oIdentitiesOnly=yes',
- '-i', self.get_user_ssh_key(user),
+ '-i', get_user_ssh_key(user),
],
}
if stdin is not None:
diff --git a/yarnhelper.py b/yarnhelper.py
index fa67a3c..e265d82 100644
--- a/yarnhelper.py
+++ b/yarnhelper.py
@@ -136,55 +136,12 @@ class YarnHelper(object):
m.close()
m.logout()
- def ssh_keygen(self, user): # pragma: no cover
- filename = self.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 ssh_key_file_for_user(self, user): # pragma: no cover
- return os.path.abspath('{}.key'.format(user))
-
def repo_ssh_url(self, repo): # pragma: no cover
return 'ssh://git@{}/{}'.format(os.environ['GITANO_SERVER'], repo)
def local_checkout_dirname(self, user, repo): # pragma: no cover
return '{}_{}'.format(user, repo)
- def git_as(self, user, args, **kwargs): # pragma: no cover
- server = os.environ['GITANO_SERVER']
- env = dict(os.environ)
- env['GIT_SSH_COMMAND'] = self.env_ssh_command(user)
- return cliapp.runcmd_unchecked(
- ['git'] + args,
- stderr=subprocess.STDOUT,
- env=env,
- **kwargs)
-
- def git_as_checked(self, user, args, **kwargs): # pragma: no cover
- exit, out, err = self.git_as(user, args, **kwargs)
- sys.stdout.write('STDOUT from git:\n{}'.format(out))
- sys.stderr.write('STDERR from git:\n{}'.format(err))
- self.assertEqual(exit, 0)
-
- def env_ssh_command(self, user): # pragma: no cover
- argv = [
- 'ssh',
- '-o', 'PasswordAuthentication=no',
- '-o', 'IdentitiesOnly=yes',
- '-i', self.get_user_ssh_key(user),
- ]
- return ' '.join(argv)
-
- def get_admin_ssh_key(self): # pragma: no cover
- return os.environ['ADMIN_SSH_KEY']
-
- def get_user_ssh_key(self, user): # pragma: no cover
- if user is None:
- return self.get_admin_ssh_key()
- else:
- return self.ssh_key_file_for_user(user)
-
class Error(Exception):