bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
2395.1.1
by Martin Pool
 rename 'revision store' to 'repository' in bzr info  | 
1  | 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 | 
| 
1685.1.60
by Martin Pool
 [broken] NotBranchError should unescape the url if possible  | 
2  | 
# 
 | 
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
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.
 | 
|
| 
2052.3.1
by John Arbash Meinel
 Add tests to cleanup the copyright of all source files  | 
7  | 
#
 | 
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
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.
 | 
|
| 
2052.3.1
by John Arbash Meinel
 Add tests to cleanup the copyright of all source files  | 
12  | 
#
 | 
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
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  | 
||
| 
1534.5.1
by Robert Collins
 Give info some reasonable output and tests.  | 
17  | 
__all__ = ['show_bzrdir_info']  | 
18  | 
||
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
19  | 
import os  | 
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
20  | 
import time  | 
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
21  | 
import sys  | 
| 
1534.5.1
by Robert Collins
 Give info some reasonable output and tests.  | 
22  | 
|
| 
1551.9.22
by Aaron Bentley
 Use urlutils for info. Fixes bug #76229  | 
23  | 
from bzrlib import (  | 
| 
2363.5.5
by Aaron Bentley
 add info.describe_format  | 
24  | 
bzrdir,  | 
| 
1551.9.22
by Aaron Bentley
 Use urlutils for info. Fixes bug #76229  | 
25  | 
diff,  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
26  | 
errors,  | 
| 
1551.9.22
by Aaron Bentley
 Use urlutils for info. Fixes bug #76229  | 
27  | 
osutils,  | 
28  | 
urlutils,  | 
|
29  | 
    )
 | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
30  | 
from bzrlib.errors import (NoWorkingTree, NotBranchError,  | 
31  | 
NoRepositoryPresent, NotLocalUrl)  | 
|
| 
1587.1.14
by Robert Collins
 Make bound branch creation happen via 'checkout'  | 
32  | 
from bzrlib.missing import find_unmerged  | 
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
33  | 
from bzrlib.symbol_versioning import (deprecated_function,  | 
| 
2696.1.1
by Martin Pool
 Remove things deprecated in 0.11 and earlier  | 
34  | 
zero_eighteen)  | 
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
35  | 
|
| 
462
by Martin Pool
 - New form 'file_id in tree' to check if the file is present  | 
36  | 
|
| 
1563.2.28
by Robert Collins
 Add total_size to the revision_store api.  | 
37  | 
def plural(n, base='', pl=None):  | 
38  | 
if n == 1:  | 
|
39  | 
return base  | 
|
| 
1963.2.6
by Robey Pointer
 pychecker is on crack; go back to using 'is None'.  | 
40  | 
elif pl is not None:  | 
| 
1563.2.28
by Robert Collins
 Add total_size to the revision_store api.  | 
41  | 
return pl  | 
42  | 
else:  | 
|
43  | 
return 's'  | 
|
44  | 
||
45  | 
||
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
46  | 
class LocationList(object):  | 
47  | 
||
48  | 
def __init__(self, base_path):  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
49  | 
self.locs = []  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
50  | 
self.base_path = base_path  | 
51  | 
||
52  | 
def add_url(self, label, url):  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
53  | 
"""Add a URL to the list, converting it to a path if possible"""  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
54  | 
if url is None:  | 
55  | 
            return
 | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
56  | 
try:  | 
57  | 
path = urlutils.local_path_from_url(url)  | 
|
58  | 
except errors.InvalidURL:  | 
|
59  | 
self.locs.append((label, url))  | 
|
60  | 
else:  | 
|
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
61  | 
self.add_path(label, path)  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
62  | 
|
63  | 
def add_path(self, label, path):  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
64  | 
"""Add a path, converting it to a relative path if possible"""  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
65  | 
try:  | 
66  | 
path = osutils.relpath(self.base_path, path)  | 
|
67  | 
except errors.PathNotChild:  | 
|
68  | 
            pass
 | 
