f240e4a47e8e91c2b903b703b928ea923e3d8a45
[jelmer/dulwich-libgit2.git] / dulwich / tests / test_fastexport.py
1 # test_fastexport.py -- Fast export/import functionality
2 # Copyright (C) 2010 Jelmer Vernooij <jelmer@samba.org>
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; version 2
7 # of the License or (at your option) any later version of
8 # the License.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 # MA  02110-1301, USA.
19
20 from cStringIO import StringIO
21 import stat
22
23 from dulwich.object_store import (
24     MemoryObjectStore,
25     )
26 from dulwich.objects import (
27     Blob,
28     Commit,
29     Tree,
30     )
31 from dulwich.tests import (
32     TestCase,
33     TestSkipped,
34     )
35
36
37 class GitFastExporterTests(TestCase):
38
39     def setUp(self):
40         super(GitFastExporterTests, self).setUp()
41         self.store = MemoryObjectStore()
42         self.stream = StringIO()
43         try:
44             from dulwich.fastexport import GitFastExporter
45         except ImportError:
46             raise TestSkipped("python-fastimport not available")
47         self.fastexporter = GitFastExporter(self.stream, self.store)
48
49     def test_export_blob(self):
50         b = Blob()
51         b.data = "fooBAR"
52         self.assertEquals('1', self.fastexporter.export_blob(b))
53         self.assertEquals('blob\nmark :1\ndata 6\nfooBAR\n',
54             self.stream.getvalue())
55
56     def test_export_commit(self):
57         b = Blob()
58         b.data = "FOO"
59         t = Tree()
60         t.add(stat.S_IFREG | 0644, "foo", b.id)
61         c = Commit()
62         c.committer = c.author = "Jelmer <jelmer@host>"
63         c.author_time = c.commit_time = 1271345553.47
64         c.author_timezone = c.commit_timezone = 0
65         c.message = "msg"
66         c.tree = t.id
67         self.store.add_objects([(b, None), (t, None), (c, None)])
68         self.assertEquals(2,
69                 self.fastexporter.export_commit(c, "refs/heads/master"))
70         self.assertEquals("""blob
71 mark :1
72 data 3
73 FOO
74 commit refs/heads/master
75 mark :2
76 author Jelmer <jelmer@host> 1271345553.47 +0000
77 committer Jelmer <jelmer@host> 1271345553.47 +0000
78 data 3
79 msg
80 M 100644 :1 foo
81
82 """, self.stream.getvalue())