47
47
self.assertEqual(['M 100644 :1 f\xc2\xb5/bar\n'], builder.commit_info)
49
def test_set_file_newline(self):
51
builder = tests.GitBranchBuilder(stream)
52
builder.set_file(u'foo\nbar', 'contents\nbar\n', False)
53
self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n',
55
self.assertEqual(['M 100644 :1 "foo\\nbar"\n'], builder.commit_info)
57
49
def test_set_file_executable(self):
58
50
stream = StringIO()
59
51
builder = tests.GitBranchBuilder(stream)
71
63
self.assertEqual(['M 120000 :1 f\xc2\xb5/bar\n'], builder.commit_info)
73
def test_set_link_newline(self):
75
builder = tests.GitBranchBuilder(stream)
76
builder.set_link(u'foo\nbar', 'link/contents')
77
self.assertEqualDiff('blob\nmark :1\ndata 13\nlink/contents\n',
79
self.assertEqual(['M 120000 :1 "foo\\nbar"\n'], builder.commit_info)
81
65
def test_delete_entry(self):
82
66
stream = StringIO()
83
67
builder = tests.GitBranchBuilder(stream)
84
68
builder.delete_entry(u'path/to/f\xb5')
85
69
self.assertEqual(['D path/to/f\xc2\xb5\n'], builder.commit_info)
87
def test_delete_entry_newline(self):
89
builder = tests.GitBranchBuilder(stream)
90
builder.delete_entry(u'path/to/foo\nbar')
91
self.assertEqual(['D "path/to/foo\\nbar"\n'], builder.commit_info)
93
def test_encode_path(self):
94
encode = tests.GitBranchBuilder._encode_path
95
# Unicode is encoded to utf-8
96
self.assertEqual(encode(u'f\xb5'), 'f\xc2\xb5')
97
# The name must be quoted if it starts by a double quote or contains a
99
self.assertEqual(encode(u'"foo'), '"\\"foo"')
100
self.assertEqual(encode(u'fo\no'), '"fo\\no"')
101
# When the name is quoted, all backslash and quote chars must be
103
self.assertEqual(encode(u'fo\\o\nbar'), '"fo\\\\o\\nbar"')
104
self.assertEqual(encode(u'fo"o"\nbar'), '"fo\\"o\\"\\nbar"')
105
# Other control chars, such as \r, need not be escaped.
106
self.assertEqual(encode(u'foo\r\nbar'), '"foo\r\\nbar"')
108
71
def test_add_and_commit(self):
109
72
stream = StringIO()
110
73
builder = tests.GitBranchBuilder(stream)
148
111
'M 100644 :1 foo\n'
150
'commit refs/heads/master\n'
113
'commit refs/head/master\n'
152
115
'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
157
'commit refs/heads/master\n'
120
'commit refs/head/master\n'
159
122
'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
189
152
'M 100644 :1 foo\n'
191
'commit refs/heads/master\n'
154
'commit refs/head/master\n'
193
156
'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
198
'commit refs/heads/master\n'
161
'commit refs/head/master\n'
200
163
'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
219
182
self.assertContainsRe(stream.getvalue(),
220
183
r'committer Joe Foo <joe@foo\.com> \d+ \+0000')
222
def test_reset(self):
224
builder = tests.GitBranchBuilder(stream)
226
self.assertEqualDiff('reset refs/heads/master\n\n', stream.getvalue())
228
def test_reset_named_ref(self):
230
builder = tests.GitBranchBuilder(stream)
231
builder.reset('refs/heads/branch')
232
self.assertEqualDiff('reset refs/heads/branch\n\n', stream.getvalue())
234
def test_reset_revision(self):
236
builder = tests.GitBranchBuilder(stream)
237
builder.reset(mark=123)
238
self.assertEqualDiff(
239
'reset refs/heads/master\n'
241
'\n', stream.getvalue())
244
186
class TestGitBranchBuilderReal(tests.TestCaseInTempDir):