|
69  | 
else:  | 
|
70  | 
if path == '':  | 
|
71  | 
path = '.'  | 
|
72  | 
if path != '/':  | 
|
73  | 
path = path.rstrip('/')  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
74  | 
self.locs.append((label, path))  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
75  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
76  | 
def get_lines(self):  | 
77  | 
max_len = max(len(l) for l, u in self.locs)  | 
|
78  | 
return [" %*s: %s\n" % (max_len, l, u) for l, u in self.locs ]  | 
|
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
79  | 
|
80  | 
||
81  | 
def gather_location_info(repository, branch=None, working=None):  | 
|
82  | 
locs = {}  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
83  | 
repository_path = repository.bzrdir.root_transport.base  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
84  | 
if branch is not None:  | 
85  | 
branch_path = branch.bzrdir.root_transport.base  | 
|
86  | 
master_path = branch.get_bound_location()  | 
|
87  | 
if master_path is None:  | 
|
88  | 
master_path = branch_path  | 
|
89  | 
else:  | 
|
90  | 
branch_path = None  | 
|
91  | 
master_path = None  | 
|
92  | 
if working:  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
93  | 
working_path = working.bzrdir.root_transport.base  | 
94  | 
if working_path != branch_path:  | 
|
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
95  | 
locs['light checkout root'] = working_path  | 
96  | 
if master_path != branch_path:  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
97  | 
if repository.is_shared():  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
98  | 
locs['repository checkout root'] = branch_path  | 
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
99  | 
else:  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
100  | 
locs['checkout root'] = branch_path  | 
101  | 
if working_path != master_path:  | 
|
102  | 
locs['checkout of branch'] = master_path  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
103  | 
elif repository.is_shared():  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
104  | 
locs['repository branch'] = branch_path  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
105  | 
elif branch_path is not None:  | 
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
106  | 
            # standalone
 | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
107  | 
locs['branch root'] = branch_path  | 
108  | 
else:  | 
|
109  | 
working_path = None  | 
|
| 
1624.3.48
by Olaf Conradi
 Add info on standalone branches without a working tree.  | 
110  | 
if repository.is_shared():  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
111  | 
            # lightweight checkout of branch in shared repository
 | 
112  | 
if branch_path is not None:  | 
|
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
113  | 
locs['repository branch'] = branch_path  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
114  | 
elif branch_path is not None:  | 
115  | 
            # standalone
 | 
|
116  | 
locs['branch root'] = branch_path  | 
|
| 
2363.5.19
by Aaron Bentley
 Add support for bound branches  | 
117  | 
if master_path != branch_path:  | 
118  | 
locs['bound to branch'] = master_path  | 
|
| 
1624.3.48
by Olaf Conradi
 Add info on standalone branches without a working tree.  | 
119  | 
else:  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
120  | 
locs['repository'] = repository_path  | 
121  | 
if repository.is_shared():  | 
|
122  | 
        # lightweight checkout of branch in shared repository
 | 
|
123  | 
locs['shared repository'] = repository_path  | 
|
| 
2363.5.23
by Aaron Bentley
 Output 2-tuples from gather_locations  | 
124  | 
order = ['light checkout root', 'repository checkout root',  | 
125  | 
'checkout root', 'checkout of branch', 'shared repository',  | 
|
126  | 
'repository', 'repository branch', 'branch root',  | 
|
127  | 
'bound to branch']  | 
|
128  | 
return [(n, locs[n]) for n in order if n in locs]  | 
|
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
129  | 
|
130  | 
||
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
131  | 
def _show_location_info(locs, outfile):  | 
| 
2363.5.18
by Aaron Bentley
 Get all tests passing  | 
132  | 
"""Show known locations for working, branch and repository."""  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
133  | 
outfile.write('Location:\n')  | 
| 
2804.4.3
by Alexander Belchenko
 fix for test_info-tests: using osutils.getcwd instead of os.getcwd (sigh)  | 
134  | 
path_list = LocationList(osutils.getcwd())  | 
| 
2363.5.23
by Aaron Bentley
 Output 2-tuples from gather_locations  | 
135  | 
for name, loc in locs:  | 
136  | 
path_list.add_url(name, loc)  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
137  | 
outfile.writelines(path_list.get_lines())  | 
138  | 
||
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
139  | 
|
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
140  | 
def _gather_related_branches(branch):  | 
| 
2804.4.3
by Alexander Belchenko
 fix for test_info-tests: using osutils.getcwd instead of os.getcwd (sigh)  | 
