コード例 #1
0
ファイル: test_site.py プロジェクト: wrightrocket/gerritssh
def test_init():
    s = gerritssh.Site('gerrit.example.com')
    assert s, 'Failed to create a Site object'
    assert s.site == 'gerrit.example.com', \
    'Did not record the site name properly'
    assert repr(s) == ("<gerritssh.gerritsite.Site(args=('gerrit.example.com',"
                       " None, None, None), connected=False)>")

    with pytest.raises(TypeError):
        _ = gerritssh.Site(1)
コード例 #2
0
ファイル: test_site.py プロジェクト: wrightrocket/gerritssh
def test_failed_connection3():
    '''
    Use a clearly invalid site name to ensure the connection
    attempt fails
    '''
    s = gerritssh.Site('...')
    with pytest.raises(gerritssh.SSHConnectionError):
        s.connect()
コード例 #3
0
ファイル: test_online.py プロジェクト: wrightrocket/gerritssh
def live_instance(request):
    s = gssh.Site(online_instance())

    def fin():
        print('Closing connection to ' + online_instance())
        s.disconnect()

    print('Site created: ' + repr(s))
    request.addfinalizer(fin)
    s.connect()
    assert s.connected
    return s
コード例 #4
0
ファイル: test_site.py プロジェクト: wrightrocket/gerritssh
def test_version_compare(connected_site):
    with pytest.raises(gerritssh.SSHConnectionError):
        gerritssh.Site('...').version_in('>=2.10')

    s = connected_site
    ev = s.version_in
    v = s.version  # unused but useful if test fails
    assert ev('==2.9.0')
    assert ev('>=2')
    assert ev('==2.9')
    assert not ev('==1.1')
    assert ev('>=1.9,<=3.1')
コード例 #5
0
ファイル: test_site.py プロジェクト: wrightrocket/gerritssh
def test_extract_version():
    s = gerritssh.Site('...')
    ev = s._Site__extract_version
    assert ev('gerrit version 1') == '0.0.0'
    assert ev('gerrit version 1.2') == '0.0.0'
    assert ev('gerrit version 1.2.3') == '1.2.3'
    assert ev('gerrit version 1-2ab') == '0.0.0'
    assert ev('gerrit version 1ab') == '0.0.0'
    assert ev('gerrit version abc') == '0.0.0'
    assert ev('g') == '0.0.0'
    assert ev('gerrit  1.2.3') == '0.0.0'
    assert ev('gerrit version 1 2 3') == '0.0.0'
    assert ev('gerrit version 1 abc 2') == '0.0.0'
    assert ev('gerrit version 1.2.3abcd') == '1.2.3'
    assert ev('gerrit version 2.4.4-14-gab7f4c1') == '2.4.4'
コード例 #6
0
ファイル: conftest.py プロジェクト: wrightrocket/gerritssh
def connected_site():
    '''
    This fixture provides a Site object, monkeypatched so that any attempt to
    execute a command acts as if a 'gerrit version' command had been executed.

    In essence it provides a properly constructed Site object which will report
    a version of 2.9.0 and a site of 'gerrit.example.com.

    '''
    class DummySSHClient(object):
        def __init__(self, *args, **kwargs):
            self.connected = False

        def execute(self, command):
            import io
            import sys
            self.connected = True
            vstr = 'gerrit version 2.9.0\n'
            if sys.version_info[0] < 3:
                vstr = unicode(vstr)

            result = SSHCommandResult(command, io.StringIO(),
                                      io.StringIO(vstr), io.StringIO())

            return result

        def disconnect(self):
            self.connected = False

    s = gerritssh.Site('gerrit.example.com')
    s._Site__ssh = DummySSHClient()
    assert not s.connected, 'Thinks its connected after construction'
    s.connect()
    assert s.connected
    assert s.version == SV.Version('2.9.0')
    return s
コード例 #7
0
def connect_to_site(site):
    ''' Connect to the specified site '''
    return gssh.Site(site).connect()
