~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to tests/test_rspush.py

  • Committer: Aaron Bentley
  • Date: 2006-12-04 14:32:43 UTC
  • Revision ID: abentley@panoramicfeedback.com-20061204143243-i28ph41mdgbsofev
Fixed handling of pipe errors when writing to patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 Aaron Bentley
2
 
#
3
 
#    This program is free software; you can redistribute it and/or modify
4
 
#    it under the terms of the GNU General Public License as published by
5
 
#    the Free Software Foundation; either version 2 of the License, or
6
 
#    (at your option) any later version.
7
 
#
8
 
#    This program is distributed in the hope that it will be useful,
9
 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
#    GNU General Public License for more details.
12
 
#
13
 
#    You should have received a copy of the GNU General Public License
14
 
#    along with this program; if not, write to the Free Software
15
 
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
 
18
 
import os
19
 
 
20
 
from bzrlib.bzrdir import BzrDir
21
 
from bzrlib.tests import TestCaseWithTransport, TestSkipped
22
 
 
23
 
from bzrlib.plugins.bzrtools.bzrtools import (
24
 
    history_subset,
25
 
    NoRsync,
26
 
    NotStandalone,
27
 
    rspush,
28
 
    rsync,
29
 
    RsyncNoFile,
30
 
)
31
 
 
32
 
 
33
 
class MockRSync(object):
34
 
 
35
 
    def __init__(self):
36
 
        self.calls = []
37
 
 
38
 
    def __call__(self, source, target, **kwargs):
39
 
        self.calls.append((source, target, kwargs))
40
 
        if target.endswith('revision-history'):
41
 
            output = open(target, 'wb')
42
 
            output.close()
43
 
 
44
 
 
45
 
class TestRSPush(TestCaseWithTransport):
46
 
 
47
 
    def test_rsync(self):
48
 
        cwd = os.getcwd()
49
 
        try:
50
 
            self.assertRaises(RsyncNoFile, rsync, "a", "b", silent=True)
51
 
        except NoRsync:
52
 
            raise TestSkipped('rsync not installed')
53
 
        self.assertRaises(RsyncNoFile, rsync, cwd + "/a", cwd + "/b",
54
 
                          excludes=("*.py",), silent=True)
55
 
        self.assertRaises(NoRsync, rsync, cwd + "/a", cwd + "/b",
56
 
                          excludes=("*.py",), silent=True,
57
 
                          rsync_name="rsyncc")
58
 
 
59
 
    def test_rspush_locking(self):
60
 
        tree = self.make_branch_and_tree('tree', format='dirstate-tags')
61
 
        tree.commit('some changes')
62
 
        mock_rsync = MockRSync()
63
 
        rspush(tree, 'example.org:foo', _rsync=mock_rsync)
64
 
        rspush(tree, 'example.org:foo', working_tree = False,
65
 
               _rsync=mock_rsync)
66
 
        tree2 = self.make_branch_and_tree('tree2',
67
 
                                          format='pack-0.92')
68
 
        rspush(tree2, 'example.org:foo', _rsync=mock_rsync)
69
 
 
70
 
    def test_refuse_lightweight_checkout(self):
71
 
        branch = self.make_branch('tree')
72
 
        checkout = branch.create_checkout('checkout', lightweight=True)
73
 
        checkout.commit('some changes')
74
 
        mock_rsync = MockRSync()
75
 
        e = self.assertRaises(NotStandalone, rspush, checkout,
76
 
                              'example.org:foo', _rsync=mock_rsync)
77
 
        self.assertContainsRe(str(e), '/checkout/ is not a standalone tree.$')
78
 
 
79
 
    def test_refuse_checkout(self):
80
 
        branch = self.make_branch('tree')
81
 
        checkout = branch.create_checkout('checkout')
82
 
        checkout.commit('some changes')
83
 
        mock_rsync = MockRSync()
84
 
        self.assertRaises(NotStandalone, rspush, checkout, 'example.org:foo',
85
 
                          _rsync=mock_rsync)
86
 
 
87
 
    def test_refuse_shared(self):
88
 
        repo = self.make_repository('repo', shared=True)
89
 
        bzrdir = BzrDir.open('repo')
90
 
        bzrdir.create_branch()
91
 
        bzrdir.create_workingtree()
92
 
        tree = bzrdir.open_workingtree()
93
 
        tree.commit('some changes')
94
 
        mock_rsync = MockRSync()
95
 
        self.assertRaises(NotStandalone, rspush, tree, 'example.org:foo',
96
 
                          _rsync=mock_rsync)
97
 
 
98
 
    def do_history_subset(self, format):
99
 
        tree_a = self.make_branch_and_tree('tree_a', format=format)
100
 
        tree_a.lock_write()
101
 
        self.addCleanup(tree_a.unlock)
102
 
        tree_a.commit('foo')
103
 
        tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree()
104
 
        tree_a.commit('bar')
105
 
        try:
106
 
            self.assertTrue(history_subset('tree_b/', tree_a.branch))
107
 
        except NoRsync:
108
 
            raise TestSkipped('rsync not installed')
109
 
        self.assertFalse(history_subset('tree_a/', tree_b.branch))
110
 
 
111
 
    def do_history_subset_no_commits(self, format):
112
 
        tree_a = self.make_branch_and_tree('tree_a', format=format)
113
 
        tree_b = self.make_branch_and_tree('tree_b', format=format)
114
 
        try:
115
 
            self.assertTrue(history_subset('tree_b/', tree_a.branch))
116
 
        except NoRsync:
117
 
            raise TestSkipped('rsync not installed')
118
 
 
119
 
    def test_history_subset_dirstate(self):
120
 
        self.do_history_subset('dirstate')
121
 
 
122
 
    def test_history_subset_no_commits_dirstate(self):
123
 
        self.do_history_subset_no_commits('dirstate')
124
 
 
125
 
    def test_history_subset_pack(self):
126
 
        self.do_history_subset('pack-0.92')
127
 
 
128
 
    def test_history_subset_no_commits_pack(self):
129
 
        self.do_history_subset_no_commits('pack-0.92')