141  | 
locs = LocationList(osutils.getcwd())  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
142  | 
locs.add_url('public branch', branch.get_public_branch())  | 
143  | 
locs.add_url('push branch', branch.get_push_location())  | 
|
144  | 
locs.add_url('parent branch', branch.get_parent())  | 
|
145  | 
locs.add_url('submit branch', branch.get_submit_branch())  | 
|
146  | 
return locs  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
147  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
148  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
149  | 
def _show_related_info(branch, outfile):  | 
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
150  | 
"""Show parent and push location of branch."""  | 
| 
1551.15.41
by Aaron Bentley
 Make info provide more related brances, and format all branches nicely  | 
151  | 
locs = _gather_related_branches(branch)  | 
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
152  | 
if len(locs.locs) > 0:  | 
| 
2911.6.1
by Blake Winton
 Change 'print >> f,'s to 'f.write('s.  | 
153  | 
outfile.write('\n')  | 
154  | 
outfile.write('Related branches:\n')  | 
|
| 
1551.15.43
by Aaron Bentley
 Provide ways of getting at unicode-clean output  | 
155  | 
outfile.writelines(locs.get_lines())  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
156  | 
|
157  | 
||
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
158  | 
def _show_format_info(control=None, repository=None, branch=None,  | 
159  | 
working=None, outfile=None):  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
160  | 
"""Show known formats for control, working, branch and repository."""  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
161  | 
outfile.write('\n')  | 
162  | 
outfile.write('Format:\n')  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
163  | 
if control:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
164  | 
outfile.write(' control: %s\n' %  | 
165  | 
control._format.get_format_description())  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
166  | 
if working:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
167  | 
outfile.write(' working tree: %s\n' %  | 
168  | 
working._format.get_format_description())  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
169  | 
if branch:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
170  | 
outfile.write(' branch: %s\n' %  | 
171  | 
branch._format.get_format_description())  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
172  | 
if repository:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
173  | 
outfile.write(' repository: %s\n' %  | 
174  | 
repository._format.get_format_description())  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
175  | 
|
176  | 
||
177  | 
def _show_locking_info(repository, branch=None, working=None, outfile=None):  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
178  | 
"""Show locking status of working, branch and repository."""  | 
179  | 
if (repository.get_physical_lock_status() or  | 
|
180  | 
(branch and branch.get_physical_lock_status()) or  | 
|
181  | 
(working and working.get_physical_lock_status())):  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
182  | 
outfile.write('\n')  | 
183  | 
outfile.write('Lock status:\n')  | 
|
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
184  | 
if working:  | 
185  | 
if working.get_physical_lock_status():  | 
|
186  | 
status = 'locked'  | 
|
187  | 
else:  | 
|
188  | 
status = 'unlocked'  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
189  | 
outfile.write(' working tree: %s\n' % status)  | 
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
190  | 
if branch:  | 
191  | 
if branch.get_physical_lock_status():  | 
|
192  | 
status = 'locked'  | 
|
193  | 
else:  | 
|
194  | 
status = 'unlocked'  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
195  | 
outfile.write(' branch: %s\n' % status)  | 
| 
1694.2.6
by Martin Pool
 [merge] bzr.dev  | 
196  | 
if repository:  | 
197  | 
if repository.get_physical_lock_status():  | 
|
198  | 
status = 'locked'  | 
|
199  | 
else:  | 
|
200  | 
status = 'unlocked'  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
201  | 
outfile.write(' repository: %s\n' % status)  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
202  | 
|
203  | 
||
204  | 
def _show_missing_revisions_branch(branch, outfile):  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
205  | 
"""Show missing master revisions in branch."""  | 
| 
1587.1.14
by Robert Collins
 Make bound branch creation happen via 'checkout'  | 
206  | 
    # Try with inaccessible branch ?
 | 
| 
1624.3.2
by Olaf Conradi
 Implemented table of constructs from BzrInfo specification.  | 
207  | 
master = branch.get_master_branch()  | 
| 
1587.1.14
by Robert Collins
 Make bound branch creation happen via 'checkout'  | 
208  | 
if master:  | 
| 
1624.3.2
by Olaf Conradi
 Implemented table of constructs from BzrInfo specification.  | 
209  | 
local_extra, remote_extra = find_unmerged(branch, master)  | 
| 
1587.1.14
by Robert Collins
 Make bound branch creation happen via 'checkout'  | 
