summaryrefslogtreecommitdiff
path: root/bzrlib/version_info_formats/format_python.py
diff options
context:
space:
mode:
Diffstat (limited to 'bzrlib/version_info_formats/format_python.py')
-rw-r--r--bzrlib/version_info_formats/format_python.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/bzrlib/version_info_formats/format_python.py b/bzrlib/version_info_formats/format_python.py
new file mode 100644
index 0000000..1ca9ab4
--- /dev/null
+++ b/bzrlib/version_info_formats/format_python.py
@@ -0,0 +1,107 @@
+# Copyright (C) 2006, 2009, 2011 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
+
+"""A generator which creates a python script from the current tree info"""
+
+from __future__ import absolute_import
+
+import pprint
+
+from bzrlib.revision import (
+ NULL_REVISION,
+ )
+from bzrlib.version_info_formats import (
+ create_date_str,
+ VersionInfoBuilder,
+ )
+
+
+# Header and footer for the python format
+_py_version_header = '''#!/usr/bin/env python
+"""This file is automatically generated by generate_version_info
+It uses the current working tree to determine the revision.
+So don't edit it. :)
+"""
+
+'''
+
+
+_py_version_footer = '''
+if __name__ == '__main__':
+ print 'revision: %(revno)s' % version_info
+ print 'nick: %(branch_nick)s' % version_info
+ print 'revision id: %(revision_id)s' % version_info
+'''
+
+
+class PythonVersionInfoBuilder(VersionInfoBuilder):
+ """Create a version file which is a python source module."""
+
+ def generate(self, to_file):
+ info = {'build_date':create_date_str()
+ , 'revno':None
+ , 'revision_id':None
+ , 'branch_nick':self._branch.nick
+ , 'clean':None
+ , 'date':None
+ }
+ revisions = []
+
+ revision_id = self._get_revision_id()
+ if revision_id == NULL_REVISION:
+ info['revno'] = '0'
+ else:
+ info['revno'] = self._get_revno_str(revision_id)
+ info['revision_id'] = revision_id
+ rev = self._branch.repository.get_revision(revision_id)
+ info['date'] = create_date_str(rev.timestamp, rev.timezone)
+
+ if self._check or self._include_file_revs:
+ self._extract_file_revisions()
+
+ if self._check:
+ if self._clean:
+ info['clean'] = True
+ else:
+ info['clean'] = False
+
+ info_str = pprint.pformat(info)
+ to_file.write(_py_version_header)
+ to_file.write('version_info = ')
+ to_file.write(info_str)
+ to_file.write('\n\n')
+
+ if self._include_history:
+ history = list(self._iter_revision_history())
+ revision_str = pprint.pformat(history)
+ to_file.write('revisions = ')
+ to_file.write(revision_str)
+ to_file.write('\n\n')
+ else:
+ to_file.write('revisions = {}\n\n')
+
+ if self._include_file_revs:
+ file_rev_str = pprint.pformat(self._file_revisions)
+ to_file.write('file_revisions = ')
+ to_file.write(file_rev_str)
+ to_file.write('\n\n')
+ else:
+ to_file.write('file_revisions = {}\n\n')
+
+ to_file.write(_py_version_footer)
+
+
+