diff options
Diffstat (limited to 'bzrlib/version.py')
-rw-r--r-- | bzrlib/version.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/bzrlib/version.py b/bzrlib/version.py new file mode 100644 index 0000000..6090069 --- /dev/null +++ b/bzrlib/version.py @@ -0,0 +1,107 @@ +# Copyright (C) 2006-2010 Canonical Ltd +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +"""Report on version of bzrlib""" + +from __future__ import absolute_import + +import os +import sys + +import bzrlib +from bzrlib import ( + config, + controldir, + errors, + osutils, + trace, + ) + + +def show_version(show_config=True, show_copyright=True, to_file=None): + import platform + + if to_file is None: + to_file = sys.stdout + to_file.write("Bazaar (bzr) %s\n" % bzrlib.__version__) + # is bzrlib itself in a branch? + src_tree = _get_bzr_source_tree() + if src_tree: + src_revision_id = src_tree.last_revision() + revno = src_tree.branch.revision_id_to_revno(src_revision_id) + to_file.write(" from bzr checkout %s\n" % (src_tree.basedir,)) + to_file.write(" revision: %s\n" % (revno,)) + to_file.write(" revid: %s\n" % (src_revision_id,)) + to_file.write(" branch nick: %s\n" % (src_tree.branch.nick,)) + + to_file.write(" Python interpreter: ") + # show path to python interpreter + # (bzr.exe use python interpreter from pythonXY.dll + # but sys.executable point to bzr.exe itself) + # however, sys.frozen exists if running from bzr.exe + # see http://www.py2exe.org/index.cgi/Py2exeEnvironment + if getattr(sys, 'frozen', None) is None: # if not bzr.exe + to_file.write(sys.executable + ' ') + else: + # pythonXY.dll + basedir = os.path.dirname(sys.executable) + python_dll = "python%d%d.dll" % sys.version_info[:2] + to_file.write(os.path.join(basedir, python_dll) + ' ') + # and now version of python interpreter + to_file.write(bzrlib._format_version_tuple(sys.version_info)) + to_file.write('\n') + + to_file.write(" Python standard library:" + ' ') + to_file.write(os.path.dirname(os.__file__) + '\n') + to_file.write(" Platform: %s\n" % platform.platform(aliased=1)) + to_file.write(" bzrlib: ") + if len(bzrlib.__path__) > 1: + # print repr, which is a good enough way of making it clear it's + # more than one element (eg ['/foo/bar', '/foo/bzr']) + to_file.write(repr(bzrlib.__path__) + '\n') + else: + to_file.write(bzrlib.__path__[0] + '\n') + if show_config: + config_dir = osutils.normpath(config.config_dir()) # use native slashes + if not isinstance(config_dir, unicode): + config_dir = config_dir.decode(osutils.get_user_encoding()) + to_file.write(" Bazaar configuration: %s\n" % (config_dir,)) + to_file.write(" Bazaar log file: ") + to_file.write(trace._bzr_log_filename + '\n') + if show_copyright: + to_file.write('\n') + to_file.write(bzrlib.__copyright__ + '\n') + to_file.write("http://bazaar.canonical.com/\n") + to_file.write('\n') + to_file.write("bzr comes with ABSOLUTELY NO WARRANTY. bzr is free software, and\n") + to_file.write("you may use, modify and redistribute it under the terms of the GNU\n") + to_file.write("General Public License version 2 or later.\n") + to_file.write("\nBazaar is part of the GNU Project to produce a free operating " + "system.\n") + to_file.write('\n') + + +def _get_bzr_source_tree(): + """Return the WorkingTree for bzr source, if any. + + If bzr is not being run from its working tree, returns None. + """ + try: + control = controldir.ControlDir.open_containing(__file__)[0] + return control.open_workingtree(recommend_upgrade=False) + except (errors.NotBranchError, errors.UnknownFormatError, + errors.NoWorkingTree): + return None |