210  | 
if remote_extra:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
211  | 
outfile.write('\n')  | 
212  | 
outfile.write(('Branch is out of date: missing %d '  | 
|
213  | 
'revision%s.\n') % (len(remote_extra),  | 
|
214  | 
plural(len(remote_extra))))  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
215  | 
|
216  | 
||
217  | 
def _show_missing_revisions_working(working, outfile):  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
218  | 
"""Show missing revisions in working tree."""  | 
219  | 
branch = working.branch  | 
|
220  | 
basis = working.basis_tree()  | 
|
221  | 
work_inv = working.inventory  | 
|
| 
2249.4.2
by Wouter van Heyst
 Convert callers of Branch.revision_history() to Branch.last_revision_info() where sensible.  | 
222  | 
branch_revno, branch_last_revision = branch.last_revision_info()  | 
| 
1908.7.6
by Robert Collins
 Deprecate WorkingTree.last_revision.  | 
223  | 
try:  | 
224  | 
tree_last_id = working.get_parent_ids()[0]  | 
|
225  | 
except IndexError:  | 
|
226  | 
tree_last_id = None  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
227  | 
|
| 
2249.4.2
by Wouter van Heyst
 Convert callers of Branch.revision_history() to Branch.last_revision_info() where sensible.  | 
228  | 
if branch_revno and tree_last_id != branch_last_revision:  | 
| 
1624.3.11
by Olaf Conradi
 Test cases exposed a bug in missing revisions count of working tree. It  | 
229  | 
tree_last_revno = branch.revision_id_to_revno(tree_last_id)  | 
| 
2249.4.2
by Wouter van Heyst
 Convert callers of Branch.revision_history() to Branch.last_revision_info() where sensible.  | 
230  | 
missing_count = branch_revno - tree_last_revno  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
231  | 
outfile.write('\n')  | 
232  | 
outfile.write(('Working tree is out of date: missing %d '  | 
|
233  | 
'revision%s.\n') % (missing_count, plural(missing_count)))  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
234  | 
|
235  | 
||
236  | 
def _show_working_stats(working, outfile):  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
237  | 
"""Show statistics about a working tree."""  | 
238  | 
basis = working.basis_tree()  | 
|
239  | 
work_inv = working.inventory  | 
|
| 
1852.10.3
by Robert Collins
 Remove all uses of compare_trees and replace with Tree.changes_from throughout bzrlib.  | 
240  | 
delta = working.changes_from(basis, want_unchanged=True)  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
241  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
242  | 
outfile.write('\n')  | 
243  | 
outfile.write('In the working tree:\n')  | 
|
244  | 
outfile.write(' %8s unchanged\n' % len(delta.unchanged))  | 
|
245  | 
outfile.write(' %8d modified\n' % len(delta.modified))  | 
|
246  | 
outfile.write(' %8d added\n' % len(delta.added))  | 
|
247  | 
outfile.write(' %8d removed\n' % len(delta.removed))  | 
|
248  | 
outfile.write(' %8d renamed\n' % len(delta.renamed))  | 
|
| 
462
by Martin Pool
 - New form 'file_id in tree' to check if the file is present  | 
249  | 
|
250  | 
ignore_cnt = unknown_cnt = 0  | 
|
251  | 
for path in working.extras():  | 
|
252  | 
if working.is_ignored(path):  | 
|
253  | 
ignore_cnt += 1  | 
|
254  | 
else:  | 
|
255  | 
unknown_cnt += 1  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
256  | 
outfile.write(' %8d unknown\n' % unknown_cnt)  | 
257  | 
outfile.write(' %8d ignored\n' % ignore_cnt)  | 
|
| 
462
by Martin Pool
 - New form 'file_id in tree' to check if the file is present  | 
258  | 
|
259  | 
dir_cnt = 0  | 
|
| 
1731.1.39
by Aaron Bentley
 Reject removing is_root  | 
260  | 
for file_id in work_inv:  | 
261  | 
if (work_inv.get_file_kind(file_id) == 'directory' and  | 
|
262  | 
not work_inv.is_root(file_id)):  | 
|
263  | 
dir_cnt += 1  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
264  | 
outfile.write(' %8d versioned %s\n' % (dir_cnt,  | 
265  | 
plural(dir_cnt, 'subdirectory', 'subdirectories')))  | 
|
| 
77
by mbp at sourcefrog
 - split info command out into separate file  | 
