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)
49
57
def test_set_file_executable(self):
50
58
stream = StringIO()
51
59
builder = tests.GitBranchBuilder(stream)
63
71
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)
65
81
def test_delete_entry(self):
66
82
stream = StringIO()
67
83
builder = tests.GitBranchBuilder(stream)
68
84
builder.delete_entry(u'path/to/f\xb5')
69
85
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"')
71
108
def test_add_and_commit(self):
72
109
stream = StringIO()
73
110
builder = tests.GitBranchBuilder(stream)
111
148
'M 100644 :1 foo\n'
113
'commit refs/head/master\n'
150
'commit refs/heads/master\n'
115
152
'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
120
'commit refs/head/master\n'
157
'commit refs/heads/master\n'
122
159
'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
152
189
'M 100644 :1 foo\n'
154
'commit refs/head/master\n'
191
'commit refs/heads/master\n'
156
193
'committer Joe Foo <joe@foo.com> 1194586405 +0000\n'
161
'commit refs/head/master\n'
198
'commit refs/heads/master\n'
163
200
'committer Joe Foo <joe@foo.com> 1194586410 +0000\n'
182
219
self.assertContainsRe(stream.getvalue(),
183
220
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())
186
244
class TestGitBranchBuilderReal(tests.TestCaseInTempDir):