bzr version-info for C/C++
Panagiotis Papadakos
papadako at csd.uoc.gr
Fri Oct 5 16:28:46 BST 2007
Hi again.
Any chance this could make it to bzr.dev?
Regards
Panagiotis Papadakos
On Thu, 4 Oct 2007, Lalo Martins wrote:
> Also spracht Lukáš Lalinský (Thu, 04 Oct 2007
> 17:54:45 +0200):
>> Here is a simple plugin that exports the basic info as preprocessor
>> macros. I haven't implemented --include-history and
>> --include-file-revisions, because I'm not sure what would be the best
>> structure for it. If somebody has an idea, I can add it and make a patch
>> against bzr from it.
>
> In the spirit of free software :-) I think this would look better (and
> run marginally faster, but that's not important) with dict interpolation.
>
> --- cut ---
> from bzrlib.version_info_formats import (
> create_date_str,
> VersionInfoBuilder,
> register_builder,
> )
>
>
> _c_version_template = '''\
> /* This file is automatitally generated by "bzr version-info"
> It uses the current working tree to determine the revision.
> So don't edit it.
> */
> #define VERSION_INFO_BRANCH_NICK "%(branch_nick)s"
> #define VERSION_INFO_BUILD_DATE "%(build_date)s"
> #define VERSION_INFO_DATE "%(date)s"
> #define VERSION_INFO_REVNO %(revno)d
> #define VERSION_INFO_REVISION_ID "%(revision_id)s"
> #define VERSION_INFO_CLEAN %(clean)d
>
> '''
>
> def encode_str(val):
> return val.replace('"', '\"')
>
>
> class CVersionInfoBuilder(VersionInfoBuilder):
> """Create a version file which is a C source module."""
>
> def generate(self, to_file):
> info = {
> 'build_date': encode_str(create_date_str()),
> 'revno': None,
> 'revision_id': None,
> 'branch_nick': encode_str(self._branch.nick),
> 'clean': -1,
> 'date': None
> }
>
> revision_id = self._get_revision_id()
> if revision_id is None:
> info['revno'] = 0
> else:
> info['revno'] = self._branch.revision_id_to_revno(revision_id)
> info['revision_id'] = encode_str(revision_id)
> rev = self._branch.repository.get_revision(revision_id)
> info['date'] = encode_str(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'] = 1
> else:
> info['clean'] = 0
>
> to_file.write(_c_version_template % info)
>
> if self._include_history:
> to_file.write('/* revisions not implemented */\n\n')
> else:
> to_file.write('/* revisions not implemented */\n\n')
>
> if self._include_file_revs:
> to_file.write('/* file_revisions not implemented */\n\n')
> else:
> to_file.write('/* file_revisions not implemented */\n\n')
>
>
> register_builder('c',
> 'bzrlib.plugins.version_info_format_c',
> 'CVersionInfoBuilder')
> --- cut ---
>
> best,
> Lalo Martins
> --
> So many of our dreams at first seem impossible,
> then they seem improbable, and then, when we
> summon the will, they soon become inevitable.
> -----
> personal: http://lalo.hystericalraisins.net/
> technical: http://www.hystericalraisins.net/
> GNU: never give up freedom http://www.gnu.org/
>
>
More information about the bazaar
mailing list