266  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
267  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
268  | 
def _show_branch_stats(branch, verbose, outfile):  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
269  | 
"""Show statistics about a branch."""  | 
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
270  | 
revno, head = branch.last_revision_info()  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
271  | 
outfile.write('\n')  | 
272  | 
outfile.write('Branch history:\n')  | 
|
273  | 
outfile.write(' %8d revision%s\n' % (revno, plural(revno)))  | 
|
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
274  | 
stats = branch.repository.gather_stats(head, committers=verbose)  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
275  | 
if verbose:  | 
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
276  | 
committers = stats['committers']  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
277  | 
outfile.write(' %8d committer%s\n' % (committers,  | 
278  | 
plural(committers)))  | 
|
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
279  | 
if revno:  | 
280  | 
timestamp, timezone = stats['firstrev']  | 
|
281  | 
age = int((time.time() - timestamp) / 3600 / 24)  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
282  | 
outfile.write(' %8d day%s old\n' % (age, plural(age)))  | 
283  | 
outfile.write(' first revision: %s\n' %  | 
|
284  | 
osutils.format_date(timestamp, timezone))  | 
|
| 
2258.1.1
by Robert Collins
 Move info branch statistics gathering into the repository to allow smart server optimisation (Robert Collins).  | 
285  | 
timestamp, timezone = stats['latestrev']  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
286  | 
outfile.write(' latest revision: %s\n' %  | 
287  | 
osutils.format_date(timestamp, timezone))  | 
|
| 
2258.1.2
by Robert Collins
 New version of gather_stats which gathers aggregate data too.  | 
288  | 
return stats  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
289  | 
|
290  | 
||
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
291  | 
def _show_repository_info(repository, outfile):  | 
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
292  | 
"""Show settings of a repository."""  | 
293  | 
if repository.make_working_trees():  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
294  | 
outfile.write('\n')  | 
295  | 
outfile.write('Create working tree for new branches inside '  | 
|
296  | 
'the repository.\n')  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
297  | 
|
298  | 
||
299  | 
def _show_repository_stats(stats, outfile):  | 
|
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
300  | 
"""Show statistics about a repository."""  | 
| 
2258.1.2
by Robert Collins
 New version of gather_stats which gathers aggregate data too.  | 
301  | 
if 'revisions' in stats or 'size' in stats:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
302  | 
outfile.write('\n')  | 
303  | 
outfile.write('Repository:\n')  | 
|
| 
2258.1.2
by Robert Collins
 New version of gather_stats which gathers aggregate data too.  | 
304  | 
if 'revisions' in stats:  | 
305  | 
revisions = stats['revisions']  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
306  | 
outfile.write(' %8d revision%s\n' % (revisions, plural(revisions)))  | 
| 
2258.1.2
by Robert Collins
 New version of gather_stats which gathers aggregate data too.  | 
307  | 
if 'size' in stats:  | 
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
308  | 
outfile.write(' %8d KiB\n' % (stats['size']/1024))  | 
309  | 
||
| 
1624.3.21
by Olaf Conradi
 Make bzr info command work on both local and remote locations. Support  | 
310  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
311  | 
def show_bzrdir_info(a_bzrdir, verbose=False, outfile=None):  | 
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
312  | 
"""Output to stdout the 'info' for a_bzrdir."""  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
313  | 
if outfile is None:  | 
314  | 
outfile = sys.stdout  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
315  | 
try:  | 
| 
2363.5.9
by Aaron Bentley
 Merge from bzr.dev  | 
316  | 
tree = a_bzrdir.open_workingtree(  | 
317  | 
recommend_upgrade=False)  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
318  | 
except (NoWorkingTree, NotLocalUrl):  | 
319  | 
tree = None  | 
|
320  | 
try:  | 
|
321  | 
branch = a_bzrdir.open_branch()  | 
|
322  | 
except NotBranchError:  | 
|
323  | 
branch = None  | 
|
324  | 
try:  | 
|
325  | 
repository = a_bzrdir.open_repository()  | 
|
326  | 
except NoRepositoryPresent:  | 
|
327  | 
                # Return silently; cmd_info already returned NotBranchError
 | 
|
328  | 
                # if no bzrdir could be opened.
 | 
