aboutsummaryrefslogtreecommitdiff
path: root/gitosis/test/test_repository.py
blob: 79d15617ebf316edc2b504c0f322c1e350fb9ade (plain)
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
from nose.tools import eq_ as eq
 
import os
import subprocess
 
from gitosis import repository
 
from gitosis.test.util import mkdirmaketempreadFilecheck_mode
 
def check_bare(path):
    # we want it to be a bare repository 
    assert not os.path.exists(os.path.join(path'.git'))
 
def test_init_simple():
    tmp = maketemp()
    path = os.path.join(tmp'repo.git')
    repository.init(path)
    check_mode(path0750is_dir=True)
    check_bare(path)
 
def test_init_exist_dir():
    tmp = maketemp()
    path = os.path.join(tmp'repo.git')
    mkdir(path0710)
    check_mode(path0710is_dir=True)
    repository.init(path)
    # my weird access mode is preserved 
    check_mode(path0710is_dir=True)
    check_bare(path)
 
def test_init_exist_git():
    tmp = maketemp()
    path = os.path.join(tmp'repo.git')
    repository.init(path)
    repository.init(path)
    check_mode(path0750is_dir=True)
    check_bare(path)
 
def test_init_templates():
    tmp = maketemp()
    path = os.path.join(tmp'repo.git')
    templatedir = os.path.join(
        os.path.dirname(__file__),
        'mocktemplates',
        )
    repository.init(pathtemplate=templatedir)
    repository.init(path)
    got = readFile(os.path.join(path'no-confusion'))
    eq(got'i should show up\n')
    check_mode(
        os.path.join(path'hooks''post-update'),
        0755,
        is_file=True,
        )
    got = readFile(os.path.join(path'hooks''post-update'))
    eq(got'#!/bin/sh\n# i can override standard templates\n')
    # standard templates are there, too 
    assert os.path.isfile(os.path.join(path'hooks''pre-rebase'))
 
def test_export_simple():
    tmp = maketemp()
    git_dir = os.path.join(tmp'repo.git')
    repository.init(path=git_dir)
    repository.fast_import(
        git_dir=git_dir,
        committer='John Doe <jdoe@example.com>',
        commit_msg="""\
Reverse the polarity of the neutron flow.
 
Frobitz the quux and eschew obfuscation.
""",
        files=[ 
            ('foo''content'), 
            ('bar/quux''another'), 
            ],
        )
    export = os.path.join(tmp'export')
    repository.export(git_dir=git_dir, path=export)
    eq(sorted(os.listdir(export)),
       sorted(['foo', 'bar']))
    eq(readFile(os.path.join(export'foo'))'content')
    eq(os.listdir(os.path.join(export'bar'))['quux'])
    eq(readFile(os.path.join(export'bar''quux'))'another')
    child = subprocess.Popen(
        args=['git', 'cat-file', 'commit', 'HEAD'],
        cwd=git_dir,
        stdout=subprocess.PIPE,
        close_fds=True,
        env=dict(GIT_DIR=git_dir),
        )
    got = child.stdout.read().splitlines()
    returncode = child.wait()
    if returncode != 0:
        raise RuntimeError('git exit status %d' % returncode)
    eq(got[0].split(None1)[0]'tree')
    eq(got[1].rsplit(None2)[0],
       'author John Doe <jdoe@example.com>')
    eq(got[2].rsplit(None2)[0],
       'committer John Doe <jdoe@example.com>')
    eq(got[3]'')
    eq(got[4]'Reverse the polarity of the neutron flow.')
    eq(got[5]'')
    eq(got[6]'Frobitz the quux and eschew obfuscation.')
    eq(got[7:][])