コード例 #8
0
def main():
    global LF
    parser = optparse.OptionParser(usage="usage: %prog [options]",
                                   version="%prog 1.0")
    parser.add_option("-o",
                      "--owner",
                      dest="owner",
                      action='store',
                      help="gerrit pwner [default: %default]",
                      metavar="OWNER",
                      default=OWNER)
    parser.add_option("-s",
                      "--server",
                      dest="server",
                      action='store',
                      help="gerrit server [default: %default]",
                      metavar="SERVER",
                      default=GERRIT_HOST)
    parser.add_option("-p",
                      "--port",
                      dest="port",
                      action='store',
                      type="int",
                      help="gerrit port [default: %default]",
                      metavar="PORT",
                      default=GERRIT_PORT)
    parser.add_option("--start-time",
                      dest="start_time",
                      action='store',
                      type="string",
                      help="start time for querrying in "
                      "gerrit, in format: YYYY-MM-DD",
                      metavar="STARTTIME",
                      default=START_TIME)
    parser.add_option("-k",
                      "--keyfile",
                      dest="keyfile",
                      action='store',
                      help="gerrit ssh keyfile [default: use local keyfile]",
                      metavar="FILE",
                      default=None)
    parser.add_option("-P",
                      "--passphrase",
                      dest="passphrase",
                      action='store',
                      help="passphrase in case of enrypting keyfile",
                      metavar="PASS",
                      default=None)
    parser.add_option("-u",
                      "--user",
                      dest="user",
                      action='store',
                      help="gerrit user to querry [default: %default]",
                      metavar="USER",
                      default=OWNER)
    parser.add_option("-d",
                      "--del",
                      dest="bdel",
                      action='store',
                      type="int",
                      help="whether to delete delivery folder "
                      "and loc file [default: %default]",
                      metavar="OPTION",
                      default=0)
    (options, args) = parser.parse_args()
    check_date(options.start_time)
    owner = options.owner
    start_time = options.start_time
    port = options.port
    server = options.server
    keyfile = options.keyfile
    passp = options.passphrase
    user = options.user
    bdel = options.bdel

    rsite = gssh.Site(server, owner, port, keyfile, passp).connect()
    plist = gssh.Query(
        '--commit-message',
        'owner:' + user + ' AND (status:merged OR status:pending)' +
        ' since:' + start_time).execute_on(rsite)
    LOG.info("| Total gerrit results: %d", len(plist))

    if bdel == 1:
        shutil.rmtree(OUTPUT, True)
        if os.path.exists(LOC_FILE):
            os.remove(LOC_FILE)

    LF = open(LOC_FILE, 'a')

    # Create delivery folder
    if not os.path.exists(OUTPUT):
        os.makedirs(OUTPUT)
    if OUTPUT.startswith('/'):
        root_dir = OUTPUT
    else:
        root_dir = "/".join([os.getcwd(), OUTPUT])

    for p in plist:
        LOG.info("|_ Generating doc from gerrit patch: %s ", p.number)
        os.chdir(root_dir)

        project_name = '[' + p.repo_name.split('/')[-1] + ']'
        topic = get_topic_name(p)
        pss = p.patchsets
        patch_urls = {}
        if topic.bug:
            name = topic.bug
        else:
            name = topic.change
        for num, ps in pss.iteritems():
            patch_urls[num] = PROTO + GERRIT_HOST + \
                '/gitweb?p=' + p.repo_name + \
                '.git;a=patch;h=' + \
                ps.raw['revision']

        LOG.info('|____ Project: %s', project_name)
        LOG.info('|____ Topic: %s', name)
        LOG.info('|____ PS count: %s', len(patch_urls))
        patch_name = project_name
        if topic.bp:
            directory = create_folder(patch_name, topic.bp)
            os.chdir("/".join([os.getcwd(), directory]))
            patch_name = None
        if len(patch_urls) == 1:
            create_file(patch_name, name, patch_urls[1],
                        (p.patchsets[1].raw['sizeInsertions'],
                         p.patchsets[1].raw['sizeDeletions'],
                         p.raw['commitMessage'].split('Change-Id')[0].replace(
                             '\n', ' ')))
        else:
            directory = create_folder(
                patch_name, name,
                p.raw['commitMessage'].split('Change-Id')[0].replace(
                    '\n', ' '))
            os.chdir("/".join([os.getcwd(), directory]))
            tmp_name = name
            if topic.bug and topic.change:
                tmp_name = topic.bug + '_' + topic.change
            for patch_num, patch_url in patch_urls.iteritems():
                create_file(None,
                            tmp_name,
                            patch_url,
                            (p.patchsets[patch_num].raw['sizeInsertions'],
                             p.patchsets[patch_num].raw['sizeDeletions']),
                            patch_num=patch_num)
    LF.close()
    LOG.info("|_ FIN!")