|
329  | 
                return
 | 
|
330  | 
else:  | 
|
331  | 
lockable = repository  | 
|
332  | 
else:  | 
|
333  | 
repository = branch.repository  | 
|
334  | 
lockable = branch  | 
|
335  | 
else:  | 
|
336  | 
branch = tree.branch  | 
|
337  | 
repository = branch.repository  | 
|
338  | 
lockable = tree  | 
|
339  | 
||
340  | 
lockable.lock_read()  | 
|
341  | 
try:  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
342  | 
show_component_info(a_bzrdir, repository, branch, tree, verbose,  | 
343  | 
outfile)  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
344  | 
finally:  | 
345  | 
lockable.unlock()  | 
|
346  | 
||
347  | 
||
348  | 
def show_component_info(control, repository, branch=None, working=None,  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
349  | 
verbose=1, outfile=None):  | 
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
350  | 
"""Write info about all bzrdir components to stdout"""  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
351  | 
if outfile is None:  | 
352  | 
outfile = sys.stdout  | 
|
| 
2363.5.7
by Aaron Bentley
 Make verbose mean what I want  | 
353  | 
if verbose is False:  | 
354  | 
verbose = 1  | 
|
355  | 
if verbose is True:  | 
|
356  | 
verbose = 2  | 
|
| 
2363.5.6
by Aaron Bentley
 Add short format description  | 
357  | 
layout = describe_layout(repository, branch, working)  | 
358  | 
format = describe_format(control, repository, branch, working)  | 
|
| 
2968.2.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``  | 
359  | 
outfile.write("%s (format: %s)\n" % (layout, format))  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
360  | 
_show_location_info(gather_location_info(repository, branch, working),  | 
361  | 
outfile)  | 
|
| 
2584.2.1
by Adeodato Simó
 Make `bzr info` show related branches in non-verbose mode.  | 
362  | 
if branch is not None:  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
363  | 
_show_related_info(branch, outfile)  | 
| 
2363.5.7
by Aaron Bentley
 Make verbose mean what I want  | 
364  | 
if verbose == 0:  | 
365  | 
        return
 | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
366  | 
_show_format_info(control, repository, branch, working, outfile)  | 
367  | 
_show_locking_info(repository, branch, working, outfile)  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
368  | 
if branch is not None:  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
369  | 
_show_missing_revisions_branch(branch, outfile)  | 
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
370  | 
if working is not None:  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
371  | 
_show_missing_revisions_working(working, outfile)  | 
372  | 
_show_working_stats(working, outfile)  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
373  | 
elif branch is not None:  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
374  | 
_show_missing_revisions_branch(branch, outfile)  | 
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
375  | 
if branch is not None:  | 
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
376  | 
stats = _show_branch_stats(branch, verbose==2, outfile)  | 
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
377  | 
else:  | 
378  | 
stats = repository.gather_stats()  | 
|
379  | 
if branch is None and working is None:  | 
|
| 
2904.3.1
by Lukáš Lalinský
 Unicode-safe output from ``bzr info``.  | 
380  | 
_show_repository_info(repository, outfile)  | 
381  | 
_show_repository_stats(stats, outfile)  | 
|
| 
2363.5.1
by Aaron Bentley
 Unify info display into show_component_info  | 
382  | 
|
383  | 
||
| 
2363.5.2
by Aaron Bentley
 Implement layout description  | 
384  | 
def describe_layout(repository=None, branch=None, tree=None):  | 
385  | 
"""Convert a control directory layout into a user-understandable term  | 
|
386  | 
||
387  | 
    Common outputs include "Standalone tree", "Repository branch" and
 | 
|
388  | 
    "Checkout".  Uncommon outputs include "Unshared repository with trees"
 | 
|
389  | 
    and "Empty control directory"
 | 
|
390  | 
    """
 | 
|
391  | 
if repository is None:  | 
|
392  | 
return 'Empty control directory'  | 
|
393  | 
if branch is None and tree is None:  | 
|
394  | 
if repository.is_shared():  | 
|
395  | 
phrase = 'Shared repository'  | 
|
396  | 
else:  | 
|
397  | 
phrase = 'Unshared repository'  | 
|
398  | 
if repository.make_working_trees():  | 
|
399  | 
phrase += ' with trees'  | 
|
400  | 
return phrase  | 
|
401  | 
else:  | 
|
402  | 
if repository.is_shared():  | 
|
403  | 
independence = "Repository "  | 
|
404  | 
else:  | 
|
405  | 
independence = "Standalone "  | 
|
406  | 
if tree is not None:  | 
|
407  | 
phrase = "tree"  | 
|
408  | 
else:  | 
|
409  | 
phrase = "branch"  | 
|
410  | 
if branch is None and tree is not None:  | 
|
411  | 
phrase = "branchless tree"  | 
|
412  | 
else:  | 
|
413  | 
if (tree is not None and tree.bzrdir.root_transport.base !=  | 
|
414  | 
branch.bzrdir.root_transport.base):  | 
|
| 
2363.5.4
by Aaron Bentley
 Eliminate the concept of a 'repository lightweight checkout'  | 
415  | 
independence = ''  | 
| 
2363.5.2
by Aaron Bentley
 Implement layout description  | 
416  | 
phrase = "Lightweight checkout"  | 
417  | 
elif branch.get_bound_location() is not None:  | 
|
418  | 
if independence == 'Standalone ':  | 
|
419  | 
independence = ''  | 
|
420  | 
if tree is None:  | 
|
421  | 
phrase = "Bound branch"  | 
|
422  | 
else:  | 
|
423  | 
phrase = "Checkout"  | 
|
424  | 
if independence != "":  | 
|
425  | 
phrase = phrase.lower()  | 
|
426  | 
return "%s%s" % (independence, phrase)  | 
|
427  | 
||
428  | 
||
| 
2363.5.5
by Aaron Bentley
 add info.describe_format  | 
429  | 
def describe_format(control, repository, branch, tree):  | 
430  | 
"""Determine the format of an existing control directory  | 
|
431  | 
||
432  | 
    Several candidates may be found.  If so, the names are returned as a
 | 
|
| 
2363.5.17
by Aaron Bentley
 Change separator from '/' to 'or'  | 
433  | 
    single string, separated by ' or '.
 | 
| 
2363.5.5
by Aaron Bentley
 add info.describe_format  | 
434  | 
|
435  | 
    If no matching candidate is found, "unnamed" is returned.
 | 
|
436  | 
    """
 | 
|
437  | 
candidates = []  | 
|
| 
2363.5.6
by Aaron Bentley
 Add short format description  | 
438  | 
if (branch is not None and tree is not None and  | 
439  | 
branch.bzrdir.root_transport.base !=  | 
|
440  | 
tree.bzrdir.root_transport.base):  | 
|
441  | 
branch = None  | 
|
442  | 
repository = None  | 
|
| 
2363.5.5
by Aaron Bentley
 add info.describe_format  | 
443  | 
for key in bzrdir.format_registry.keys():  | 
444  | 
format = bzrdir.format_registry.make_bzrdir(key)  | 
|
445  | 
if isinstance(format, bzrdir.BzrDirMetaFormat1):  | 
|
446  | 
if (tree and format.workingtree_format !=  | 
|
447  | 
tree._format):  | 
|
448  | 
                continue
 | 
|
449  | 
if (branch and format.get_branch_format() !=  | 
|
450  | 
branch._format):  | 
|
451  | 
                continue
 | 
|
452  | 
if (repository and format.repository_format !=  | 
|
453  | 
repository._format):  | 
|
454  | 
                continue
 | 
|
455  | 
if format.__class__ is not control._format.__class__:  | 
|
456  | 
            continue
 | 
|
457  | 
candidates.append(key)  | 
|
458  | 
if len(candidates) == 0:  | 
|
459  | 
return 'unnamed'  | 
|
460  | 
new_candidates = [c for c in candidates if c != 'default']  | 
|
461  | 
if len(new_candidates) > 0:  | 
|
462  | 
candidates = new_candidates  | 
|
| 
2363.5.6
by Aaron Bentley
 Add short format description  | 
463  | 
new_candidates = [c for c in candidates if not  | 
464  | 
bzrdir.format_registry.get_info(c).hidden]  | 
|
465  | 
if len(new_candidates) > 0:  | 
|
466  | 
candidates = new_candidates  | 
|
| 
2363.5.17
by Aaron Bentley
 Change separator from '/' to 'or'  | 
467  | 
return ' or '.join(candidates)  |