Merge lp:~songofacandy/bzr/i18n into lp:bzr

Proposed by INADA Naoki on 2011-05-04
Status: Work in progress
Proposed branch: lp:~songofacandy/bzr/i18n
Merge into: lp:bzr
Diff against target: 10619 lines (+10321/-20)
19 files modified
Makefile (+20/-0)
bzrlib/builtins.py (+10/-0)
bzrlib/commands.py (+22/-13)
bzrlib/errors.py (+16/-0)
bzrlib/export_pot.py (+250/-0)
bzrlib/help.py (+4/-2)
bzrlib/help_topics/__init__.py (+2/-1)
bzrlib/help_topics/en/debug-flags.txt (+1/-0)
bzrlib/i18n.py (+129/-0)
bzrlib/option.py (+3/-1)
bzrlib/tests/__init__.py (+2/-0)
bzrlib/tests/test_export_pot.py (+147/-0)
bzrlib/tests/test_utextwrap.py (+192/-0)
bzrlib/trace.py (+5/-1)
bzrlib/utextwrap.py (+243/-0)
po/bzr.pot (+8931/-0)
setup.py (+11/-2)
tools/build_mo.py (+125/-0)
tools/msgfmt.py (+208/-0)
To merge this branch: bzr merge lp:~songofacandy/bzr/i18n
Reviewer Review Type Date Requested Status
Vincent Ladeuil 2011-05-04 Needs Information on 2011-05-04
Review via email: mp+59890@code.launchpad.net

Description of the change

i18n implementation for bzr.

To post a comment you must log in.
lp:~songofacandy/bzr/i18n updated on 2011-05-04
5819. By Canonical.com Patch Queue Manager <email address hidden> on 2011-05-04

(jelmer) Don't load working tree implementations during 'bzr serve'. (Jelmer
 Vernooij)

5820. By Canonical.com Patch Queue Manager <email address hidden> on 2011-05-04

(jelmer) Small fixes to developer documentation. (Jonathan Riddell)

Vincent Ladeuil (vila) wrote :

Thanks for working on that !

12852 lines, you beat the record :-)

I'm afraid this makes this proposal very hard to review (lp just cut your proposal at 5.000 lines) :-/

Can you find a way to split it into several ones and use the pre-requisite branches in the mps to simplify their reviews ?

You may want to use bzr-pipeline or bzr-loom to simplify the work on your side so you can iterate on each part during the review.

A couple of remarks for the parts I was able to read:
- in bzrlib/utextwrap.py, you have tests protected by if __name == 'main', better put that in a proper file under bzrlib/tests

- in the same file you use width=70, how does that interact with th rest of bzrlib (osutils.terminal_width for example) ?

- you seem to import code from the qbzr project, I think our policy to put these kind of files under bzrlib/util, not bzrlib/extras (I'd also like a second opinion about whether this kind of copy is appropriate, IANAL, etc),

- extras/msgfmt.py doesn't specify a license at all 8-/ There I have no idea about whether we are even allowed to add this to the bzr code...

- extras/polib.py MIT license and the file says the LICENSE file is provided, again no idea about what to do with that :-(

I wonder if we are importing a lot of stuff that may be available in proper packages that we can then only requires as build dependencies.

From a higher level, we should make sure that we can use launchpad and its translation services and focus on the minimal infrastructure we need to provide.

review: Needs Information
INADA Naoki (songofacandy) wrote :

Thank you for reviewing.

>12852 lines, you beat the record :-)

9966 lines of 12852 is bzr.pot and bzr-ja.po.
These files can be ignored before i18n is merged. I'll remove these files.

> I'm afraid this makes this proposal very hard to review (lp just cut your proposal at 5.000 lines) :-/

OK, I'll split this changes to some branches. Should I make merge request for each branch?
Or the Launchpad provides any feature about handling for this situation?

= About bzrlib/utextwrap =
> - in bzrlib/utextwrap.py, you have tests protected by if __name == 'main', better put that in a proper file under bzrlib/tests
> - in the same file you use width=70, how does that interact with th rest of bzrlib (osutils.terminal_width for example) ?
I'll do these soon.

= About license and copyright. =
> - you seem to import code from the qbzr project, I think our policy to put these kind of files under bzrlib/util, not bzrlib/extras (I'd also like a second opinion about whether this kind of copy is appropriate, IANAL, etc),

extras/ directory (not in bzrlib/ directory) contains files only for building pot file.
I think 'tools/' directory is contains 3rd party tools that is required while building.
So I'll move extras/* into tools/, OK?

> - extras/msgfmt.py doesn't specify a license at all 8-/ There I have no idea about whether we are even allowed to add this to the bzr code...
Oh, that file is distributed with Python. So no license spec means it is PSF license. I'll check it and add header.

> - extras/polib.py MIT license and the file says the LICENSE file is provided, again no idea about what to do with that :-(

polib is needed by posplit.
In current workflow, bzrgettext and xgettext extracts docstring and marked strings, then posplit
splits each message into paragraph.
I think messages extracted by xgettext doesn't include long message. So, I'll add splitting feature
to bzrgettext and remove posplit and polib.

> I wonder if we are importing a lot of stuff that may be available in proper packages that we can then only requires as build dependencies.

polib is distributed in PyPI so we may be able to use it as a build dependency. But currently, I'll remove it first.
Another possible 3rd party utility is Babel. It contains many tools for i18n.

> From a higher level, we should make sure that we can use launchpad and its translation services and focus on the minimal infrastructure we need to provide.

qbzr, bzr-explorer and TortoiseBZR uses setup.py import-po command that imports from tar file exported from Launchpad.
Launchpad may be able to put po files into branch directly, but I don't know about the feature much.

lp:~songofacandy/bzr/i18n updated on 2011-05-04
5821. By INADA Naoki on 2011-05-04

Add utextwrap that is same to textwrap but supports double width characters in east asia.

5822. By INADA Naoki on 2011-05-04

bzrlib.utextwrap uses bzrlib.osutils.terminal_width() when width is not specified.

5823. By INADA Naoki on 2011-05-04

Move tests for utextwrap from the module to bzrlib.tests.

INADA Naoki (songofacandy) wrote :

> > - in bzrlib/utextwrap.py, you have tests protected by if __name == 'main',
> better put that in a proper file under bzrlib/tests
> > - in the same file you use width=70, how does that interact with th rest of
> bzrlib (osutils.terminal_width for example) ?
> I'll do these soon.
>

Done. I've request merge in:
https://code.launchpad.net/~songofacandy/bzr/i18n-utextwrap/+merge/59950

lp:~songofacandy/bzr/i18n updated on 2011-05-04
5824. By INADA Naoki on 2011-05-04

bzr help commands uses utextwrap for wrapping. (Prepare to i18n)

Vincent Ladeuil (vila) wrote :
Download full text (3.6 KiB)

> Thank you for reviewing.
>
> >12852 lines, you beat the record :-)
>
> 9966 lines of 12852 is bzr.pot and bzr-ja.po.
> These files can be ignored before i18n is merged. I'll remove these files.

Good, I think we need to find some lp i18n wizard to help us here as I have very little experience there, I think the best guy for that is David Planella, I'll try to drag him there ;)

>
> > I'm afraid this makes this proposal very hard to review (lp just cut your
> proposal at 5.000 lines) :-/
>
> OK, I'll split this changes to some branches. Should I make merge request for
> each branch?

Yup.

> Or the Launchpad provides any feature about handling for this situation?
>

A merge proposal can specify a pre-requisite branch, so building several branches on top of each other and mentioning them as pre-requisite makes the merge proposals display only the patch that each branch is proposing.

>
> = About bzrlib/utextwrap =
> > - in bzrlib/utextwrap.py, you have tests protected by if __name == 'main',
> better put that in a proper file under bzrlib/tests
> > - in the same file you use width=70, how does that interact with th rest of
> bzrlib (osutils.terminal_width for example) ?
> I'll do these soon.

Great, I've reviewed your other branch.

>
>
> = About license and copyright. =
> > - you seem to import code from the qbzr project, I think our policy to put
> these kind of files under bzrlib/util, not bzrlib/extras (I'd also like a
> second opinion about whether this kind of copy is appropriate, IANAL, etc),
>
> extras/ directory (not in bzrlib/ directory) contains files only for building
> pot file.
> I think 'tools/' directory is contains 3rd party tools that is required while
> building.
> So I'll move extras/* into tools/, OK?

Sounds far more appropriate yes, we still need to be careful about the license/copyright but it's a bit less worrying than in bzrlib itself.

>
> > - extras/msgfmt.py doesn't specify a license at all 8-/ There I have no idea
> about whether we are even allowed to add this to the bzr code...
> Oh, that file is distributed with Python. So no license spec means it is PSF
> license. I'll check it and add header.
>
> > - extras/polib.py MIT license and the file says the LICENSE file is
> provided, again no idea about what to do with that :-(
>
> polib is needed by posplit.
> In current workflow, bzrgettext and xgettext extracts docstring and marked
> strings, then posplit
> splits each message into paragraph.
> I think messages extracted by xgettext doesn't include long message. So, I'll
> add splitting feature
> to bzrgettext and remove posplit and polib.
>
> > I wonder if we are importing a lot of stuff that may be available in proper
> packages that we can then only requires as build dependencies.
>
> polib is distributed in PyPI so we may be able to use it as a build
> dependency. But currently, I'll remove it first.

Great. That's exactly the idea with multiple proposals, it makes it easier to separate the issues and progress on the ones that are not controversial while allowing discussion on the others.

> Another possible 3rd party utility is Babel. It contains many tools for i18n.
>
> > From a higher level...

Read more...

lp:~songofacandy/bzr/i18n updated on 2011-05-05
5825. By INADA Naoki on 2011-05-04

Make UTextWrapper support byte string and add tests including Python's
test_textwrap as a regression test.

5826. By INADA Naoki on 2011-05-04

Don't fill up terminal width because console may shows extra blank line.

5827. By INADA Naoki on 2011-05-04

Add test for fill.

5828. By INADA Naoki on 2011-05-04

Add two tests for fill demonstrates complicated cases. The second test fails
so needs more fixing.

5829. By INADA Naoki on 2011-05-05

Default width of UTextWrapper is also osutils.terminal_widtth() and
use osutils.default_terminal_width when it returns None.

5830. By INADA Naoki on 2011-05-05

utextwrap: Change a way to split between CJK characters.
_split() splits each double width character into a single chunk.
This way is simpler but slower.

5831. By INADA Naoki on 2011-05-05

Add some test cases.

Alexander Belchenko (bialix) wrote :

INADA Naoki пишет:
> = About license and copyright. =
>> - you seem to import code from the qbzr project, I think our policy to put these kind of files under bzrlib/util, not bzrlib/extras (I'd also like a second opinion about whether this kind of copy is appropriate, IANAL, etc),
>
> extras/ directory (not in bzrlib/ directory) contains files only for building pot file.
> I think 'tools/' directory is contains 3rd party tools that is required while building.
> So I'll move extras/* into tools/, OK?

I think tools is more appropriate for that stuff in bzr.dev

>> From a higher level, we should make sure that we can use launchpad and its translation services and focus on the minimal infrastructure we need to provide.
>
> qbzr, bzr-explorer and TortoiseBZR uses setup.py import-po command that imports from tar file exported from Launchpad.
> Launchpad may be able to put po files into branch directly, but I don't know about the feature much.

As I can say somebody already set up translations imports for
TortoiseBzr. I thought that was you.

I'm a bit lazy to play with automatic imports/exports on LP, although
those are promoted as preferred way now. But in my understanding it's
better to have separate branch for import/export and merge from it
regularly into trunk.

--
All the dude wanted was his rug back

lp:~songofacandy/bzr/i18n updated on 2011-05-05
5832. By Vincent Ladeuil on 2011-05-05

Use assert(expected, actual) style and split some tests.

5833. By Vincent Ladeuil on 2011-05-05

Use a dedicated class for 'fill' tests.

5834. By Vincent Ladeuil on 2011-05-05

Properly override test symbols in the imported test module so they are restored after the tests are run.

David Planella (dpm) wrote :

Hi Inada,

First of all, thanks for the excellent work in making bzr speak everyone's language :)

I've been asked to provide some feedback and answer any questions, so I'll focus on those rather than reviewing the actual code.

Here are a couple of things that caught my eye:

Standard i18n Tools Integration
-------------------------------

It strikes me that you seem to rewrite much of the functionality provided by gettext and other tools already. Is there a reason why you are not using something like intltool and python-distutils-extra (e.g. using the build_i18n command from p-d-e instead of writing extras/build_mo.py), which are used by most OSS Python projects implementing i18n support? Is it because of platform compatibility issues?

Why do you use the gettext() call directly instead of the more usual _()?

Why is extras/bzrgettext needed? The file is very well documented, but I'm not sure I can follow why standard gettext cannot be used. May I ask you to ellaborate on this?

The same with bzrlib/utextwrap.py, what's its purpose?

Note that I'm not arguing that you are doing anything wrong, I'm just wondering if we could make use of more standard practices in the internationalization world.

Integration with Launchpad
--------------------------

It just makes sense to have bzr use all the Launchpad integration features regarding translations. For this, at the code level the only thing that is needed is to:

* Have a tool in the build system that can extract translatable strings from the code and merge them into a bzr.pot template file
* Have the right source tree layout:

po/bzr.pot
po/jp.po
po/de.po
po/pt_BR.po
...

Where translations are in the same directory as the .pot file and are named with iso 639 2-letter or 3-letter codes, with an optional country code name.

The rest can be done at the Launchpad project level and it's up to the bzr project admins:

* Set up the translation focus and permissions: my recommendation would be Restricted or Structured, assigned to the Launchpad Translators group
* Set up automatic translation imports, so that on every commit of the bzr.pot file translations are exposed in Launchpad
* Set up automatic exports, so that translations can be exported to a branch of your choice automatically (currently daily). My recommendation would be to use the same branch for imports and exports, so that the manual intervention in managing translations is reduced to 0 in this aspect.

Alexander Belchenko (bialix) wrote :

David Planella пишет:

David, please participate in that discussion too:
https://lists.ubuntu.com/archives/bazaar/2011q2/072452.html

--
All the dude wanted was his rug back

Alexander Belchenko (bialix) wrote :
Download full text (3.6 KiB)

David Planella пишет:
> I've been asked to provide some feedback and answer any questions, so I'll focus on those rather than reviewing the actual code.
>
> Here are a couple of things that caught my eye:
>
> Standard i18n Tools Integration
> -------------------------------
>
> It strikes me that you seem to rewrite much of the functionality provided by gettext and other tools already.
 > Is there a reason why you are not using something like intltool

What's intltool? That's one: https://launchpad.net/intltool ?
Is it work on Windows? Mac?

> and python-distutils-extra (e.g. using the build_i18n command from p-d-e instead of writing extras/build_mo.py),
> which are used by most OSS Python projects implementing i18n support? Is it because of platform compatibility issues?

What is restrictions of the build_i18n? Can it be extended/customized?

> Why do you use the gettext() call directly instead of the more usual _()?

Because _ has special meaning in PDB. Why does it matter?

> Why is extras/bzrgettext needed?
 > The file is very well documented, but I'm not sure I can follow
 > why standard gettext cannot be used.

What is standard gettext? xgettext? This one is unable to extract
docstrings without wrapping them into gettext() calls.

> May I ask you to ellaborate on this?
>
> The same with bzrlib/utextwrap.py, what's its purpose?

This is one is required to deal with multibyte characters. Some
(Japanese) unicode characters are actually require 2 positions on the
screen, so if you need to wrap long string using the width of the
terminal then you need to take care of multibyte characters, because
len(string) != len(visible characters).

> Note that I'm not arguing that you are doing anything wrong,
 > I'm just wondering if we could make use of more standard practices
 > in the internationalization world.

Can you provide some guidelines or hints/tips then?

> Integration with Launchpad
> --------------------------
>
> It just makes sense to have bzr use all the Launchpad integration
 > features regarding translations.
 > For this, at the code level the only thing that is needed is to:
>
> * Have a tool in the build system that can extract translatable strings from the code and merge them into a bzr.pot template file
> * Have the right source tree layout:
>
> po/bzr.pot
> po/jp.po
> po/de.po
> po/pt_BR.po
> ...
>
> Where translations are in the same directory as the .pot file and are named with iso 639 2-letter or 3-letter codes, with an optional country code name.
>
> The rest can be done at the Launchpad project level and it's up to the bzr project admins:
>
> * Set up the translation focus and permissions: my recommendation would be Restricted or Structured, assigned to the Launchpad Translators group
> * Set up automatic translation imports, so that on every commit of the bzr.pot file translations are exposed in Launchpad
> * Set up automatic exports, so that translations can be exported to a branch of your choice automatically (currently daily). My recommendation would be to use the same branch for imports and exports, so that the manual intervention in managing translations is reduced to 0 in this aspect.

Can you te...

Read more...

INADA Naoki (songofacandy) wrote :

I'm sorry about misreading.
I'm afraid deleting this merge request deletes discussion. So I leave
this merge request.

My work is split to some branches and this branch is abandoned.

1. TextWrap supporting CJK.
lp:~songofacandy/bzr/i18n-utextwrap
https://code.launchpad.net/~songofacandy/bzr/i18n-utextwrap/+merge/59950

2. message extraction.
lp:~songofacandy/bzr/i18n-msgextract
https://code.launchpad.net/~songofacandy/bzr/i18n-msgextract/+merge/60033

3. Building message object.
lp:~songofacandy/bzr/i18n-msgfmt
(merge request will be issued when message extraction is merged)

And future:
* l10n implementation of command help
* l10n implemen of Error Message

Discussed on ML:
* How to translate help topics.

Please join us and make bzr-2.4 better for non English speakers.

lp:~songofacandy/bzr/i18n updated on 2011-05-10
5835. By Martin Packman on 2011-05-07

Cope with lack of TextWrapper.drop_whitespace before Python 2.6

5836. By INADA Naoki on 2011-05-08

Split calculating width of char logic into separated function.

5837. By INADA Naoki on 2011-05-08

Drop supporting byte string in private functions.

5838. By INADA Naoki on 2011-05-08

Add copyright for some function.

5839. By INADA Naoki on 2011-05-08

Add keyword parameter 'ambiguous_width' that specifies width for character
when unicodedata.east_asian_width(c)=='A'.

5840. By INADA Naoki on 2011-05-08

Stop using utextwrap until i18n is implemented.

5841. By INADA Naoki on 2011-05-08

Change default value of ambiguous_width from 2 to 1.

5842. By INADA Naoki on 2011-05-10

Add document of some limitations in docstring.

David Planella (dpm) wrote :
Download full text (6.3 KiB)

> David Planella пишет:
> > I've been asked to provide some feedback and answer any questions, so I'll
> focus on those rather than reviewing the actual code.
> >
> > Here are a couple of things that caught my eye:
> >
> > Standard i18n Tools Integration
> > -------------------------------
> >
> > It strikes me that you seem to rewrite much of the functionality provided by
> gettext and other tools already.
> > Is there a reason why you are not using something like intltool
>
> What's intltool? That's one: https://launchpad.net/intltool ?
> Is it work on Windows? Mac?
>

Yeah, that's intltool. Intltool is a higher level tool that adds functionality to gettext by allowing the extraction of translatable strings from a variety of file formats, and provides some extra functionality. It is a standard tool used for many translatable projects and a dependency from python-distutils-extra.

It's a perl script, so it should run on any platform where perl can be run.

> > and python-distutils-extra (e.g. using the build_i18n command from p-d-e
> instead of writing extras/build_mo.py),
> > which are used by most OSS Python projects implementing i18n support? Is it
> because of platform compatibility issues?
>
> What is restrictions of the build_i18n? Can it be extended/customized?
>

I'm not sure I understand the question on restrictions, but in any case, here's the code:

http://bazaar.launchpad.net/~python-distutils-extra-hackers/python-distutils-extra/debian/view/head:/DistUtilsExtra/auto.py#L505

> > Why do you use the gettext() call directly instead of the more usual _()?
>
> Because _ has special meaning in PDB. Why does it matter?
>

This is not a real issue, just a cosmetic one.

The feedback I get is that developers prefer writing the shorter _() to a translatable message than the longer and perhaps less readable gettext(). This has been the standard practice for nearly all localizable Open Source projects I've seen. The only exception that I can think of off the top of my head is bzr-gtk, where i18n() is used.

Why is is an issue in bzr but not in all other Python projects that make use of gettext?

> > Why is extras/bzrgettext needed?
> > The file is very well documented, but I'm not sure I can follow
> > why standard gettext cannot be used.
>
> What is standard gettext? xgettext? This one is unable to extract
> docstrings without wrapping them into gettext() calls.
>

Sorry, I should have been a bit clearer. By standard gettext I mean bot the gettext API and the set of developer tools provided by the gettext package. xgettext is part of the gettext package.

Could you tell me more about how are docstrings used in the bzr context and why should they be translatable? (I'm not against this, the more translatable the better, but I'd suggest sticking to standard tools from now and focus on translating the strings that are exposed to users first, e.g. the command line).

> > May I ask you to ellaborate on this?
> >
> > The same with bzrlib/utextwrap.py, what's its purpose?
>
> This is one is required to deal with multibyte characters. Some
> (Japanese) unicode characters are actually require 2 positions on the
> screen, so if you need t...

Read more...

John A Meinel (jameinel) wrote :

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

...
> This is not a real issue, just a cosmetic one.
>
> The feedback I get is that developers prefer writing the shorter _() to a translatable message than the longer and perhaps less readable gettext(). This has been the standard practice for nearly all localizable Open Source projects I've seen. The only exception that I can think of off the top of my head is bzr-gtk, where i18n() is used.
>
> Why is is an issue in bzr but not in all other Python projects that make use of gettext?

Because developers (such as myself) have a higher tendency to break into
the debugger in the middle of an active session (because we trap SIGQUIT
to do just that), and once you have done so _() breaks all future
running of the program because the builtin _() gets overridden.

Going further, I don't think bzr directly gains by putting i18n around
the code base. We generally *don't* want to be handing around translated
strings. We just want to translate at the point we display to the user
(as much as possible).

Also, why write _() in your code everywhere when there are very
deterministic locations where translatable strings reside. (Such as
Command.__doc__.)

John
=:->
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk3JJdsACgkQJdeBCYSNAAO4HgCgw+pdJVwBXHySlLUIaPCTSYBt
u8QAn3jS+r2QP7di9ZM+RmTmZX5b7jey
=9APd
-----END PGP SIGNATURE-----

Andrew Bennetts (spiv) wrote :

John A Meinel wrote:
[…]
> > This is not a real issue, just a cosmetic one.
> >
> > The feedback I get is that developers prefer writing the shorter _() to a
> > translatable message than the longer and perhaps less readable gettext().
> > This has been the standard practice for nearly all localizable Open Source
> > projects I've seen. The only exception that I can think of off the top of my
> > head is bzr-gtk, where i18n() is used.
> >
> > Why is is an issue in bzr but not in all other Python projects that make use
> > of gettext?
>
>
> Because developers (such as myself) have a higher tendency to break into
> the debugger in the middle of an active session (because we trap SIGQUIT
> to do just that), and once you have done so _() breaks all future
> running of the program because the builtin _() gets overridden.

That's really a bug in pdb, though. It might be possible to monkey-patch

lp:~songofacandy/bzr/i18n updated on 2011-05-14
5843. By INADA Naoki on 2011-05-10

merge i18n-msgextract

5844. By INADA Naoki on 2011-05-10

merge i18n-msgfmt

5845. By INADA Naoki on 2011-05-10

Add first version of pot

5846. By INADA Naoki on 2011-05-12

merge i18n-msgextract.

5847. By INADA Naoki on 2011-05-12

Update pot

5848. By INADA Naoki on 2011-05-12

merge some files from lp:~songofacandy/bzr/i18n

5849. By INADA Naoki on 2011-05-12

Fix import

5850. By INADA Naoki on 2011-05-12

Cleanup

5851. By INADA Naoki on 2011-05-12

Fix line of command help in pot.

5852. By INADA Naoki on 2011-05-12

Fix lineno of error formats in bzr.pot.

5853. By INADA Naoki on 2011-05-12

Update pot

5854. By INADA Naoki on 2011-05-14

merge i18n-utextwrap

5855. By INADA Naoki on 2011-05-14

Enable extracting messages from help topics.

5856. By INADA Naoki on 2011-05-14

Update pot file.

5857. By INADA Naoki on 2011-05-14

Translate help topics.

5858. By INADA Naoki on 2011-05-14

Disable too verbose mutter.

5859. By INADA Naoki on 2011-05-14

Don't skip help topics that is not found in bzrlib.help_topics.__init__.
This allows to export help topics registered from plugins.

5860. By INADA Naoki on 2011-05-14

Update pot

Unmerged revisions

5860. By INADA Naoki on 2011-05-14

Update pot

5859. By INADA Naoki on 2011-05-14

Don't skip help topics that is not found in bzrlib.help_topics.__init__.
This allows to export help topics registered from plugins.

5858. By INADA Naoki on 2011-05-14

Disable too verbose mutter.

5857. By INADA Naoki on 2011-05-14

Translate help topics.

5856. By INADA Naoki on 2011-05-14

Update pot file.

5855. By INADA Naoki on 2011-05-14

Enable extracting messages from help topics.

5854. By INADA Naoki on 2011-05-14

merge i18n-utextwrap

5853. By INADA Naoki on 2011-05-12

Update pot

5852. By INADA Naoki on 2011-05-12

Fix lineno of error formats in bzr.pot.

5851. By INADA Naoki on 2011-05-12

Fix line of command help in pot.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2011-04-18 00:44:08 +0000
3+++ Makefile 2011-05-14 03:14:26 +0000
4@@ -420,6 +420,26 @@
5 $(PYTHON) tools/win32/ostools.py remove dist
6
7
8+# i18n targets
9+
10+.PHONY: update-pot po/bzr.pot
11+update-pot: po/bzr.pot
12+
13+TRANSLATABLE_PYFILES:=$(shell find bzrlib -name '*.py' \
14+ | grep -v 'bzrlib/tests/' \
15+ | grep -v 'bzrlib/doc' \
16+ )
17+
18+po/bzr.pot: $(PYFILES) $(DOCFILES)
19+ BZR_PLUGIN_PATH='-site' $(PYTHON) ./bzr export-pot > po/bzr.pot
20+ echo $(TRANSLATABLE_PYFILES) | xargs \
21+ xgettext --package-name "bzr" \
22+ --msgid-bugs-address "<bazaar@canonical.com>" \
23+ --copyright-holder "Canonical" \
24+ --from-code ISO-8859-1 --join --sort-by-file --add-comments=i18n: \
25+ -d bzr -p po -o bzr.pot
26+
27+
28 ### Packaging Targets ###
29
30 .PHONY: dist check-dist-tarball
31
32=== modified file 'bzrlib/builtins.py'
33--- bzrlib/builtins.py 2011-05-03 13:53:46 +0000
34+++ bzrlib/builtins.py 2011-05-14 03:14:26 +0000
35@@ -6154,6 +6154,16 @@
36 self.outf.write('%s %s\n' % (path, location))
37
38
39+class cmd_export_pot(Command):
40+ __doc__ = """Export command helps and error messages in po format."""
41+
42+ hidden = True
43+
44+ def run(self):
45+ from bzrlib.export_pot import export_pot
46+ export_pot(self.outf)
47+
48+
49 def _register_lazy_builtins():
50 # register lazy builtins from other modules; called at startup and should
51 # be only called once.
52
53=== modified file 'bzrlib/commands.py'
54--- bzrlib/commands.py 2011-04-19 04:37:48 +0000
55+++ bzrlib/commands.py 2011-05-14 03:14:26 +0000
56@@ -41,6 +41,12 @@
57 trace,
58 ui,
59 )
60+from bzrlib.i18n import (
61+ gettext,
62+ N_,
63+ install,
64+ install_zzz,
65+ )
66 """)
67
68 from bzrlib.hooks import Hooks
69@@ -507,11 +513,11 @@
70
71 # The header is the purpose and usage
72 result = ""
73- result += ':Purpose: %s\n' % purpose
74+ result += ':%s: %s\n' % (gettext('Purpose'), purpose)
75 if usage.find('\n') >= 0:
76- result += ':Usage:\n%s\n' % usage
77+ result += ':%s:\n%s\n' % (gettext('Usage'), usage)
78 else:
79- result += ':Usage: %s\n' % usage
80+ result += ':%s: %s\n' % (gettext('Usage'), usage)
81 result += '\n'
82
83 # Add the options
84@@ -527,11 +533,9 @@
85 # block.
86 if not plain and options.find(' --1.9 ') != -1:
87 options = options.replace(' format:\n', ' format::\n\n', 1)
88- if options.startswith('Options:'):
89- result += ':' + options
90- elif options.startswith('options:'):
91- # Python 2.4 version of optparse
92- result += ':Options:' + options[len('options:'):]
93+ if options.startswith('Options:') or options.startswith('options:'):
94+ # Python 2.4 version of optparse uses 'options'.
95+ result += ':%s:%s' % (gettext('Options'), options[len('options:'):])
96 else:
97 result += options
98 result += '\n'
99@@ -542,7 +546,7 @@
100 if sections.has_key(None):
101 text = sections.pop(None)
102 text = '\n '.join(text.splitlines())
103- result += ':%s:\n %s\n\n' % ('Description',text)
104+ result += ':%s:\n %s\n\n' % (gettext('Description'),text)
105
106 # Add the custom sections (e.g. Examples). Note that there's no need
107 # to indent these as they must be indented already in the source.
108@@ -557,7 +561,7 @@
109
110 # Add the aliases, source (plug-in) and see also links, if any
111 if self.aliases:
112- result += ':Aliases: '
113+ result += ':%s: ' % gettext('Aliases')
114 result += ', '.join(self.aliases) + '\n'
115 plugin_name = self.plugin_name()
116 if plugin_name is not None:
117@@ -576,7 +580,7 @@
118 link_text = ":doc:`%s <%s-help>`" % (item, item)
119 see_also_links.append(link_text)
120 see_also = see_also_links
121- result += ':See also: '
122+ result += ':%s: ' % gettext('See also')
123 result += ', '.join(see_also) + '\n'
124
125 # If this will be rendered as plain text, convert it
126@@ -667,7 +671,8 @@
127
128 # Process the standard options
129 if 'help' in opts: # e.g. bzr add --help
130- sys.stdout.write(self.get_help_text())
131+ self._setup_outf()
132+ self.outf.write(self.get_help_text())
133 return 0
134 if 'usage' in opts: # e.g. bzr add --usage
135 sys.stdout.write(self.get_help_text(verbose=False))
136@@ -755,7 +760,7 @@
137 from inspect import getdoc
138 if self.__doc__ is Command.__doc__:
139 return None
140- return getdoc(self)
141+ return gettext(getdoc(self))
142
143 def name(self):
144 """Return the canonical name for this command.
145@@ -1088,6 +1093,10 @@
146 i += 1
147
148 debug.set_debug_flags_from_config()
149+ if 'i18n' in debug.debug_flags:
150+ install_zzz()
151+ else:
152+ install()
153
154 if not opt_no_plugins:
155 load_plugins()
156
157=== modified file 'bzrlib/errors.py'
158--- bzrlib/errors.py 2011-05-08 12:42:43 +0000
159+++ bzrlib/errors.py 2011-05-14 03:14:26 +0000
160@@ -18,6 +18,7 @@
161 """
162
163 from bzrlib import (
164+ i18n,
165 osutils,
166 symbol_versioning,
167 )
168@@ -93,6 +94,21 @@
169 for key, value in kwds.items():
170 setattr(self, key, value)
171
172+ def i18n(self):
173+ """Returns translated message in user encoding"""
174+ try:
175+ fmt = self._get_format_string()
176+ if fmt:
177+ fmt = i18n.gettext(fmt)
178+ return fmt % dict(self.__dict__)
179+ except (AttributeError, TypeError, NameError, ValueError, KeyError), e:
180+ return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \
181+ % (self.__class__.__name__,
182+ self.__dict__,
183+ getattr(self, '_fmt', None),
184+ e)
185+
186+
187 def _format(self):
188 s = getattr(self, '_preformatted_string', None)
189 if s is not None:
190
191=== added file 'bzrlib/export_pot.py'
192--- bzrlib/export_pot.py 1970-01-01 00:00:00 +0000
193+++ bzrlib/export_pot.py 2011-05-14 03:14:26 +0000
194@@ -0,0 +1,250 @@
195+# Copyright (C) 2011 Canonical Ltd
196+#
197+# This program is free software; you can redistribute it and/or modify
198+# it under the terms of the GNU General Public License as published by
199+# the Free Software Foundation; either version 2 of the License, or
200+# (at your option) any later version.
201+#
202+# This program is distributed in the hope that it will be useful,
203+# but WITHOUT ANY WARRANTY; without even the implied warranty of
204+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
205+# GNU General Public License for more details.
206+#
207+# You should have received a copy of the GNU General Public License
208+# along with this program; if not, write to the Free Software
209+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
210+
211+# The normalize function is taken from pygettext which is distributed
212+# with Python under the Python License, which is GPL compatible.
213+
214+"""Extract docstrings from Bazaar commands.
215+"""
216+
217+import inspect
218+import os
219+
220+from bzrlib import (
221+ commands as _mod_commands,
222+ errors,
223+ help_topics,
224+ plugin,
225+ )
226+from bzrlib.trace import (
227+ mutter,
228+ note,
229+ )
230+
231+
232+def _escape(s):
233+ s = (s.replace('\\', '\\\\')
234+ .replace('\n', '\\n')
235+ .replace('\r', '\\r')
236+ .replace('\t', '\\t')
237+ .replace('"', '\\"')
238+ )
239+ return s
240+
241+def _normalize(s):
242+ # This converts the various Python string types into a format that
243+ # is appropriate for .po files, namely much closer to C style.
244+ lines = s.split('\n')
245+ if len(lines) == 1:
246+ s = '"' + _escape(s) + '"'
247+ else:
248+ if not lines[-1]:
249+ del lines[-1]
250+ lines[-1] = lines[-1] + '\n'
251+ lines = map(_escape, lines)
252+ lineterm = '\\n"\n"'
253+ s = '""\n"' + lineterm.join(lines) + '"'
254+ return s
255+
256+
257+_FOUND_MSGID = None # set by entry function.
258+
259+def _poentry(outf, path, lineno, s, comment=None):
260+ if s in _FOUND_MSGID:
261+ return
262+ _FOUND_MSGID.add(s)
263+ if comment is None:
264+ comment = ''
265+ else:
266+ comment = "# %s\n" % comment
267+ print >>outf, ('#: %s:%d\n' % (path, lineno) +
268+ comment+
269+ 'msgid %s\n' % _normalize(s) +
270+ 'msgstr ""\n')
271+
272+def _poentry_per_paragraph(outf, path, lineno, msgid):
273+ # TODO: How to split long help?
274+ paragraphs = msgid.split('\n\n')
275+ for p in paragraphs:
276+ _poentry(outf, path, lineno, p)
277+ lineno += p.count('\n') + 2
278+
279+_LAST_CACHE = _LAST_CACHED_SRC = None
280+
281+def _offsets_of_literal(src):
282+ global _LAST_CACHE, _LAST_CACHED_SRC
283+ if src == _LAST_CACHED_SRC:
284+ return _LAST_CACHE.copy()
285+
286+ import ast
287+ root = ast.parse(src)
288+ offsets = {}
289+ for node in ast.walk(root):
290+ if not isinstance(node, ast.Str):
291+ continue
292+ offsets[node.s] = node.lineno - node.s.count('\n')
293+
294+ _LAST_CACHED_SRC = src
295+ _LAST_CACHE = offsets.copy()
296+ return offsets
297+
298+def _standard_options(outf):
299+ from bzrlib.option import Option
300+ src = inspect.findsource(Option)[0]
301+ src = ''.join(src)
302+ path = 'bzrlib/option.py'
303+ offsets = _offsets_of_literal(src)
304+
305+ for name in sorted(Option.OPTIONS.keys()):
306+ opt = Option.OPTIONS[name]
307+ if getattr(opt, 'hidden', False):
308+ continue
309+ if getattr(opt, 'title', None):
310+ lineno = offsets.get(opt.title, 9999)
311+ if lineno == 9999:
312+ note("%r is not found in bzrlib/option.py" % opt.title)
313+ _poentry(outf, path, lineno, opt.title,
314+ 'title of %r option' % name)
315+ if getattr(opt, 'help', None):
316+ lineno = offsets.get(opt.help, 9999)
317+ if lineno == 9999:
318+ note("%r is not found in bzrlib/option.py" % opt.help)
319+ _poentry(outf, path, lineno, opt.help,
320+ 'help of %r option' % name)
321+
322+def _command_options(outf, path, cmd):
323+ src, default_lineno = inspect.findsource(cmd.__class__)
324+ offsets = _offsets_of_literal(''.join(src))
325+ for opt in cmd.takes_options:
326+ if isinstance(opt, str):
327+ continue
328+ if getattr(opt, 'hidden', False):
329+ continue
330+ name = opt.name
331+ if getattr(opt, 'title', None):
332+ lineno = offsets.get(opt.title, default_lineno)
333+ _poentry(outf, path, lineno, opt.title,
334+ 'title of %r option of %r command' % (name, cmd.name()))
335+ if getattr(opt, 'help', None):
336+ lineno = offsets.get(opt.help, default_lineno)
337+ _poentry(outf, path, lineno, opt.help,
338+ 'help of %r option of %r command' % (name, cmd.name()))
339+
340+
341+def _write_command_help(outf, cmd_name, cmd):
342+ path = inspect.getfile(cmd.__class__)
343+ if path.endswith('.pyc'):
344+ path = path[:-1]
345+ path = os.path.relpath(path)
346+ src, lineno = inspect.findsource(cmd.__class__)
347+ offsets = _offsets_of_literal(''.join(src))
348+ lineno = offsets[cmd.__doc__]
349+ doc = inspect.getdoc(cmd)
350+
351+ _poentry_per_paragraph(outf, path, lineno, doc)
352+ _command_options(outf, path, cmd)
353+
354+def _command_helps(outf):
355+ """Extract docstrings from path.
356+
357+ This respects the Bazaar cmdtable/table convention and will
358+ only extract docstrings from functions mentioned in these tables.
359+ """
360+ from glob import glob
361+
362+ # builtin commands
363+ for cmd_name in _mod_commands.builtin_command_names():
364+ command = _mod_commands.get_cmd_object(cmd_name, False)
365+ if command.hidden:
366+ continue
367+ note("Exporting messages from builtin command: %s", cmd_name)
368+ _write_command_help(outf, cmd_name, command)
369+
370+ plugin_path = plugin.get_core_plugin_path()
371+ core_plugins = glob(plugin_path + '/*/__init__.py')
372+ core_plugins = [os.path.basename(os.path.dirname(p))
373+ for p in core_plugins]
374+ # core plugins
375+ for cmd_name in _mod_commands.plugin_command_names():
376+ command = _mod_commands.get_cmd_object(cmd_name, False)
377+ if command.hidden:
378+ continue
379+ if command.plugin_name() not in core_plugins:
380+ # skip non-core plugins
381+ # TODO: Support extracting from third party plugins.
382+ continue
383+ note("Exporting messages from plugin command: %s in %s",
384+ cmd_name, command.plugin_name())
385+ _write_command_help(outf, cmd_name, command)
386+
387+
388+def _error_messages(outf):
389+ """Extract fmt string from bzrlib.errors."""
390+ path = errors.__file__
391+ if path.endswith('.pyc'):
392+ path = path[:-1]
393+ offsets = _offsets_of_literal(open(path).read())
394+
395+ base_klass = errors.BzrError
396+ for name in dir(errors):
397+ klass = getattr(errors, name)
398+ if not inspect.isclass(klass):
399+ continue
400+ if not issubclass(klass, base_klass):
401+ continue
402+ if klass is base_klass:
403+ continue
404+ if klass.internal_error:
405+ continue
406+ fmt = getattr(klass, "_fmt", None)
407+ if fmt:
408+ note("Exporting message from error: %s", name)
409+ _poentry(outf, 'bzrlib/errors.py',
410+ offsets.get(fmt, 9999), fmt)
411+
412+def _help_topics(outf):
413+ topic_registry = help_topics.topic_registry
414+ offsets = _offsets_of_literal(inspect.getsource(help_topics))
415+
416+ for key in topic_registry.keys():
417+ summary = topic_registry.get_summary(key)
418+ if summary is not None:
419+ lineno = offsets.get(summary, 9999)
420+ _poentry(outf, 'bzrlib/help_topics/__init__.py',
421+ lineno, summary)
422+
423+ doc = topic_registry.get(key)
424+ if isinstance(doc, basestring):
425+ lineno = offsets.get(doc, 9999)
426+ _poentry_per_paragraph(
427+ outf,
428+ 'bzrlib/help_topics/__init__.py', lineno,
429+ doc)
430+ elif doc == help_topics._load_from_file:
431+ _poentry_per_paragraph(
432+ outf,
433+ 'bzrlib/help_topics/en/%s.txt' % (key,), 1,
434+ topic_registry.get_detail(key)
435+ )
436+
437+
438+def export_pot(outf):
439+ global _FOUND_MSGID
440+ _FOUND_MSGID = set()
441+ _standard_options(outf)
442+ _command_helps(outf)
443+ _error_messages(outf)
444+ _help_topics(outf)
445
446=== modified file 'bzrlib/help.py'
447--- bzrlib/help.py 2010-05-26 07:19:50 +0000
448+++ bzrlib/help.py 2011-05-14 03:14:26 +0000
449@@ -22,7 +22,6 @@
450 # TODO: `help commands --all` should show hidden commands
451
452 import sys
453-import textwrap
454
455 from bzrlib import (
456 commands as _mod_commands,
457@@ -30,8 +29,11 @@
458 help_topics,
459 osutils,
460 plugin,
461+ utextwrap,
462 )
463
464+from bzrlib.i18n import gettext
465+
466
467 def help(topic=None, outfile=None):
468 """Write the help for the specific topic to outfile"""
469@@ -96,7 +98,7 @@
470 else:
471 firstline = ''
472 helpstring = '%-*s %s%s' % (max_name, cmd_name, firstline, plugin_name)
473- lines = textwrap.wrap(
474+ lines = utextwrap.wrap(
475 helpstring, subsequent_indent=indent,
476 width=width,
477 break_long_words=False)
478
479=== modified file 'bzrlib/help_topics/__init__.py'
480--- bzrlib/help_topics/__init__.py 2010-11-06 10:55:58 +0000
481+++ bzrlib/help_topics/__init__.py 2011-05-14 03:14:26 +0000
482@@ -863,7 +863,8 @@
483 :param plain: if False, raw help (reStructuredText) is
484 returned instead of plain text.
485 """
486- result = topic_registry.get_detail(self.topic)
487+ from bzrlib.i18n import gettext
488+ result = gettext(topic_registry.get_detail(self.topic))
489 # there is code duplicated here and in bzrlib/plugin.py's
490 # matching Topic code. This should probably be factored in
491 # to a helper function and a common base class.
492
493=== modified file 'bzrlib/help_topics/en/debug-flags.txt'
494--- bzrlib/help_topics/en/debug-flags.txt 2010-10-06 03:20:28 +0000
495+++ bzrlib/help_topics/en/debug-flags.txt 2011-05-14 03:14:26 +0000
496@@ -21,6 +21,7 @@
497 -Dhpssdetail More hpss details.
498 -Dhpssvfs Traceback on vfs access to Remote objects.
499 -Dhttp Trace http connections, requests and responses.
500+-Di18n Use "zz{{msg}}" for translated message.
501 -Dindex Trace major index operations.
502 -Dknit Trace knit operations.
503 -Dlock Trace when lockdir locks are taken or released.
504
505=== added file 'bzrlib/i18n.py'
506--- bzrlib/i18n.py 1970-01-01 00:00:00 +0000
507+++ bzrlib/i18n.py 2011-05-14 03:14:26 +0000
508@@ -0,0 +1,129 @@
509+# -*- coding: utf-8 -*-
510+#
511+# Copyright (C) 2007 Lukáš Lalinský <lalinsky@gmail.com>
512+# Copyright (C) 2007,2009 Alexander Belchenko <bialix@ukr.net>
513+# Copyright (C) 2011 Canonical Ltd
514+#
515+# This program is free software; you can redistribute it and/or
516+# modify it under the terms of the GNU General Public License
517+# as published by the Free Software Foundation; either version 2
518+# of the License, or (at your option) any later version.
519+#
520+# This program is distributed in the hope that it will be useful,
521+# but WITHOUT ANY WARRANTY; without even the implied warranty of
522+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
523+# GNU General Public License for more details.
524+#
525+# You should have received a copy of the GNU General Public License
526+# along with this program; if not, write to the Free Software
527+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
528+
529+# This module is copied from Bazaar Explorer and modified for bzr.
530+
531+"""i18n and l10n support for Bazaar."""
532+
533+import gettext as _gettext
534+import os
535+import sys
536+
537+_translation = _null_translation = _gettext.NullTranslations()
538+
539+
540+def install():
541+ global _translation
542+ get_current_locale()
543+ _translation = _gettext.translation(
544+ 'bzr', localedir=_get_locale_dir(), fallback=True)
545+
546+def uninstall():
547+ global _translation
548+ _translation = _null_translation
549+
550+
551+def _get_locale_dir():
552+ if hasattr(sys, 'frozen'):
553+ base = os.path.dirname(
554+ unicode(sys.executable, sys.getfilesystemencoding()))
555+ return os.path.join(base, u'locale')
556+ else:
557+ base = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
558+ return os.path.realpath(os.path.join(base, u'locale'))
559+
560+
561+def _check_win32_locale():
562+ for i in ('LANGUAGE','LC_ALL','LC_MESSAGES','LANG'):
563+ if os.environ.get(i):
564+ break
565+ else:
566+ lang = None
567+ import locale
568+ try:
569+ import ctypes
570+ except ImportError:
571+ # use only user's default locale
572+ lang = locale.getdefaultlocale()[0]
573+ else:
574+ # using ctypes to determine all locales
575+ lcid_user = ctypes.windll.kernel32.GetUserDefaultLCID()
576+ lcid_system = ctypes.windll.kernel32.GetSystemDefaultLCID()
577+ if lcid_user != lcid_system:
578+ lcid = [lcid_user, lcid_system]
579+ else:
580+ lcid = [lcid_user]
581+ lang = [locale.windows_locale.get(i) for i in lcid]
582+ lang = ':'.join([i for i in lang if i])
583+ # set lang code for gettext
584+ if lang:
585+ os.environ['LANGUAGE'] = lang
586+
587+
588+def get_current_locale():
589+ if not os.environ.get('LANGUAGE'):
590+ from bzrlib import config
591+ lang = config.GlobalConfig().get_user_option('language')
592+ if lang:
593+ os.environ['LANGUAGE'] = lang
594+ return lang
595+ if sys.platform == 'win32':
596+ _check_win32_locale()
597+ for i in ('LANGUAGE','LC_ALL','LC_MESSAGES','LANG'):
598+ lang = os.environ.get(i)
599+ if lang:
600+ return lang
601+ return None
602+
603+# special zzz translation for debugging i18n stuff
604+class _ZzzTranslations(object):
605+
606+ def zzz(self, s):
607+ return 'zz{{%s}}' % s
608+
609+ def ugettext(self, s):
610+ return self.zzz(_null_translation.ugettext(s))
611+
612+ def ungettext(self, s, p, n):
613+ return self.zzz(_null_translation.ungettext(s, p, n))
614+
615+def install_zzz():
616+ global _translation
617+ _translation = _ZzzTranslations()
618+
619+def gettext(message):
620+ """Translate message.
621+ Returns translated message as unicode."""
622+ paragraphs = message.split(u'\n\n')
623+ ugettext = _translation.ugettext
624+ # Be careful not to translate the empty string -- it holds the
625+ # meta data of the .po file.
626+ return u'\n\n'.join([ugettext(p) if p else u'' for p in paragraphs])
627+
628+def ngettext(s, p, n):
629+ return gettext(s if n == 1 else p)
630+
631+def N_(s):
632+ """Pass through function.
633+
634+ This function is used to mark the string that may be translated later.
635+ """
636+ return s
637+
638
639=== added directory 'bzrlib/locale'
640=== modified file 'bzrlib/option.py'
641--- bzrlib/option.py 2011-01-14 05:14:04 +0000
642+++ bzrlib/option.py 2011-05-14 03:14:26 +0000
643@@ -205,13 +205,14 @@
644
645 def add_option(self, parser, short_name):
646 """Add this option to an Optparse parser"""
647+ from bzrlib.i18n import gettext
648 option_strings = ['--%s' % self.name]
649 if short_name is not None:
650 option_strings.append('-%s' % short_name)
651 if self.hidden:
652 help = optparse.SUPPRESS_HELP
653 else:
654- help = self.help
655+ help = gettext(self.help)
656 optargfn = self.type
657 if optargfn is None:
658 parser.add_option(action='callback',
659@@ -428,6 +429,7 @@
660
661 def get_optparser(options):
662 """Generate an optparse parser for bzrlib-style options"""
663+ from bzrlib.i18n import gettext
664
665 parser = OptionParser()
666 parser.remove_option('--help')
667
668=== modified file 'bzrlib/tests/__init__.py'
669--- bzrlib/tests/__init__.py 2011-05-13 12:51:05 +0000
670+++ bzrlib/tests/__init__.py 2011-05-14 03:14:26 +0000
671@@ -3783,6 +3783,7 @@
672 'bzrlib.tests.test_eol_filters',
673 'bzrlib.tests.test_errors',
674 'bzrlib.tests.test_export',
675+ 'bzrlib.tests.test_export_pot',
676 'bzrlib.tests.test_extract',
677 'bzrlib.tests.test_fetch',
678 'bzrlib.tests.test_fixtures',
679@@ -3899,6 +3900,7 @@
680 'bzrlib.tests.test_upgrade',
681 'bzrlib.tests.test_upgrade_stacked',
682 'bzrlib.tests.test_urlutils',
683+ 'bzrlib.tests.test_utextwrap',
684 'bzrlib.tests.test_version',
685 'bzrlib.tests.test_version_info',
686 'bzrlib.tests.test_versionedfile',
687
688=== added file 'bzrlib/tests/test_export_pot.py'
689--- bzrlib/tests/test_export_pot.py 1970-01-01 00:00:00 +0000
690+++ bzrlib/tests/test_export_pot.py 2011-05-14 03:14:26 +0000
691@@ -0,0 +1,147 @@
692+# Copyright (C) 2011 Canonical Ltd
693+#
694+# This program is free software; you can redistribute it and/or modify
695+# it under the terms of the GNU General Public License as published by
696+# the Free Software Foundation; either version 2 of the License, or
697+# (at your option) any later version.
698+#
699+# This program is distributed in the hope that it will be useful,
700+# but WITHOUT ANY WARRANTY; without even the implied warranty of
701+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
702+# GNU General Public License for more details.
703+#
704+# You should have received a copy of the GNU General Public License
705+# along with this program; if not, write to the Free Software
706+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
707+
708+from cStringIO import StringIO
709+import textwrap
710+
711+from bzrlib import (
712+ export_pot,
713+ tests,
714+ )
715+
716+class TestEscape(tests.TestCase):
717+
718+ def test_simple_escape(self):
719+ self.assertEqual(
720+ export_pot._escape('foobar'),
721+ 'foobar')
722+
723+ s = '''foo\nbar\r\tbaz\\"spam"'''
724+ e = '''foo\\nbar\\r\\tbaz\\\\\\"spam\\"'''
725+ self.assertEqual(export_pot._escape(s), e)
726+
727+ def test_complex_escape(self):
728+ s = '''\\r \\\n'''
729+ e = '''\\\\r \\\\\\n'''
730+ self.assertEqual(export_pot._escape(s), e)
731+
732+
733+class TestNormalize(tests.TestCase):
734+
735+ def test_single_line(self):
736+ s = 'foobar'
737+ e = '"foobar"'
738+ self.assertEqual(export_pot._normalize(s), e)
739+
740+ s = 'foo"bar'
741+ e = '"foo\\"bar"'
742+ self.assertEqual(export_pot._normalize(s), e)
743+
744+ def test_multi_lines(self):
745+ s = 'foo\nbar\n'
746+ e = '""\n"foo\\n"\n"bar\\n"'
747+ self.assertEqual(export_pot._normalize(s), e)
748+
749+ s = '\nfoo\nbar\n'
750+ e = ('""\n'
751+ '"\\n"\n'
752+ '"foo\\n"\n'
753+ '"bar\\n"')
754+ self.assertEqual(export_pot._normalize(s), e)
755+
756+
757+class PoEntryTestCase(tests.TestCase):
758+
759+ def setUp(self):
760+ self.overrideAttr(export_pot, '_FOUND_MSGID', set())
761+ self._outf = StringIO()
762+ super(PoEntryTestCase, self).setUp()
763+
764+ def check_output(self, expected):
765+ self.assertEqual(
766+ self._outf.getvalue(),
767+ textwrap.dedent(expected)
768+ )
769+
770+class TestPoEntry(PoEntryTestCase):
771+
772+ def test_simple(self):
773+ export_pot._poentry(self._outf, 'dummy', 1, "spam")
774+ export_pot._poentry(self._outf, 'dummy', 2, "ham", 'EGG')
775+ self.check_output('''\
776+ #: dummy:1
777+ msgid "spam"
778+ msgstr ""
779+
780+ #: dummy:2
781+ # EGG
782+ msgid "ham"
783+ msgstr ""
784+
785+ ''')
786+
787+ def test_duplicate(self):
788+ export_pot._poentry(self._outf, 'dummy', 1, "spam")
789+ # This should be ignored.
790+ export_pot._poentry(self._outf, 'dummy', 2, "spam", 'EGG')
791+
792+ self.check_output('''\
793+ #: dummy:1
794+ msgid "spam"
795+ msgstr ""\n
796+ ''')
797+
798+
799+class TestPoentryPerPergraph(PoEntryTestCase):
800+
801+ def test_single(self):
802+ export_pot._poentry_per_paragraph(
803+ self._outf,
804+ 'dummy',
805+ 10,
806+ '''foo\nbar\nbaz\n'''
807+ )
808+ self.check_output('''\
809+ #: dummy:10
810+ msgid ""
811+ "foo\\n"
812+ "bar\\n"
813+ "baz\\n"
814+ msgstr ""\n
815+ ''')
816+
817+ def test_multi(self):
818+ export_pot._poentry_per_paragraph(
819+ self._outf,
820+ 'dummy',
821+ 10,
822+ '''spam\nham\negg\n\nSPAM\nHAM\nEGG\n'''
823+ )
824+ self.check_output('''\
825+ #: dummy:10
826+ msgid ""
827+ "spam\\n"
828+ "ham\\n"
829+ "egg"
830+ msgstr ""
831+
832+ #: dummy:14
833+ msgid ""
834+ "SPAM\\n"
835+ "HAM\\n"
836+ "EGG\\n"
837+ msgstr ""\n
838+ ''')
839
840=== added file 'bzrlib/tests/test_utextwrap.py'
841--- bzrlib/tests/test_utextwrap.py 1970-01-01 00:00:00 +0000
842+++ bzrlib/tests/test_utextwrap.py 2011-05-14 03:14:26 +0000
843@@ -0,0 +1,192 @@
844+# Copyright (C) 2011 Canonical Ltd
845+#
846+# This program is free software; you can redistribute it and/or modify
847+# it under the terms of the GNU General Public License as published by
848+# the Free Software Foundation; either version 2 of the License, or
849+# (at your option) any later version.
850+#
851+# This program is distributed in the hope that it will be useful,
852+# but WITHOUT ANY WARRANTY; without even the implied warranty of
853+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
854+# GNU General Public License for more details.
855+#
856+# You should have received a copy of the GNU General Public License
857+# along with this program; if not, write to the Free Software
858+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
859+#
860+
861+"""Tests of the bzrlib.utextwrap."""
862+
863+from bzrlib import tests, utextwrap
864+
865+# Japanese "Good morning".
866+# Each character have double width. So total 8 width on console.
867+_str_D = u'\u304a\u306f\u3088\u3046'
868+
869+_str_S = u"hello"
870+
871+# Combine single width characters and double width characters.
872+_str_SD = _str_S + _str_D
873+_str_DS = _str_D + _str_S
874+
875+class TestUTextWrap(tests.TestCase):
876+
877+ def check_width(self, text, expected_width):
878+ w = utextwrap.UTextWrapper()
879+ self.assertEqual(
880+ w._width(text),
881+ expected_width,
882+ "Width of %r should be %d" % (text, expected_width))
883+
884+ def test_width(self):
885+ self.check_width(_str_D, 8)
886+ self.check_width(_str_SD, 13)
887+
888+ def check_cut(self, text, width, pos):
889+ w = utextwrap.UTextWrapper()
890+ self.assertEqual((text[:pos], text[pos:]), w._cut(text, width))
891+
892+ def test_cut(self):
893+ s = _str_SD
894+ self.check_cut(s, 0, 0)
895+ self.check_cut(s, 1, 1)
896+ self.check_cut(s, 5, 5)
897+ self.check_cut(s, 6, 5)
898+ self.check_cut(s, 7, 6)
899+ self.check_cut(s, 12, 8)
900+ self.check_cut(s, 13, 9)
901+ self.check_cut(s, 14, 9)
902+ self.check_cut(u'A'*5, 3, 3)
903+
904+ def test_split(self):
905+ w = utextwrap.UTextWrapper()
906+ self.assertEqual(list(_str_D), w._split(_str_D))
907+ self.assertEqual([_str_S]+list(_str_D), w._split(_str_SD))
908+ self.assertEqual(list(_str_D)+[_str_S], w._split(_str_DS))
909+
910+ def test_wrap(self):
911+ self.assertEqual(list(_str_D), utextwrap.wrap(_str_D, 1))
912+ self.assertEqual(list(_str_D), utextwrap.wrap(_str_D, 2))
913+ self.assertEqual(list(_str_D), utextwrap.wrap(_str_D, 3))
914+ self.assertEqual(list(_str_D),
915+ utextwrap.wrap(_str_D, 3, break_long_words=False))
916+
917+class TestUTextFill(tests.TestCase):
918+
919+ def test_fill_simple(self):
920+ # Test only can call fill() because it's just '\n'.join(wrap(text)).
921+ self.assertEqual("%s\n%s" % (_str_D[:2], _str_D[2:]),
922+ utextwrap.fill(_str_D, 4))
923+
924+ def test_fill_with_breaks(self):
925+ # Demonstrate complicated case.
926+ text = u"spam ham egg spamhamegg" + _str_D + u" spam" + _str_D*2
927+ self.assertEqual(u'\n'.join(["spam ham",
928+ "egg spam",
929+ "hamegg" + _str_D[0],
930+ _str_D[1:],
931+ "spam" + _str_D[:2],
932+ _str_D[2:]+_str_D[:2],
933+ _str_D[2:]]),
934+ utextwrap.fill(text, 8))
935+
936+ def test_fill_without_breaks(self):
937+ text = u"spam ham egg spamhamegg" + _str_D + u" spam" + _str_D*2
938+ self.assertEqual(u'\n'.join(["spam ham",
939+ "egg",
940+ "spamhamegg",
941+ # border between single width and double
942+ # width.
943+ _str_D,
944+ "spam" + _str_D[:2],
945+ _str_D[2:]+_str_D[:2],
946+ _str_D[2:]]),
947+ utextwrap.fill(text, 8, break_long_words=False))
948+
949+ def test_fill_indent_with_breaks(self):
950+ w = utextwrap.UTextWrapper(8, initial_indent=' '*4,
951+ subsequent_indent=' '*4)
952+ self.assertEqual(u'\n'.join([" hell",
953+ " o" + _str_D[0],
954+ " " + _str_D[1:3],
955+ " " + _str_D[3]
956+ ]),
957+ w.fill(_str_SD))
958+
959+ def test_fill_indent_without_breaks(self):
960+ w = utextwrap.UTextWrapper(8, initial_indent=' '*4,
961+ subsequent_indent=' '*4)
962+ w.break_long_words = False
963+ self.assertEqual(u'\n'.join([" hello",
964+ " " + _str_D[:2],
965+ " " + _str_D[2:],
966+ ]),
967+ w.fill(_str_SD))
968+
969+ def test_fill_indent_without_breaks_with_fixed_width(self):
970+ w = utextwrap.UTextWrapper(8, initial_indent=' '*4,
971+ subsequent_indent=' '*4)
972+ w.break_long_words = False
973+ w.width = 3
974+ self.assertEqual(u'\n'.join([" hello",
975+ " " + _str_D[0],
976+ " " + _str_D[1],
977+ " " + _str_D[2],
978+ " " + _str_D[3],
979+ ]),
980+ w.fill(_str_SD))
981+
982+class TestUTextWrapAmbiWidth(tests.TestCase):
983+ _cyrill_char = u"\u0410" # east_asian_width() == 'A'
984+
985+ def test_ambiwidth1(self):
986+ w = utextwrap.UTextWrapper(4, ambiguous_width=1)
987+ s = self._cyrill_char*8
988+ self.assertEqual([self._cyrill_char*4]*2, w.wrap(s))
989+
990+ def test_ambiwidth2(self):
991+ w = utextwrap.UTextWrapper(4, ambiguous_width=2)
992+ s = self._cyrill_char*8
993+ self.assertEqual([self._cyrill_char*2]*4, w.wrap(s))
994+
995+
996+# Regression test with Python's test_textwrap
997+# Note that some distribution including Ubuntu doesn't install
998+# Python's test suite.
999+try:
1000+ from test import test_textwrap
1001+
1002+ def override_textwrap_symbols(testcase):
1003+ # Override the symbols imported by test_textwrap so it uses our own
1004+ # replacements.
1005+ testcase.overrideAttr(test_textwrap, 'TextWrapper',
1006+ utextwrap.UTextWrapper)
1007+ testcase.overrideAttr(test_textwrap, 'wrap', utextwrap.wrap)
1008+ testcase.overrideAttr(test_textwrap, 'fill', utextwrap.fill)
1009+
1010+
1011+ def setup_both(testcase, base_class, reused_class):
1012+ super(base_class, testcase).setUp()
1013+ override_textwrap_symbols(testcase)
1014+ reused_class.setUp(testcase)
1015+
1016+
1017+ class TestWrap(tests.TestCase, test_textwrap.WrapTestCase):
1018+
1019+ def setUp(self):
1020+ setup_both(self, TestWrap, test_textwrap.WrapTestCase)
1021+
1022+
1023+ class TestLongWord(tests.TestCase, test_textwrap.LongWordTestCase):
1024+
1025+ def setUp(self):
1026+ setup_both(self, TestLongWord, test_textwrap.LongWordTestCase)
1027+
1028+
1029+ class TestIndent(tests.TestCase, test_textwrap.IndentTestCases):
1030+
1031+ def setUp(self):
1032+ setup_both(self, TestIndent, test_textwrap.IndentTestCases)
1033+
1034+except ImportError:
1035+ pass
1036
1037=== modified file 'bzrlib/trace.py'
1038--- bzrlib/trace.py 2011-04-07 10:36:24 +0000
1039+++ bzrlib/trace.py 2011-05-14 03:14:26 +0000
1040@@ -566,7 +566,11 @@
1041 :param advice: Extra advice to the user to be printed following the
1042 exception.
1043 """
1044- err_file.write("bzr: ERROR: %s\n" % (exc_info[1],))
1045+ e = exc_info[1]
1046+ if isinstance(e, errors.BzrError):
1047+ err_file.write("bzr: ERROR: %s\n" % (e.i18n(),))
1048+ else:
1049+ err_file.write("bzr: ERROR: %s\n" % (e,))
1050 if advice:
1051 err_file.write("%s\n" % (advice,))
1052
1053
1054=== added file 'bzrlib/utextwrap.py'
1055--- bzrlib/utextwrap.py 1970-01-01 00:00:00 +0000
1056+++ bzrlib/utextwrap.py 2011-05-14 03:14:26 +0000
1057@@ -0,0 +1,243 @@
1058+# Copyright (C) 2011 Canonical Ltd
1059+#
1060+# UTextWrapper._handle_long_word, UTextWrapper._wrap_chunks,
1061+# wrap and fill is copied from Python's textwrap module
1062+# (under PSF license) and modified for support CJK.
1063+# Original Copyright for these functions:
1064+#
1065+# Copyright (C) 1999-2001 Gregory P. Ward.
1066+# Copyright (C) 2002, 2003 Python Software Foundation.
1067+#
1068+# Written by Greg Ward <gward@python.net>
1069+# This program is free software; you can redistribute it and/or modify
1070+# it under the terms of the GNU General Public License as published by
1071+# the Free Software Foundation; either version 2 of the License, or
1072+# (at your option) any later version.
1073+#
1074+# This program is distributed in the hope that it will be useful,
1075+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1076+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1077+# GNU General Public License for more details.
1078+#
1079+# You should have received a copy of the GNU General Public License
1080+# along with this program; if not, write to the Free Software
1081+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1082+
1083+import sys
1084+import textwrap
1085+from unicodedata import east_asian_width as _eawidth
1086+
1087+from bzrlib import osutils
1088+
1089+__all__ = ["UTextWrapper", "fill", "wrap"]
1090+
1091+class UTextWrapper(textwrap.TextWrapper):
1092+ """
1093+ Extend TextWrapper for Unicode.
1094+
1095+ This textwrapper handles east asian double width and split word
1096+ even if !break_long_words when word contains double width
1097+ characters.
1098+
1099+ :param ambiguous_width: (keyword argument) width for character when
1100+ unicodedata.east_asian_width(c) == 'A'
1101+ (default: 1)
1102+
1103+ Limitations:
1104+ * expand_tabs doesn't fixed. It uses len() for calculating width
1105+ of string on left of TAB.
1106+ * Handles one codeunit as a single character having 1 or 2 width.
1107+ This is not correct when there are surrogate pairs, combined
1108+ characters or zero-width characters.
1109+ * Treats all asian character are line breakable. But it is not
1110+ true because line breaking is prohibited around some characters.
1111+ (For example, breaking before punctation mark is prohibited.)
1112+ See UAX # 14 "UNICODE LINE BREAKING ALGORITHM"
1113+ """
1114+
1115+ def __init__(self, width=None, **kwargs):
1116+ if width is None:
1117+ width = (osutils.terminal_width() or
1118+ osutils.default_terminal_width) - 1
1119+
1120+ ambi_width = kwargs.pop('ambiguous_width', 1)
1121+ if ambi_width == 1:
1122+ self._east_asian_doublewidth = 'FW'
1123+ elif ambi_width == 2:
1124+ self._east_asian_doublewidth = 'FWA'
1125+ else:
1126+ raise ValueError("ambiguous_width should be 1 or 2")
1127+
1128+ # No drop_whitespace param before Python 2.6 it was always dropped
1129+ if sys.version_info < (2, 6):
1130+ self.drop_whitespace = kwargs.pop("drop_whitespace", True)
1131+ if not self.drop_whitespace:
1132+ raise ValueError("TextWrapper version must drop whitespace")
1133+ textwrap.TextWrapper.__init__(self, width, **kwargs)
1134+
1135+ def _unicode_char_width(self, uc):
1136+ """Return width of character `uc`.
1137+
1138+ :param: uc Single unicode character.
1139+ """
1140+ # 'A' means width of the character is not be able to determine.
1141+ # We assume that it's width is 2 because longer wrap may over
1142+ # terminal width but shorter wrap may be acceptable.
1143+ return (_eawidth(uc) in self._east_asian_doublewidth and 2) or 1
1144+
1145+ def _width(self, s):
1146+ """Returns width for s.
1147+
1148+ When s is unicode, take care of east asian width.
1149+ When s is bytes, treat all byte is single width character.
1150+ """
1151+ charwidth = self._unicode_char_width
1152+ return sum(charwidth(c) for c in s)
1153+
1154+ def _cut(self, s, width):
1155+ """Returns head and rest of s. (head+rest == s)
1156+
1157+ Head is large as long as _width(head) <= width.
1158+ """
1159+ w = 0
1160+ charwidth = self._unicode_char_width
1161+ for pos, c in enumerate(s):
1162+ w += charwidth(c)
1163+ if w > width:
1164+ return s[:pos], s[pos:]
1165+ return s, u''
1166+
1167+ def _handle_long_word(self, chunks, cur_line, cur_len, width):
1168+ # Figure out when indent is larger than the specified width, and make
1169+ # sure at least one character is stripped off on every pass
1170+ if width < 2:
1171+ space_left = chunks[-1] and self._width(chunks[-1][0]) or 1
1172+ else:
1173+ space_left = width - cur_len
1174+
1175+ # If we're allowed to break long words, then do so: put as much
1176+ # of the next chunk onto the current line as will fit.
1177+ if self.break_long_words:
1178+ head, rest = self._cut(chunks[-1], space_left)
1179+ cur_line.append(head)
1180+ if rest:
1181+ chunks[-1] = rest
1182+ else:
1183+ del chunks[-1]
1184+
1185+ # Otherwise, we have to preserve the long word intact. Only add
1186+ # it to the current line if there's nothing already there --
1187+ # that minimizes how much we violate the width constraint.
1188+ elif not cur_line:
1189+ cur_line.append(chunks.pop())
1190+
1191+ # If we're not allowed to break long words, and there's already
1192+ # text on the current line, do nothing. Next time through the
1193+ # main loop of _wrap_chunks(), we'll wind up here again, but
1194+ # cur_len will be zero, so the next line will be entirely
1195+ # devoted to the long word that we can't handle right now.
1196+
1197+ def _wrap_chunks(self, chunks):
1198+ lines = []
1199+ if self.width <= 0:
1200+ raise ValueError("invalid width %r (must be > 0)" % self.width)
1201+
1202+ # Arrange in reverse order so items can be efficiently popped
1203+ # from a stack of chucks.
1204+ chunks.reverse()
1205+
1206+ while chunks:
1207+
1208+ # Start the list of chunks that will make up the current line.
1209+ # cur_len is just the length of all the chunks in cur_line.
1210+ cur_line = []
1211+ cur_len = 0
1212+
1213+ # Figure out which static string will prefix this line.
1214+ if lines:
1215+ indent = self.subsequent_indent
1216+ else:
1217+ indent = self.initial_indent
1218+
1219+ # Maximum width for this line.
1220+ width = self.width - len(indent)
1221+
1222+ # First chunk on line is whitespace -- drop it, unless this
1223+ # is the very beginning of the text (ie. no lines started yet).
1224+ if self.drop_whitespace and chunks[-1].strip() == '' and lines:
1225+ del chunks[-1]
1226+
1227+ while chunks:
1228+ # Use _width instead of len for east asian width
1229+ l = self._width(chunks[-1])
1230+
1231+ # Can at least squeeze this chunk onto the current line.
1232+ if cur_len + l <= width:
1233+ cur_line.append(chunks.pop())
1234+ cur_len += l
1235+
1236+ # Nope, this line is full.
1237+ else:
1238+ break
1239+
1240+ # The current line is full, and the next chunk is too big to
1241+ # fit on *any* line (not just this one).
1242+ if chunks and self._width(chunks[-1]) > width:
1243+ self._handle_long_word(chunks, cur_line, cur_len, width)
1244+
1245+ # If the last chunk on this line is all whitespace, drop it.
1246+ if self.drop_whitespace and cur_line and cur_line[-1].strip() == '':
1247+ del cur_line[-1]
1248+
1249+ # Convert current line back to a string and store it in list
1250+ # of all lines (return value).
1251+ if cur_line:
1252+ lines.append(indent + ''.join(cur_line))
1253+
1254+ return lines
1255+
1256+ def _split(self, text):
1257+ chunks = textwrap.TextWrapper._split(self, unicode(text))
1258+ cjk_split_chunks = []
1259+ for chunk in chunks:
1260+ assert chunk # TextWrapper._split removes empty chunk
1261+ prev_pos = 0
1262+ for pos, char in enumerate(chunk):
1263+ if _eawidth(char) in 'FWA':
1264+ if prev_pos < pos:
1265+ cjk_split_chunks.append(chunk[prev_pos:pos])
1266+ cjk_split_chunks.append(char)
1267+ prev_pos = pos+1
1268+ if prev_pos < len(chunk):
1269+ cjk_split_chunks.append(chunk[prev_pos:])
1270+ return cjk_split_chunks
1271+
1272+ def wrap(self, text):
1273+ # ensure text is unicode
1274+ return textwrap.TextWrapper.wrap(self, unicode(text))
1275+
1276+# -- Convenience interface ---------------------------------------------
1277+
1278+def wrap(text, width=None, **kwargs):
1279+ """Wrap a single paragraph of text, returning a list of wrapped lines.
1280+
1281+ Reformat the single paragraph in 'text' so it fits in lines of no
1282+ more than 'width' columns, and return a list of wrapped lines. By
1283+ default, tabs in 'text' are expanded with string.expandtabs(), and
1284+ all other whitespace characters (including newline) are converted to
1285+ space. See TextWrapper class for available keyword args to customize
1286+ wrapping behaviour.
1287+ """
1288+ return UTextWrapper(width=width, **kwargs).wrap(text)
1289+
1290+def fill(text, width=None, **kwargs):
1291+ """Fill a single paragraph of text, returning a new string.
1292+
1293+ Reformat the single paragraph in 'text' to fit in lines of no more
1294+ than 'width' columns, and return a new string containing the entire
1295+ wrapped paragraph. As with wrap(), tabs are expanded and other
1296+ whitespace characters converted to space. See TextWrapper class for
1297+ available keyword args to customize wrapping behaviour.
1298+ """
1299+ return UTextWrapper(width=width, **kwargs).fill(text)
1300+
1301
1302=== added directory 'po'
1303=== added file 'po/bzr.pot'
1304--- po/bzr.pot 1970-01-01 00:00:00 +0000
1305+++ po/bzr.pot 2011-05-14 03:14:26 +0000
1306@@ -0,0 +1,8931 @@
1307+# SOME DESCRIPTIVE TITLE.
1308+# Copyright (C) YEAR Canonical
1309+# This file is distributed under the same license as the PACKAGE package.
1310+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
1311+#
1312+#, fuzzy
1313+msgid ""
1314+msgstr ""
1315+"Project-Id-Version: bzr\n"
1316+"Report-Msgid-Bugs-To: <bazaar@canonical.com>\n"
1317+"POT-Creation-Date: 2011-05-14 12:05+0900\n"
1318+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1319+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1320+"Language-Team: LANGUAGE <LL@li.org>\n"
1321+"Language: \n"
1322+"MIME-Version: 1.0\n"
1323+"Content-Type: text/plain; charset=CHARSET\n"
1324+"Content-Transfer-Encoding: 8bit\n"
1325+
1326+#: bzrlib/builtins.py:206
1327+msgid "Display status summary."
1328+msgstr ""
1329+
1330+#: bzrlib/builtins.py:208
1331+msgid ""
1332+"This reports on versioned and unknown files, reporting them\n"
1333+"grouped by state. Possible states are:"
1334+msgstr ""
1335+
1336+#: bzrlib/builtins.py:211
1337+msgid ""
1338+"added\n"
1339+" Versioned in the working copy but not in the previous revision."
1340+msgstr ""
1341+
1342+#: bzrlib/builtins.py:214
1343+msgid ""
1344+"removed\n"
1345+" Versioned in the previous revision but removed or deleted\n"
1346+" in the working copy."
1347+msgstr ""
1348+
1349+#: bzrlib/builtins.py:218
1350+msgid ""
1351+"renamed\n"
1352+" Path of this file changed from the previous revision;\n"
1353+" the text may also have changed. This includes files whose\n"
1354+" parent directory was renamed."
1355+msgstr ""
1356+
1357+#: bzrlib/builtins.py:223
1358+msgid ""
1359+"modified\n"
1360+" Text has changed since the previous revision."
1361+msgstr ""
1362+
1363+#: bzrlib/builtins.py:226
1364+msgid ""
1365+"kind changed\n"
1366+" File kind has been changed (e.g. from file to directory)."
1367+msgstr ""
1368+
1369+#: bzrlib/builtins.py:229
1370+msgid ""
1371+"unknown\n"
1372+" Not versioned and not matching an ignore pattern."
1373+msgstr ""
1374+
1375+#: bzrlib/builtins.py:232
1376+msgid ""
1377+"Additionally for directories, symlinks and files with an executable\n"
1378+"bit, Bazaar indicates their type using a trailing character: '/', '@'\n"
1379+"or '*' respectively."
1380+msgstr ""
1381+
1382+#: bzrlib/builtins.py:236
1383+msgid ""
1384+"To see ignored files use 'bzr ignored'. For details on the\n"
1385+"changes to file texts, use 'bzr diff'."
1386+msgstr ""
1387+
1388+#: bzrlib/builtins.py:239
1389+msgid ""
1390+"Note that --short or -S gives status flags for each item, similar\n"
1391+"to Subversion's status command. To get output similar to svn -q,\n"
1392+"use bzr status -SV."
1393+msgstr ""
1394+
1395+#: bzrlib/builtins.py:243
1396+msgid ""
1397+"If no arguments are specified, the status of the entire working\n"
1398+"directory is shown. Otherwise, only the status of the specified\n"
1399+"files or directories is reported. If a directory is given, status\n"
1400+"is reported for everything inside that directory."
1401+msgstr ""
1402+
1403+#: bzrlib/builtins.py:248
1404+msgid ""
1405+"Before merges are committed, the pending merge tip revisions are\n"
1406+"shown. To see all pending merge revisions, use the -v option.\n"
1407+"To skip the display of pending merge information altogether, use\n"
1408+"the no-pending option or specify a file/directory."
1409+msgstr ""
1410+
1411+#: bzrlib/builtins.py:253
1412+msgid ""
1413+"To compare the working directory to a specific revision, pass a\n"
1414+"single revision to the revision argument."
1415+msgstr ""
1416+
1417+#: bzrlib/builtins.py:256
1418+msgid ""
1419+"To see which files have changed in a specific revision, or between\n"
1420+"two revisions, pass a revision range to the revision argument.\n"
1421+"This will produce the same results as calling 'bzr diff --summarize'."
1422+msgstr ""
1423+
1424+# help of 'short' option of 'status' command
1425+#: bzrlib/builtins.py:265
1426+msgid "Use short status indicators."
1427+msgstr ""
1428+
1429+# help of 'versioned' option of 'status' command
1430+#: bzrlib/builtins.py:267
1431+msgid "Only show versioned files."
1432+msgstr ""
1433+
1434+# help of 'no-pending' option of 'status' command
1435+#: bzrlib/builtins.py:269
1436+msgid "Don't show pending merges."
1437+msgstr ""
1438+
1439+#: bzrlib/builtins.py:446
1440+msgid "Remove the working tree from a given branch/checkout."
1441+msgstr ""
1442+
1443+#: bzrlib/builtins.py:448
1444+msgid ""
1445+"Since a lightweight checkout is little more than a working tree\n"
1446+"this will refuse to run against one."
1447+msgstr ""
1448+
1449+#: bzrlib/builtins.py:451
1450+msgid "To re-create the working tree, use \"bzr checkout\"."
1451+msgstr ""
1452+
1453+# help of 'force' option of 'remove-tree' command
1454+#: bzrlib/builtins.py:457
1455+msgid "Remove the working tree even if it has uncommitted or shelved changes."
1456+msgstr ""
1457+
1458+#: bzrlib/builtins.py:542
1459+msgid "Show current revision number."
1460+msgstr ""
1461+
1462+#: bzrlib/builtins.py:544
1463+msgid "This is equal to the number of revisions on this branch."
1464+msgstr ""
1465+
1466+# help of 'tree' option of 'revno' command
1467+#: bzrlib/builtins.py:585
1468+msgid "Show revno of working tree"
1469+msgstr ""
1470+
1471+#: bzrlib/builtins.py:633
1472+msgid "Add specified files or directories."
1473+msgstr ""
1474+
1475+#: bzrlib/builtins.py:635
1476+msgid ""
1477+"In non-recursive mode, all the named items are added, regardless\n"
1478+"of whether they were previously ignored. A warning is given if\n"
1479+"any of the named files are already versioned."
1480+msgstr ""
1481+
1482+#: bzrlib/builtins.py:639
1483+msgid ""
1484+"In recursive mode (the default), files are treated the same way\n"
1485+"but the behaviour for directories is different. Directories that\n"
1486+"are already versioned do not give a warning. All directories,\n"
1487+"whether already versioned or not, are searched for files or\n"
1488+"subdirectories that are neither versioned or ignored, and these\n"
1489+"are added. This search proceeds recursively into versioned\n"
1490+"directories. If no names are given '.' is assumed."
1491+msgstr ""
1492+
1493+#: bzrlib/builtins.py:647
1494+msgid ""
1495+"Therefore simply saying 'bzr add' will version all files that\n"
1496+"are currently unknown."
1497+msgstr ""
1498+
1499+#: bzrlib/builtins.py:650
1500+msgid ""
1501+"Adding a file whose parent directory is not versioned will\n"
1502+"implicitly add the parent, and so on up to the root. This means\n"
1503+"you should never need to explicitly add a directory, they'll just\n"
1504+"get added when you add a file in the directory."
1505+msgstr ""
1506+
1507+#: bzrlib/builtins.py:655
1508+msgid ""
1509+"--dry-run will show which files would be added, but not actually\n"
1510+"add them."
1511+msgstr ""
1512+
1513+#: bzrlib/builtins.py:658
1514+msgid ""
1515+"--file-ids-from will try to use the file ids from the supplied path.\n"
1516+"It looks up ids trying to find a matching parent directory with the\n"
1517+"same filename, and then by pure path. This option is rarely needed\n"
1518+"but can be useful when adding the same logical file into two\n"
1519+"branches that will be merged later (without showing the two different\n"
1520+"adds as a conflict). It is also useful when merging another project\n"
1521+"into a subdirectory of this one."
1522+msgstr ""
1523+
1524+#: bzrlib/builtins.py:666
1525+msgid ""
1526+"Any files matching patterns in the ignore list will not be added\n"
1527+"unless they are explicitly mentioned."
1528+msgstr ""
1529+
1530+# help of 'no-recurse' option of 'add' command
1531+#: bzrlib/builtins.py:672
1532+msgid "Don't recursively add the contents of directories."
1533+msgstr ""
1534+
1535+# help of 'file-ids-from' option of 'add' command
1536+#: bzrlib/builtins.py:678
1537+msgid "Lookup file ids from this tree."
1538+msgstr ""
1539+
1540+#: bzrlib/builtins.py:718
1541+msgid "Create a new versioned directory."
1542+msgstr ""
1543+
1544+#: bzrlib/builtins.py:720
1545+msgid "This is equivalent to creating the directory and then adding it."
1546+msgstr ""
1547+
1548+#: bzrlib/builtins.py:814
1549+msgid "Move or rename a file."
1550+msgstr ""
1551+
1552+#: bzrlib/builtins.py:816
1553+msgid ""
1554+":Usage:\n"
1555+" bzr mv OLDNAME NEWNAME"
1556+msgstr ""
1557+
1558+#: bzrlib/builtins.py:819
1559+msgid " bzr mv SOURCE... DESTINATION"
1560+msgstr ""
1561+
1562+#: bzrlib/builtins.py:821
1563+msgid ""
1564+"If the last argument is a versioned directory, all the other names\n"
1565+"are moved into it. Otherwise, there must be exactly two arguments\n"
1566+"and the file is changed to a new name."
1567+msgstr ""
1568+
1569+#: bzrlib/builtins.py:825
1570+msgid ""
1571+"If OLDNAME does not exist on the filesystem but is versioned and\n"
1572+"NEWNAME does exist on the filesystem but is not versioned, mv\n"
1573+"assumes that the file has been manually moved and only updates\n"
1574+"its internal inventory to reflect that change.\n"
1575+"The same is valid when moving many SOURCE files to a DESTINATION."
1576+msgstr ""
1577+
1578+#: bzrlib/builtins.py:831
1579+msgid "Files cannot be moved between branches."
1580+msgstr ""
1581+
1582+# help of 'after' option of 'mv' command
1583+#: bzrlib/builtins.py:835
1584+msgid ""
1585+"Move only the bzr identifier of the file, because the file has already been "
1586+"moved."
1587+msgstr ""
1588+
1589+# help of 'auto' option of 'mv' command
1590+#: bzrlib/builtins.py:837
1591+msgid "Automatically guess renames."
1592+msgstr ""
1593+
1594+# help of 'dry-run' option of 'mv' command
1595+#: bzrlib/builtins.py:838
1596+msgid "Avoid making changes when guessing renames."
1597+msgstr ""
1598+
1599+#: bzrlib/builtins.py:950
1600+msgid "Turn this branch into a mirror of another branch."
1601+msgstr ""
1602+
1603+#: bzrlib/builtins.py:952
1604+msgid ""
1605+"By default, this command only works on branches that have not diverged.\n"
1606+"Branches are considered diverged if the destination branch's most recent \n"
1607+"commit is one that has not been merged (directly or indirectly) into the \n"
1608+"parent."
1609+msgstr ""
1610+
1611+#: bzrlib/builtins.py:957
1612+msgid ""
1613+"If branches have diverged, you can use 'bzr merge' to integrate the changes\n"
1614+"from one into the other. Once one branch has merged, the other should\n"
1615+"be able to pull it again."
1616+msgstr ""
1617+
1618+#: bzrlib/builtins.py:961
1619+msgid ""
1620+"If you want to replace your local changes and just want your branch to\n"
1621+"match the remote one, use pull --overwrite. This will work even if the two\n"
1622+"branches have diverged."
1623+msgstr ""
1624+
1625+#: bzrlib/builtins.py:965
1626+msgid ""
1627+"If there is no default location set, the first pull will set it. After\n"
1628+"that, you can omit the location to use the default. To change the\n"
1629+"default, use --remember. The value will only be saved if the remote\n"
1630+"location can be accessed."
1631+msgstr ""
1632+
1633+#: bzrlib/builtins.py:970
1634+msgid ""
1635+"Note: The location can be specified either in the form of a branch,\n"
1636+"or in the form of a path to a file containing a merge directive generated\n"
1637+"with bzr send."
1638+msgstr ""
1639+
1640+# help of 'verbose' option of 'pull' command
1641+#: bzrlib/builtins.py:978
1642+msgid "Show logs of pulled revisions."
1643+msgstr ""
1644+
1645+# help of 'directory' option of 'pull' command
1646+#: bzrlib/builtins.py:980
1647+msgid ""
1648+"Branch to pull into, rather than the one containing the working directory."
1649+msgstr ""
1650+
1651+# help of 'local' option of 'pull' command
1652+#: bzrlib/builtins.py:983
1653+msgid ""
1654+"Perform a local pull in a bound branch. Local pulls are not applied to the "
1655+"master branch."
1656+msgstr ""
1657+
1658+#: bzrlib/builtins.py:1082
1659+msgid "Update a mirror of this branch."
1660+msgstr ""
1661+
1662+#: bzrlib/builtins.py:1084
1663+msgid ""
1664+"The target branch will not have its working tree populated because this\n"
1665+"is both expensive, and is not supported on remote file systems."
1666+msgstr ""
1667+
1668+#: bzrlib/builtins.py:1087
1669+msgid ""
1670+"Some smart servers or protocols *may* put the working tree in place in\n"
1671+"the future."
1672+msgstr ""
1673+
1674+#: bzrlib/builtins.py:1090
1675+msgid ""
1676+"This command only works on branches that have not diverged. Branches are\n"
1677+"considered diverged if the destination branch's most recent commit is one\n"
1678+"that has not been merged (directly or indirectly) by the source branch."
1679+msgstr ""
1680+
1681+#: bzrlib/builtins.py:1094
1682+msgid ""
1683+"If branches have diverged, you can use 'bzr push --overwrite' to replace\n"
1684+"the other branch completely, discarding its unmerged changes."
1685+msgstr ""
1686+
1687+#: bzrlib/builtins.py:1097
1688+msgid ""
1689+"If you want to ensure you have the different changes in the other branch,\n"
1690+"do a merge (see bzr help merge) from the other branch, and commit that.\n"
1691+"After that you will be able to do a push without '--overwrite'."
1692+msgstr ""
1693+
1694+#: bzrlib/builtins.py:1101
1695+msgid ""
1696+"If there is no default push location set, the first push will set it.\n"
1697+"After that, you can omit the location to use the default. To change the\n"
1698+"default, use --remember. The value will only be saved if the remote\n"
1699+"location can be accessed."
1700+msgstr ""
1701+
1702+# help of 'directory' option of 'push' command
1703+#: bzrlib/builtins.py:1113
1704+msgid ""
1705+"Branch to push from, rather than the one containing the working directory."
1706+msgstr ""
1707+
1708+# help of 'use-existing-dir' option of 'push' command
1709+#: bzrlib/builtins.py:1116
1710+msgid ""
1711+"By default push will fail if the target directory exists, but does not "
1712+"already have a control directory. This flag will allow push to proceed."
1713+msgstr ""
1714+
1715+# help of 'stacked' option of 'push' command
1716+#: bzrlib/builtins.py:1121
1717+msgid ""
1718+"Create a stacked branch that references the public location of the parent "
1719+"branch."
1720+msgstr ""
1721+
1722+# help of 'stacked-on' option of 'push' command
1723+#: bzrlib/builtins.py:1124
1724+msgid ""
1725+"Create a stacked branch that refers to another branch for the commit "
1726+"history. Only the work not present in the referenced branch is included in "
1727+"the branch created."
1728+msgstr ""
1729+
1730+# help of 'strict' option of 'push' command
1731+#: bzrlib/builtins.py:1129
1732+msgid ""
1733+"Refuse to push if there are uncommitted changes in the working tree, --no-"
1734+"strict disables the check."
1735+msgstr ""
1736+
1737+# help of 'no-tree' option of 'push' command
1738+#: bzrlib/builtins.py:1132
1739+msgid "Don't populate the working tree, even for protocols that support it."
1740+msgstr ""
1741+
1742+#: bzrlib/builtins.py:1197
1743+msgid "Create a new branch that is a copy of an existing branch."
1744+msgstr ""
1745+
1746+#: bzrlib/builtins.py:1199
1747+msgid ""
1748+"If the TO_LOCATION is omitted, the last component of the FROM_LOCATION will\n"
1749+"be used. In other words, \"branch ../foo/bar\" will attempt to create ./"
1750+"bar.\n"
1751+"If the FROM_LOCATION has no / or path separator embedded, the TO_LOCATION\n"
1752+"is derived from the FROM_LOCATION by stripping a leading scheme or drive\n"
1753+"identifier, if any. For example, \"branch lp:foo-bar\" will attempt to\n"
1754+"create ./foo-bar."
1755+msgstr ""
1756+
1757+#: bzrlib/builtins.py:1206
1758+msgid ""
1759+"To retrieve the branch as of a particular revision, supply the --revision\n"
1760+"parameter, as in \"branch foo/bar -r 5\"."
1761+msgstr ""
1762+
1763+#: bzrlib/builtins.py:1209
1764+msgid "The synonyms 'clone' and 'get' for this command are deprecated."
1765+msgstr ""
1766+
1767+# help of 'no-tree' option of 'branch' command
1768+#: bzrlib/builtins.py:1219
1769+msgid "Create a branch without a working-tree."
1770+msgstr ""
1771+
1772+# help of 'switch' option of 'branch' command
1773+#: bzrlib/builtins.py:1221
1774+msgid "Switch the checkout in the current directory to the new branch."
1775+msgstr ""
1776+
1777+# help of 'stacked' option of 'branch' command
1778+#: bzrlib/builtins.py:1224
1779+msgid ""
1780+"Create a stacked branch referring to the source branch. The new branch will "
1781+"depend on the availability of the source branch for all operations."
1782+msgstr ""
1783+
1784+# help of 'standalone' option of 'branch' command
1785+#: bzrlib/builtins.py:1228
1786+msgid "Do not use a shared repository, even if available."
1787+msgstr ""
1788+
1789+# help of 'use-existing-dir' option of 'branch' command
1790+#: bzrlib/builtins.py:1230
1791+msgid ""
1792+"By default branch will fail if the target directory exists, but does not "
1793+"already have a control directory. This flag will allow branch to proceed."
1794+msgstr ""
1795+
1796+# help of 'bind' option of 'branch' command
1797+#: bzrlib/builtins.py:1235
1798+msgid "Bind new branch to from location."
1799+msgstr ""
1800+
1801+#: bzrlib/builtins.py:1327
1802+msgid "Create a new checkout of an existing branch."
1803+msgstr ""
1804+
1805+#: bzrlib/builtins.py:1329
1806+msgid ""
1807+"If BRANCH_LOCATION is omitted, checkout will reconstitute a working tree "
1808+"for\n"
1809+"the branch found in '.'. This is useful if you have removed the working "
1810+"tree\n"
1811+"or if it was never created - i.e. if you pushed the branch to its current\n"
1812+"location using SFTP."
1813+msgstr ""
1814+
1815+#: bzrlib/builtins.py:1334
1816+msgid ""
1817+"If the TO_LOCATION is omitted, the last component of the BRANCH_LOCATION "
1818+"will\n"
1819+"be used. In other words, \"checkout ../foo/bar\" will attempt to create ./"
1820+"bar.\n"
1821+"If the BRANCH_LOCATION has no / or path separator embedded, the TO_LOCATION\n"
1822+"is derived from the BRANCH_LOCATION by stripping a leading scheme or drive\n"
1823+"identifier, if any. For example, \"checkout lp:foo-bar\" will attempt to\n"
1824+"create ./foo-bar."
1825+msgstr ""
1826+
1827+#: bzrlib/builtins.py:1341
1828+msgid ""
1829+"To retrieve the branch as of a particular revision, supply the --revision\n"
1830+"parameter, as in \"checkout foo/bar -r 5\". Note that this will be "
1831+"immediately\n"
1832+"out of date [so you cannot commit] but it may be useful (i.e. to examine "
1833+"old\n"
1834+"code.)"
1835+msgstr ""
1836+
1837+# help of 'lightweight' option of 'checkout' command
1838+#: bzrlib/builtins.py:1351
1839+msgid ""
1840+"Perform a lightweight checkout. Lightweight checkouts depend on access to "
1841+"the branch for every operation. Normal checkouts can perform common "
1842+"operations like diff and status without such access, and also support local "
1843+"commits."
1844+msgstr ""
1845+
1846+# help of 'files-from' option of 'branch' command
1847+#: bzrlib/builtins.py:1358
1848+msgid "Get file contents from this tree."
1849+msgstr ""
1850+
1851+# help of 'hardlink' option of 'branch' command
1852+#: bzrlib/builtins.py:1360
1853+msgid "Hard-link working tree files where possible."
1854+msgstr ""
1855+
1856+#: bzrlib/builtins.py:1401
1857+msgid ""
1858+"Show list of renamed files.\n"
1859+" "
1860+msgstr ""
1861+
1862+#: bzrlib/builtins.py:1431
1863+msgid "Update a tree to have the latest code committed to its branch."
1864+msgstr ""
1865+
1866+#: bzrlib/builtins.py:1433
1867+msgid ""
1868+"This will perform a merge into the working tree, and may generate\n"
1869+"conflicts. If you have any local changes, you will still\n"
1870+"need to commit them after the update for the update to be complete."
1871+msgstr ""
1872+
1873+#: bzrlib/builtins.py:1437
1874+msgid ""
1875+"If you want to discard your local changes, you can just do a\n"
1876+"'bzr revert' instead of 'bzr commit' after the update."
1877+msgstr ""
1878+
1879+#: bzrlib/builtins.py:1440
1880+msgid ""
1881+"If you want to restore a file that has been removed locally, use\n"
1882+"'bzr revert' instead of 'bzr update'."
1883+msgstr ""
1884+
1885+#: bzrlib/builtins.py:1443
1886+msgid ""
1887+"If the tree's branch is bound to a master branch, it will also update\n"
1888+"the branch from the master."
1889+msgstr ""
1890+
1891+#: bzrlib/builtins.py:1524
1892+msgid "Show information about a working tree, branch or repository."
1893+msgstr ""
1894+
1895+#: bzrlib/builtins.py:1526
1896+msgid ""
1897+"This command will show all known locations and formats associated to the\n"
1898+"tree, branch or repository."
1899+msgstr ""
1900+
1901+#: bzrlib/builtins.py:1529
1902+msgid ""
1903+"In verbose mode, statistical information is included with each report.\n"
1904+"To see extended statistic information, use a verbosity level of 2 or\n"
1905+"higher by specifying the verbose option multiple times, e.g. -vv."
1906+msgstr ""
1907+
1908+#: bzrlib/builtins.py:1533
1909+msgid "Branches and working trees will also report any missing revisions."
1910+msgstr ""
1911+
1912+#: bzrlib/builtins.py:1537
1913+msgid " Display information on the format and related locations:"
1914+msgstr ""
1915+
1916+#: bzrlib/builtins.py:1539
1917+msgid " bzr info"
1918+msgstr ""
1919+
1920+#: bzrlib/builtins.py:1541
1921+msgid ""
1922+" Display the above together with extended format information and\n"
1923+" basic statistics (like the number of files in the working tree and\n"
1924+" number of revisions in the branch and repository):"
1925+msgstr ""
1926+
1927+#: bzrlib/builtins.py:1545
1928+msgid " bzr info -v"
1929+msgstr ""
1930+
1931+#: bzrlib/builtins.py:1547
1932+msgid " Display the above together with number of committers to the branch:"
1933+msgstr ""
1934+
1935+#: bzrlib/builtins.py:1549
1936+msgid " bzr info -vv"
1937+msgstr ""
1938+
1939+#: bzrlib/builtins.py:1568
1940+msgid "Remove files or directories."
1941+msgstr ""
1942+
1943+#: bzrlib/builtins.py:1570
1944+msgid ""
1945+"This makes Bazaar stop tracking changes to the specified files. Bazaar will\n"
1946+"delete them if they can easily be recovered using revert otherwise they\n"
1947+"will be backed up (adding an extention of the form .~#~). If no options or\n"
1948+"parameters are given Bazaar will scan for files that are being tracked by\n"
1949+"Bazaar but missing in your tree and stop tracking them for you."
1950+msgstr ""
1951+
1952+# help of 'new' option of 'remove' command
1953+#: bzrlib/builtins.py:1578
1954+msgid "Only remove files that have never been committed."
1955+msgstr ""
1956+
1957+# help of 'file-deletion-strategy' option of 'remove' command
1958+#: bzrlib/builtins.py:1580
1959+msgid "The file deletion mode to be used."
1960+msgstr ""
1961+
1962+# title of 'file-deletion-strategy' option of 'remove' command
1963+#: bzrlib/builtins.py:1581
1964+msgid "Deletion Strategy"
1965+msgstr ""
1966+
1967+#: bzrlib/builtins.py:1672
1968+msgid "Reconcile bzr metadata in a branch."
1969+msgstr ""
1970+
1971+#: bzrlib/builtins.py:1674
1972+msgid ""
1973+"This can correct data mismatches that may have been caused by\n"
1974+"previous ghost operations or bzr upgrades. You should only\n"
1975+"need to run this command if 'bzr check' or a bzr developer\n"
1976+"advises you to run it."
1977+msgstr ""
1978+
1979+#: bzrlib/builtins.py:1679
1980+msgid ""
1981+"If a second branch is provided, cross-branch reconciliation is\n"
1982+"also attempted, which will check that data like the tree root\n"
1983+"id which was not present in very early bzr versions is represented\n"
1984+"correctly in both branches."
1985+msgstr ""
1986+
1987+#: bzrlib/builtins.py:1684
1988+msgid ""
1989+"At the same time it is run it may recompress data resulting in\n"
1990+"a potential saving in disk space or performance gain."
1991+msgstr ""
1992+
1993+#: bzrlib/builtins.py:1687
1994+msgid "The branch *MUST* be on a listable system such as local disk or sftp."
1995+msgstr ""
1996+
1997+#: bzrlib/builtins.py:1747
1998+msgid "Make a directory into a versioned branch."
1999+msgstr ""
2000+
2001+#: bzrlib/builtins.py:1749
2002+msgid ""
2003+"Use this to create an empty branch, or before importing an\n"
2004+"existing project."
2005+msgstr ""
2006+
2007+#: bzrlib/builtins.py:1752
2008+msgid ""
2009+"If there is a repository in a parent directory of the location, then\n"
2010+"the history of the branch will be stored in the repository. Otherwise\n"
2011+"init creates a standalone branch which carries its own history\n"
2012+"in the .bzr directory."
2013+msgstr ""
2014+
2015+#: bzrlib/builtins.py:1757
2016+msgid ""
2017+"If there is already a branch at the location but it has no working tree,\n"
2018+"the tree can be populated with 'bzr checkout'."
2019+msgstr ""
2020+
2021+#: bzrlib/builtins.py:1760
2022+msgid "Recipe for importing a tree of files::"
2023+msgstr ""
2024+
2025+#: bzrlib/builtins.py:1762
2026+msgid ""
2027+" cd ~/project\n"
2028+" bzr init\n"
2029+" bzr add .\n"
2030+" bzr status\n"
2031+" bzr commit -m \"imported project\""
2032+msgstr ""
2033+
2034+# help of 'create-prefix' option of 'init' command
2035+#: bzrlib/builtins.py:1773
2036+msgid "Create the path leading up to the branch if it does not already exist."
2037+msgstr ""
2038+
2039+# help of 'format' option of 'init' command
2040+#: bzrlib/builtins.py:1776
2041+msgid "Specify a format for this branch. See \"help formats\"."
2042+msgstr ""
2043+
2044+# help of 'append-revisions-only' option of 'init' command
2045+#: bzrlib/builtins.py:1784
2046+msgid "Never change revnos or the existing log. Append revisions to it only."
2047+msgstr ""
2048+
2049+# help of 'no-tree' option of 'init' command
2050+#: bzrlib/builtins.py:1787
2051+msgid "Create a branch without a working tree."
2052+msgstr ""
2053+
2054+#: bzrlib/builtins.py:1864
2055+msgid "Create a shared repository for branches to share storage space."
2056+msgstr ""
2057+
2058+#: bzrlib/builtins.py:1866
2059+msgid ""
2060+"New branches created under the repository directory will store their\n"
2061+"revisions in the repository, not in the branch directory. For branches\n"
2062+"with shared history, this reduces the amount of storage needed and \n"
2063+"speeds up the creation of new branches."
2064+msgstr ""
2065+
2066+#: bzrlib/builtins.py:1871
2067+msgid ""
2068+"If the --no-trees option is given then the branches in the repository\n"
2069+"will not have working trees by default. They will still exist as \n"
2070+"directories on disk, but they will not have separate copies of the \n"
2071+"files at a certain revision. This can be useful for repositories that\n"
2072+"store branches which are interacted with through checkouts or remote\n"
2073+"branches, such as on a server."
2074+msgstr ""
2075+
2076+#: bzrlib/builtins.py:1878
2077+msgid ""
2078+":Examples:\n"
2079+" Create a shared repository holding just branches::"
2080+msgstr ""
2081+
2082+#: bzrlib/builtins.py:1881
2083+msgid ""
2084+" bzr init-repo --no-trees repo\n"
2085+" bzr init repo/trunk"
2086+msgstr ""
2087+
2088+#: bzrlib/builtins.py:1884
2089+msgid " Make a lightweight checkout elsewhere::"
2090+msgstr ""
2091+
2092+#: bzrlib/builtins.py:1886
2093+msgid ""
2094+" bzr checkout --lightweight repo/trunk trunk-checkout\n"
2095+" cd trunk-checkout\n"
2096+" (add files here)"
2097+msgstr ""
2098+
2099+# help of 'format' option of 'init-repository' command
2100+#: bzrlib/builtins.py:1894
2101+msgid ""
2102+"Specify a format for this repository. See \"bzr help formats\" for details."
2103+msgstr ""
2104+
2105+# title of 'format' option of 'init-repository' command
2106+#: bzrlib/builtins.py:1898
2107+msgid "Repository format"
2108+msgstr ""
2109+
2110+# help of 'no-trees' option of 'init-repository' command
2111+#: bzrlib/builtins.py:1900
2112+msgid "Branches in the repository will default to not having a working tree."
2113+msgstr ""
2114+
2115+#: bzrlib/builtins.py:1924
2116+msgid "Show differences in the working tree, between revisions or branches."
2117+msgstr ""
2118+
2119+#: bzrlib/builtins.py:1926
2120+msgid ""
2121+"If no arguments are given, all changes for the current tree are listed.\n"
2122+"If files are given, only the changes in those files are listed.\n"
2123+"Remote and multiple branches can be compared by using the --old and\n"
2124+"--new options. If not provided, the default for both is derived from\n"
2125+"the first argument, if any, or the current tree if no arguments are\n"
2126+"given."
2127+msgstr ""
2128+
2129+#: bzrlib/builtins.py:1933
2130+msgid ""
2131+"\"bzr diff -p1\" is equivalent to \"bzr diff --prefix old/:new/\", and\n"
2132+"produces patches suitable for \"patch -p1\"."
2133+msgstr ""
2134+
2135+#: bzrlib/builtins.py:1936
2136+msgid ""
2137+"Note that when using the -r argument with a range of revisions, the\n"
2138+"differences are computed between the two specified revisions. That\n"
2139+"is, the command does not show the changes introduced by the first \n"
2140+"revision in the range. This differs from the interpretation of \n"
2141+"revision ranges used by \"bzr log\" which includes the first revision\n"
2142+"in the range."
2143+msgstr ""
2144+
2145+#: bzrlib/builtins.py:1943
2146+msgid ""
2147+":Exit values:\n"
2148+" 1 - changed\n"
2149+" 2 - unrepresentable changes\n"
2150+" 3 - error\n"
2151+" 0 - no change"
2152+msgstr ""
2153+
2154+#: bzrlib/builtins.py:1949
2155+msgid ""
2156+":Examples:\n"
2157+" Shows the difference in the working tree versus the last commit::"
2158+msgstr ""
2159+
2160+#: bzrlib/builtins.py:1952
2161+msgid " bzr diff"
2162+msgstr ""
2163+
2164+#: bzrlib/builtins.py:1954
2165+msgid " Difference between the working tree and revision 1::"
2166+msgstr ""
2167+
2168+#: bzrlib/builtins.py:1956
2169+msgid " bzr diff -r1"
2170+msgstr ""
2171+
2172+#: bzrlib/builtins.py:1958
2173+msgid " Difference between revision 3 and revision 1::"
2174+msgstr ""
2175+
2176+#: bzrlib/builtins.py:1960
2177+msgid " bzr diff -r1..3"
2178+msgstr ""
2179+
2180+#: bzrlib/builtins.py:1962
2181+msgid " Difference between revision 3 and revision 1 for branch xxx::"
2182+msgstr ""
2183+
2184+#: bzrlib/builtins.py:1964
2185+msgid " bzr diff -r1..3 xxx"
2186+msgstr ""
2187+
2188+#: bzrlib/builtins.py:1966
2189+msgid " The changes introduced by revision 2 (equivalent to -r1..2)::"
2190+msgstr ""
2191+
2192+#: bzrlib/builtins.py:1968
2193+msgid " bzr diff -c2"
2194+msgstr ""
2195+
2196+#: bzrlib/builtins.py:1970
2197+msgid ""
2198+" To see the changes introduced by revision X::\n"
2199+" \n"
2200+" bzr diff -cX"
2201+msgstr ""
2202+
2203+#: bzrlib/builtins.py:1974
2204+msgid ""
2205+" Note that in the case of a merge, the -c option shows the changes\n"
2206+" compared to the left hand parent. To see the changes against\n"
2207+" another parent, use::"
2208+msgstr ""
2209+
2210+#: bzrlib/builtins.py:1978
2211+msgid " bzr diff -r<chosen_parent>..X"
2212+msgstr ""
2213+
2214+#: bzrlib/builtins.py:1980
2215+msgid ""
2216+" The changes between the current revision and the previous revision\n"
2217+" (equivalent to -c-1 and -r-2..-1)"
2218+msgstr ""
2219+
2220+#: bzrlib/builtins.py:1983
2221+msgid " bzr diff -r-2.."
2222+msgstr ""
2223+
2224+#: bzrlib/builtins.py:1985
2225+msgid " Show just the differences for file NEWS::"
2226+msgstr ""
2227+
2228+#: bzrlib/builtins.py:1987
2229+msgid " bzr diff NEWS"
2230+msgstr ""
2231+
2232+#: bzrlib/builtins.py:1989
2233+msgid " Show the differences in working tree xxx for file NEWS::"
2234+msgstr ""
2235+
2236+#: bzrlib/builtins.py:1991
2237+msgid " bzr diff xxx/NEWS"
2238+msgstr ""
2239+
2240+#: bzrlib/builtins.py:1993
2241+msgid " Show the differences from branch xxx to this working tree:"
2242+msgstr ""
2243+
2244+#: bzrlib/builtins.py:1995
2245+msgid " bzr diff --old xxx"
2246+msgstr ""
2247+
2248+#: bzrlib/builtins.py:1997
2249+msgid " Show the differences between two branches for file NEWS::"
2250+msgstr ""
2251+
2252+#: bzrlib/builtins.py:1999
2253+msgid " bzr diff --old xxx --new yyy NEWS"
2254+msgstr ""
2255+
2256+#: bzrlib/builtins.py:2001
2257+msgid " Same as 'bzr diff' but prefix paths with old/ and new/::"
2258+msgstr ""
2259+
2260+#: bzrlib/builtins.py:2003
2261+msgid ""
2262+" bzr diff --prefix old/:new/\n"
2263+" \n"
2264+" Show the differences using a custom diff program with options::\n"
2265+" \n"
2266+" bzr diff --using /usr/bin/diff --diff-options -wu"
2267+msgstr ""
2268+
2269+# help of 'diff-options' option of 'diff' command
2270+#: bzrlib/builtins.py:2013
2271+msgid "Pass these options to the external diff program."
2272+msgstr ""
2273+
2274+# help of 'prefix' option of 'diff' command
2275+#: bzrlib/builtins.py:2016
2276+msgid ""
2277+"Set prefixes added to old and new filenames, as two values separated by a "
2278+"colon. (eg \"old/:new/\")."
2279+msgstr ""
2280+
2281+# help of 'old' option of 'diff' command
2282+#: bzrlib/builtins.py:2019
2283+msgid "Branch/tree to compare from."
2284+msgstr ""
2285+
2286+# help of 'new' option of 'diff' command
2287+#: bzrlib/builtins.py:2023
2288+msgid "Branch/tree to compare to."
2289+msgstr ""
2290+
2291+# help of 'using' option of 'diff' command
2292+#: bzrlib/builtins.py:2029
2293+msgid "Use this command to compare files."
2294+msgstr ""
2295+
2296+# help of 'format' option of 'diff' command
2297+#: bzrlib/builtins.py:2034
2298+msgid "Diff format to use."
2299+msgstr ""
2300+
2301+# title of 'format' option of 'diff' command
2302+#: bzrlib/builtins.py:2036
2303+msgid "Diff format"
2304+msgstr ""
2305+
2306+#: bzrlib/builtins.py:2086
2307+msgid ""
2308+"List files deleted in the working tree.\n"
2309+" "
2310+msgstr ""
2311+
2312+#: bzrlib/builtins.py:2164
2313+msgid "Show the tree root directory."
2314+msgstr ""
2315+
2316+#: bzrlib/builtins.py:2166
2317+msgid ""
2318+"The root is the nearest enclosing directory with a .bzr control\n"
2319+"directory."
2320+msgstr ""
2321+
2322+#: bzrlib/builtins.py:2194
2323+msgid "Show historical log for a branch or subset of a branch."
2324+msgstr ""
2325+
2326+#: bzrlib/builtins.py:2196
2327+msgid ""
2328+"log is bzr's default tool for exploring the history of a branch.\n"
2329+"The branch to use is taken from the first parameter. If no parameters\n"
2330+"are given, the branch containing the working directory is logged.\n"
2331+"Here are some simple examples::"
2332+msgstr ""
2333+
2334+#: bzrlib/builtins.py:2201
2335+msgid ""
2336+" bzr log log the current branch\n"
2337+" bzr log foo.py log a file in its branch\n"
2338+" bzr log http://server/branch log a branch on a server"
2339+msgstr ""
2340+
2341+#: bzrlib/builtins.py:2205
2342+msgid ""
2343+"The filtering, ordering and information shown for each revision can\n"
2344+"be controlled as explained below. By default, all revisions are\n"
2345+"shown sorted (topologically) so that newer revisions appear before\n"
2346+"older ones and descendants always appear before ancestors. If displayed,\n"
2347+"merged revisions are shown indented under the revision in which they\n"
2348+"were merged."
2349+msgstr ""
2350+
2351+#: bzrlib/builtins.py:2212
2352+msgid ":Output control:"
2353+msgstr ""
2354+
2355+#: bzrlib/builtins.py:2214
2356+msgid ""
2357+" The log format controls how information about each revision is\n"
2358+" displayed. The standard log formats are called ``long``, ``short``\n"
2359+" and ``line``. The default is long. See ``bzr help log-formats``\n"
2360+" for more details on log formats."
2361+msgstr ""
2362+
2363+#: bzrlib/builtins.py:2219
2364+msgid ""
2365+" The following options can be used to control what information is\n"
2366+" displayed::"
2367+msgstr ""
2368+
2369+#: bzrlib/builtins.py:2222
2370+msgid ""
2371+" -l N display a maximum of N revisions\n"
2372+" -n N display N levels of revisions (0 for all, 1 for collapsed)\n"
2373+" -v display a status summary (delta) for each revision\n"
2374+" -p display a diff (patch) for each revision\n"
2375+" --show-ids display revision-ids (and file-ids), not just revnos"
2376+msgstr ""
2377+
2378+#: bzrlib/builtins.py:2228
2379+msgid ""
2380+" Note that the default number of levels to display is a function of the\n"
2381+" log format. If the -n option is not used, the standard log formats show\n"
2382+" just the top level (mainline)."
2383+msgstr ""
2384+
2385+#: bzrlib/builtins.py:2232
2386+msgid ""
2387+" Status summaries are shown using status flags like A, M, etc. To see\n"
2388+" the changes explained using words like ``added`` and ``modified``\n"
2389+" instead, use the -vv option."
2390+msgstr ""
2391+
2392+#: bzrlib/builtins.py:2236
2393+msgid ":Ordering control:"
2394+msgstr ""
2395+
2396+#: bzrlib/builtins.py:2238
2397+msgid ""
2398+" To display revisions from oldest to newest, use the --forward option.\n"
2399+" In most cases, using this option will have little impact on the total\n"
2400+" time taken to produce a log, though --forward does not incrementally\n"
2401+" display revisions like --reverse does when it can."
2402+msgstr ""
2403+
2404+#: bzrlib/builtins.py:2243
2405+msgid ":Revision filtering:"
2406+msgstr ""
2407+
2408+#: bzrlib/builtins.py:2245
2409+msgid ""
2410+" The -r option can be used to specify what revision or range of revisions\n"
2411+" to filter against. The various forms are shown below::"
2412+msgstr ""
2413+
2414+#: bzrlib/builtins.py:2248
2415+msgid ""
2416+" -rX display revision X\n"
2417+" -rX.. display revision X and later\n"
2418+" -r..Y display up to and including revision Y\n"
2419+" -rX..Y display from X to Y inclusive"
2420+msgstr ""
2421+
2422+#: bzrlib/builtins.py:2253
2423+msgid ""
2424+" See ``bzr help revisionspec`` for details on how to specify X and Y.\n"
2425+" Some common examples are given below::"
2426+msgstr ""
2427+
2428+#: bzrlib/builtins.py:2256
2429+msgid ""
2430+" -r-1 show just the tip\n"
2431+" -r-10.. show the last 10 mainline revisions\n"
2432+" -rsubmit:.. show what's new on this branch\n"
2433+" -rancestor:path.. show changes since the common ancestor of this\n"
2434+" branch and the one at location path\n"
2435+" -rdate:yesterday.. show changes since yesterday"
2436+msgstr ""
2437+
2438+#: bzrlib/builtins.py:2263
2439+msgid ""
2440+" When logging a range of revisions using -rX..Y, log starts at\n"
2441+" revision Y and searches back in history through the primary\n"
2442+" (\"left-hand\") parents until it finds X. When logging just the\n"
2443+" top level (using -n1), an error is reported if X is not found\n"
2444+" along the way. If multi-level logging is used (-n0), X may be\n"
2445+" a nested merge revision and the log will be truncated accordingly."
2446+msgstr ""
2447+
2448+#: bzrlib/builtins.py:2270
2449+msgid ":Path filtering:"
2450+msgstr ""
2451+
2452+#: bzrlib/builtins.py:2272
2453+msgid ""
2454+" If parameters are given and the first one is not a branch, the log\n"
2455+" will be filtered to show only those revisions that changed the\n"
2456+" nominated files or directories."
2457+msgstr ""
2458+
2459+#: bzrlib/builtins.py:2276
2460+msgid ""
2461+" Filenames are interpreted within their historical context. To log a\n"
2462+" deleted file, specify a revision range so that the file existed at\n"
2463+" the end or start of the range."
2464+msgstr ""
2465+
2466+#: bzrlib/builtins.py:2280
2467+msgid ""
2468+" Historical context is also important when interpreting pathnames of\n"
2469+" renamed files/directories. Consider the following example:"
2470+msgstr ""
2471+
2472+#: bzrlib/builtins.py:2283
2473+msgid ""
2474+" * revision 1: add tutorial.txt\n"
2475+" * revision 2: modify tutorial.txt\n"
2476+" * revision 3: rename tutorial.txt to guide.txt; add tutorial.txt"
2477+msgstr ""
2478+
2479+#: bzrlib/builtins.py:2287
2480+msgid " In this case:"
2481+msgstr ""
2482+
2483+#: bzrlib/builtins.py:2289
2484+msgid " * ``bzr log guide.txt`` will log the file added in revision 1"
2485+msgstr ""
2486+
2487+#: bzrlib/builtins.py:2291
2488+msgid " * ``bzr log tutorial.txt`` will log the new file added in revision 3"
2489+msgstr ""
2490+
2491+#: bzrlib/builtins.py:2293
2492+msgid ""
2493+" * ``bzr log -r2 -p tutorial.txt`` will show the changes made to\n"
2494+" the original file in revision 2."
2495+msgstr ""
2496+
2497+#: bzrlib/builtins.py:2296
2498+msgid ""
2499+" * ``bzr log -r2 -p guide.txt`` will display an error message as there\n"
2500+" was no file called guide.txt in revision 2."
2501+msgstr ""
2502+
2503+#: bzrlib/builtins.py:2299
2504+msgid ""
2505+" Renames are always followed by log. By design, there is no need to\n"
2506+" explicitly ask for this (and no way to stop logging a file back\n"
2507+" until it was last renamed)."
2508+msgstr ""
2509+
2510+#: bzrlib/builtins.py:2303
2511+msgid ":Other filtering:"
2512+msgstr ""
2513+
2514+#: bzrlib/builtins.py:2305
2515+msgid ""
2516+" The --message option can be used for finding revisions that match a\n"
2517+" regular expression in a commit message."
2518+msgstr ""
2519+
2520+#: bzrlib/builtins.py:2308
2521+msgid ":Tips & tricks:"
2522+msgstr ""
2523+
2524+#: bzrlib/builtins.py:2310
2525+msgid ""
2526+" GUI tools and IDEs are often better at exploring history than command\n"
2527+" line tools: you may prefer qlog or viz from qbzr or bzr-gtk, the\n"
2528+" bzr-explorer shell, or the Loggerhead web interface. See the Plugin\n"
2529+" Guide <http://doc.bazaar.canonical.com/plugins/en/> and\n"
2530+" <http://wiki.bazaar.canonical.com/IDEIntegration>. "
2531+msgstr ""
2532+
2533+#: bzrlib/builtins.py:2316
2534+msgid " You may find it useful to add the aliases below to ``bazaar.conf``::"
2535+msgstr ""
2536+
2537+#: bzrlib/builtins.py:2318
2538+msgid ""
2539+" [ALIASES]\n"
2540+" tip = log -r-1\n"
2541+" top = log -l10 --line\n"
2542+" show = log -v -p"
2543+msgstr ""
2544+
2545+#: bzrlib/builtins.py:2323
2546+msgid ""
2547+" ``bzr tip`` will then show the latest revision while ``bzr top``\n"
2548+" will show the last 10 mainline revisions. To see the details of a\n"
2549+" particular revision X, ``bzr show -rX``."
2550+msgstr ""
2551+
2552+#: bzrlib/builtins.py:2327
2553+msgid ""
2554+" If you are interested in looking deeper into a particular merge X,\n"
2555+" use ``bzr log -n0 -rX``."
2556+msgstr ""
2557+
2558+#: bzrlib/builtins.py:2330
2559+msgid ""
2560+" ``bzr log -v`` on a branch with lots of history is currently\n"
2561+" very slow. A fix for this issue is currently under development.\n"
2562+" With or without that fix, it is recommended that a revision range\n"
2563+" be given when using the -v option."
2564+msgstr ""
2565+
2566+#: bzrlib/builtins.py:2335
2567+msgid ""
2568+" bzr has a generic full-text matching plugin, bzr-search, that can be\n"
2569+" used to find revisions matching user names, commit messages, etc.\n"
2570+" Among other features, this plugin can find all revisions containing\n"
2571+" a list of words but not others."
2572+msgstr ""
2573+
2574+#: bzrlib/builtins.py:2340
2575+msgid ""
2576+" When exploring non-mainline history on large projects with deep\n"
2577+" history, the performance of log can be greatly improved by installing\n"
2578+" the historycache plugin. This plugin buffers historical information\n"
2579+" trading disk space for faster speed."
2580+msgstr ""
2581+
2582+# help of 'forward' option of 'log' command
2583+#: bzrlib/builtins.py:2349
2584+msgid "Show from oldest to newest."
2585+msgstr ""
2586+
2587+# help of 'verbose' option of 'log' command
2588+#: bzrlib/builtins.py:2352
2589+msgid "Show files changed in each revision."
2590+msgstr ""
2591+
2592+# help of 'change' option of 'log' command
2593+#: bzrlib/builtins.py:2358
2594+msgid "Show just the specified revision. See also \"help revisionspec\"."
2595+msgstr ""
2596+
2597+# help of 'authors' option of 'log' command
2598+#: bzrlib/builtins.py:2362
2599+msgid "What names to list as authors - first, all or committer."
2600+msgstr ""
2601+
2602+# title of 'authors' option of 'log' command
2603+#: bzrlib/builtins.py:2363
2604+msgid "Authors"
2605+msgstr ""
2606+
2607+# help of 'levels' option of 'log' command
2608+#: bzrlib/builtins.py:2368
2609+msgid "Number of levels to display - 0 for all, 1 for flat."
2610+msgstr ""
2611+
2612+# help of 'message' option of 'log' command
2613+#: bzrlib/builtins.py:2373
2614+msgid "Show revisions whose message matches this regular expression."
2615+msgstr ""
2616+
2617+# help of 'limit' option of 'log' command
2618+#: bzrlib/builtins.py:2378
2619+msgid "Limit the output to the first N revisions."
2620+msgstr ""
2621+
2622+# help of 'show-diff' option of 'log' command
2623+#: bzrlib/builtins.py:2383
2624+msgid "Show changes made in each revision as a patch."
2625+msgstr ""
2626+
2627+# help of 'include-merges' option of 'log' command
2628+#: bzrlib/builtins.py:2385
2629+msgid "Show merged revisions like --levels 0 does."
2630+msgstr ""
2631+
2632+# help of 'exclude-common-ancestry' option of 'log' command
2633+#: bzrlib/builtins.py:2387
2634+msgid ""
2635+"Display only the revisions that are not part of both ancestries (require -"
2636+"rX..Y)"
2637+msgstr ""
2638+
2639+#: bzrlib/builtins.py:2602
2640+msgid ""
2641+"List files in a tree.\n"
2642+" "
2643+msgstr ""
2644+
2645+# help of 'recursive' option of 'ls' command
2646+#: bzrlib/builtins.py:2611
2647+msgid "Recurse into subdirectories."
2648+msgstr ""
2649+
2650+# help of 'from-root' option of 'ls' command
2651+#: bzrlib/builtins.py:2613
2652+msgid "Print paths relative to the root of the branch."
2653+msgstr ""
2654+
2655+# help of 'unknown' option of 'ls' command
2656+#: bzrlib/builtins.py:2615
2657+msgid "Print unknown files."
2658+msgstr ""
2659+
2660+# help of 'versioned' option of 'ls' command
2661+#: bzrlib/builtins.py:2616
2662+msgid "Print versioned files."
2663+msgstr ""
2664+
2665+# help of 'ignored' option of 'ls' command
2666+#: bzrlib/builtins.py:2619
2667+msgid "Print ignored files."
2668+msgstr ""
2669+
2670+# help of 'kind' option of 'ls' command
2671+#: bzrlib/builtins.py:2621
2672+msgid "List entries of a particular kind: file, directory, symlink."
2673+msgstr ""
2674+
2675+#: bzrlib/builtins.py:2733
2676+msgid "Ignore specified files or patterns."
2677+msgstr ""
2678+
2679+#: bzrlib/builtins.py:2735
2680+msgid "See ``bzr help patterns`` for details on the syntax of patterns."
2681+msgstr ""
2682+
2683+#: bzrlib/builtins.py:2737
2684+msgid ""
2685+"If a .bzrignore file does not exist, the ignore command\n"
2686+"will create one and add the specified files or patterns to the newly\n"
2687+"created file. The ignore command will also automatically add the \n"
2688+".bzrignore file to be versioned. Creating a .bzrignore file without\n"
2689+"the use of the ignore command will require an explicit add command."
2690+msgstr ""
2691+
2692+#: bzrlib/builtins.py:2743
2693+msgid ""
2694+"To remove patterns from the ignore list, edit the .bzrignore file.\n"
2695+"After adding, editing or deleting that file either indirectly by\n"
2696+"using this command or directly by using an editor, be sure to commit\n"
2697+"it."
2698+msgstr ""
2699+
2700+#: bzrlib/builtins.py:2748
2701+msgid ""
2702+"Bazaar also supports a global ignore file ~/.bazaar/ignore. On Windows\n"
2703+"the global ignore file can be found in the application data directory as\n"
2704+"C:\\Documents and Settings\\<user>\\Application Data\\Bazaar\\2.0\\ignore.\n"
2705+"Global ignores are not touched by this command. The global ignore file\n"
2706+"can be edited directly using an editor."
2707+msgstr ""
2708+
2709+#: bzrlib/builtins.py:2754
2710+msgid ""
2711+"Patterns prefixed with '!' are exceptions to ignore patterns and take\n"
2712+"precedence over regular ignores. Such exceptions are used to specify\n"
2713+"files that should be versioned which would otherwise be ignored."
2714+msgstr ""
2715+
2716+#: bzrlib/builtins.py:2758
2717+msgid ""
2718+"Patterns prefixed with '!!' act as regular ignore patterns, but have\n"
2719+"precedence over the '!' exception patterns."
2720+msgstr ""
2721+
2722+#: bzrlib/builtins.py:2761
2723+msgid ""
2724+":Notes: \n"
2725+" \n"
2726+"* Ignore patterns containing shell wildcards must be quoted from\n"
2727+" the shell on Unix."
2728+msgstr ""
2729+
2730+#: bzrlib/builtins.py:2766
2731+msgid ""
2732+"* Ignore patterns starting with \"#\" act as comments in the ignore file.\n"
2733+" To ignore patterns that begin with that character, use the \"RE:\" prefix."
2734+msgstr ""
2735+
2736+#: bzrlib/builtins.py:2769
2737+msgid ""
2738+":Examples:\n"
2739+" Ignore the top level Makefile::"
2740+msgstr ""
2741+
2742+#: bzrlib/builtins.py:2772
2743+msgid " bzr ignore ./Makefile"
2744+msgstr ""
2745+
2746+#: bzrlib/builtins.py:2774
2747+msgid " Ignore .class files in all directories...::"
2748+msgstr ""
2749+
2750+#: bzrlib/builtins.py:2776
2751+msgid " bzr ignore \"*.class\""
2752+msgstr ""
2753+
2754+#: bzrlib/builtins.py:2778
2755+msgid " ...but do not ignore \"special.class\"::"
2756+msgstr ""
2757+
2758+#: bzrlib/builtins.py:2780
2759+msgid " bzr ignore \"!special.class\""
2760+msgstr ""
2761+
2762+#: bzrlib/builtins.py:2782
2763+msgid " Ignore files whose name begins with the \"#\" character::"
2764+msgstr ""
2765+
2766+#: bzrlib/builtins.py:2784
2767+msgid " bzr ignore \"RE:^#\""
2768+msgstr ""
2769+
2770+#: bzrlib/builtins.py:2786
2771+msgid " Ignore .o files under the lib directory::"
2772+msgstr ""
2773+
2774+#: bzrlib/builtins.py:2788
2775+msgid " bzr ignore \"lib/**/*.o\""
2776+msgstr ""
2777+
2778+#: bzrlib/builtins.py:2792
2779+msgid " bzr ignore \"RE:lib/.*\\.o\""
2780+msgstr ""
2781+
2782+#: bzrlib/builtins.py:2794
2783+msgid " Ignore everything but the \"debian\" toplevel directory::"
2784+msgstr ""
2785+
2786+#: bzrlib/builtins.py:2796
2787+msgid ""
2788+" bzr ignore \"RE:(?!debian/).*\"\n"
2789+" \n"
2790+" Ignore everything except the \"local\" toplevel directory,\n"
2791+" but always ignore autosave files ending in ~, even under local/::\n"
2792+" \n"
2793+" bzr ignore \"*\"\n"
2794+" bzr ignore \"!./local\"\n"
2795+" bzr ignore \"!!*~\""
2796+msgstr ""
2797+
2798+# help of 'default-rules' option of 'ignore' command
2799+#: bzrlib/builtins.py:2810
2800+msgid "Display the default ignore rules that bzr uses."
2801+msgstr ""
2802+
2803+#: bzrlib/builtins.py:2858
2804+msgid "List ignored files and the patterns that matched them."
2805+msgstr ""
2806+
2807+#: bzrlib/builtins.py:2860
2808+msgid ""
2809+"List all the ignored files and the ignore pattern that caused the file to\n"
2810+"be ignored."
2811+msgstr ""
2812+
2813+#: bzrlib/builtins.py:2863
2814+msgid "Alternatively, to list just the files::"
2815+msgstr ""
2816+
2817+#: bzrlib/builtins.py:2865
2818+msgid " bzr ls --ignored"
2819+msgstr ""
2820+
2821+#: bzrlib/builtins.py:2906
2822+msgid "Export current or past revision to a destination directory or archive."
2823+msgstr ""
2824+
2825+#: bzrlib/builtins.py:2908
2826+msgid "If no revision is specified this exports the last committed revision."
2827+msgstr ""
2828+
2829+#: bzrlib/builtins.py:2910
2830+msgid ""
2831+"Format may be an \"exporter\" name, such as tar, tgz, tbz2. If none is\n"
2832+"given, try to find the format with the extension. If no extension\n"
2833+"is found exports to a directory (equivalent to --format=dir)."
2834+msgstr ""
2835+
2836+#: bzrlib/builtins.py:2914
2837+msgid ""
2838+"If root is supplied, it will be used as the root directory inside\n"
2839+"container formats (tar, zip, etc). If it is not supplied it will default\n"
2840+"to the exported filename. The root option has no effect for 'dir' format."
2841+msgstr ""
2842+
2843+#: bzrlib/builtins.py:2918
2844+msgid ""
2845+"If branch is omitted then the branch containing the current working\n"
2846+"directory will be used."
2847+msgstr ""
2848+
2849+#: bzrlib/builtins.py:2921
2850+msgid "Note: Export of tree with non-ASCII filenames to zip is not supported."
2851+msgstr ""
2852+
2853+#: bzrlib/builtins.py:2923
2854+msgid ""
2855+" ================= =========================\n"
2856+" Supported formats Autodetected by extension\n"
2857+" ================= =========================\n"
2858+" dir (none)\n"
2859+" tar .tar\n"
2860+" tbz2 .tar.bz2, .tbz2\n"
2861+" tgz .tar.gz, .tgz\n"
2862+" zip .zip\n"
2863+" ================= ========================="
2864+msgstr ""
2865+
2866+# help of 'format' option of 'export' command
2867+#: bzrlib/builtins.py:2937
2868+msgid "Type of file to export to."
2869+msgstr ""
2870+
2871+# help of 'filters' option of 'export' command
2872+#: bzrlib/builtins.py:2940
2873+msgid "Apply content filters to export the convenient form."
2874+msgstr ""
2875+
2876+# help of 'root' option of 'export' command
2877+#: bzrlib/builtins.py:2944
2878+msgid "Name of the root directory inside the exported file."
2879+msgstr ""
2880+
2881+# help of 'per-file-timestamps' option of 'export' command
2882+#: bzrlib/builtins.py:2946
2883+msgid ""
2884+"Set modification time of files to that of the last revision in which it was "
2885+"changed."
2886+msgstr ""
2887+
2888+#: bzrlib/builtins.py:2970
2889+msgid "Write the contents of a file as of a given revision to standard output."
2890+msgstr ""
2891+
2892+#: bzrlib/builtins.py:2972
2893+msgid "If no revision is nominated, the last revision is used."
2894+msgstr ""
2895+
2896+#: bzrlib/builtins.py:2974
2897+msgid ""
2898+"Note: Take care to redirect standard output when using this command on a\n"
2899+"binary file."
2900+msgstr ""
2901+
2902+# help of 'filters' option of 'cat' command
2903+#: bzrlib/builtins.py:2981
2904+msgid "Apply content filters to display the convenience form."
2905+msgstr ""
2906+
2907+#: bzrlib/builtins.py:3063
2908+msgid "Commit changes into a new revision."
2909+msgstr ""
2910+
2911+#: bzrlib/builtins.py:3065
2912+msgid ""
2913+"An explanatory message needs to be given for each commit. This is\n"
2914+"often done by using the --message option (getting the message from the\n"
2915+"command line) or by using the --file option (getting the message from\n"
2916+"a file). If neither of these options is given, an editor is opened for\n"
2917+"the user to enter the message. To see the changed files in the\n"
2918+"boilerplate text loaded into the editor, use the --show-diff option."
2919+msgstr ""
2920+
2921+#: bzrlib/builtins.py:3072
2922+msgid ""
2923+"By default, the entire tree is committed and the person doing the\n"
2924+"commit is assumed to be the author. These defaults can be overridden\n"
2925+"as explained below."
2926+msgstr ""
2927+
2928+#: bzrlib/builtins.py:3076
2929+msgid ":Selective commits:"
2930+msgstr ""
2931+
2932+#: bzrlib/builtins.py:3078
2933+msgid ""
2934+" If selected files are specified, only changes to those files are\n"
2935+" committed. If a directory is specified then the directory and\n"
2936+" everything within it is committed."
2937+msgstr ""
2938+
2939+#: bzrlib/builtins.py:3082
2940+msgid ""
2941+" When excludes are given, they take precedence over selected files.\n"
2942+" For example, to commit only changes within foo, but not changes\n"
2943+" within foo/bar::"
2944+msgstr ""
2945+
2946+#: bzrlib/builtins.py:3086
2947+msgid " bzr commit foo -x foo/bar"
2948+msgstr ""
2949+
2950+#: bzrlib/builtins.py:3088
2951+msgid " A selective commit after a merge is not yet supported."
2952+msgstr ""
2953+
2954+#: bzrlib/builtins.py:3090
2955+msgid ":Custom authors:"
2956+msgstr ""
2957+
2958+#: bzrlib/builtins.py:3092
2959+msgid ""
2960+" If the author of the change is not the same person as the committer,\n"
2961+" you can specify the author's name using the --author option. The\n"
2962+" name should be in the same format as a committer-id, e.g.\n"
2963+" \"John Doe <jdoe@example.com>\". If there is more than one author of\n"
2964+" the change you can specify the option multiple times, once for each\n"
2965+" author."
2966+msgstr ""
2967+
2968+#: bzrlib/builtins.py:3099
2969+msgid ":Checks:"
2970+msgstr ""
2971+
2972+#: bzrlib/builtins.py:3101
2973+msgid ""
2974+" A common mistake is to forget to add a new file or directory before\n"
2975+" running the commit command. The --strict option checks for unknown\n"
2976+" files and aborts the commit if any are found. More advanced pre-commit\n"
2977+" checks can be implemented by defining hooks. See ``bzr help hooks``\n"
2978+" for details."
2979+msgstr ""
2980+
2981+#: bzrlib/builtins.py:3107
2982+msgid ":Things to note:"
2983+msgstr ""
2984+
2985+#: bzrlib/builtins.py:3109
2986+msgid ""
2987+" If you accidentially commit the wrong changes or make a spelling\n"
2988+" mistake in the commit message say, you can use the uncommit command\n"
2989+" to undo it. See ``bzr help uncommit`` for details."
2990+msgstr ""
2991+
2992+#: bzrlib/builtins.py:3113
2993+msgid ""
2994+" Hooks can also be configured to run after a commit. This allows you\n"
2995+" to trigger updates to external systems like bug trackers. The --fixes\n"
2996+" option can be used to record the association between a revision and\n"
2997+" one or more bugs. See ``bzr help bugs`` for details."
2998+msgstr ""
2999+
3000+# help of 'exclude' option of 'commit' command
3001+#: bzrlib/builtins.py:3123
3002+msgid "Do not consider changes made to a given path."
3003+msgstr ""
3004+
3005+# help of 'message' option of 'commit' command
3006+#: bzrlib/builtins.py:3126
3007+msgid "Description of the new revision."
3008+msgstr ""
3009+
3010+# help of 'unchanged' option of 'commit' command
3011+#: bzrlib/builtins.py:3129
3012+msgid "Commit even if nothing has changed."
3013+msgstr ""
3014+
3015+# help of 'file' option of 'commit' command
3016+#: bzrlib/builtins.py:3133
3017+msgid "Take commit message from this file."
3018+msgstr ""
3019+
3020+# help of 'strict' option of 'commit' command
3021+#: bzrlib/builtins.py:3135
3022+msgid "Refuse to commit if there are unknown files in the working tree."
3023+msgstr ""
3024+
3025+# help of 'commit-time' option of 'commit' command
3026+#: bzrlib/builtins.py:3138
3027+msgid ""
3028+"Manually set a commit time using commit date format, e.g. '2009-10-10 "
3029+"08:00:00 +0100'."
3030+msgstr ""
3031+
3032+# help of 'fixes' option of 'commit' command
3033+#: bzrlib/builtins.py:3141
3034+msgid "Mark a bug as being fixed by this revision (see \"bzr help bugs\")."
3035+msgstr ""
3036+
3037+# help of 'author' option of 'commit' command
3038+#: bzrlib/builtins.py:3144
3039+msgid "Set the author's name, if it's different from the committer."
3040+msgstr ""
3041+
3042+# help of 'local' option of 'commit' command
3043+#: bzrlib/builtins.py:3147
3044+msgid ""
3045+"Perform a local commit in a bound branch. Local commits are not pushed to "
3046+"the master branch until a normal commit is performed."
3047+msgstr ""
3048+
3049+# help of 'show-diff' option of 'commit' command
3050+#: bzrlib/builtins.py:3153
3051+msgid ""
3052+"When no message is supplied, show the diff along with the status summary in "
3053+"the message editor."
3054+msgstr ""
3055+
3056+# help of 'lossy' option of 'commit' command
3057+#: bzrlib/builtins.py:3156
3058+msgid ""
3059+"When committing to a foreign version control system do not push data that "
3060+"can not be natively represented."
3061+msgstr ""
3062+
3063+#: bzrlib/builtins.py:3308
3064+msgid ""
3065+"Validate working tree structure, branch consistency and repository history."
3066+msgstr ""
3067+
3068+#: bzrlib/builtins.py:3310
3069+msgid ""
3070+"This command checks various invariants about branch and repository storage\n"
3071+"to detect data corruption or bzr bugs."
3072+msgstr ""
3073+
3074+#: bzrlib/builtins.py:3313
3075+msgid ""
3076+"The working tree and branch checks will only give output if a problem is\n"
3077+"detected. The output fields of the repository check are:"
3078+msgstr ""
3079+
3080+#: bzrlib/builtins.py:3316
3081+msgid ""
3082+"revisions\n"
3083+" This is just the number of revisions checked. It doesn't\n"
3084+" indicate a problem."
3085+msgstr ""
3086+
3087+#: bzrlib/builtins.py:3320
3088+msgid ""
3089+"versionedfiles\n"
3090+" This is just the number of versionedfiles checked. It\n"
3091+" doesn't indicate a problem."
3092+msgstr ""
3093+
3094+#: bzrlib/builtins.py:3324
3095+msgid ""
3096+"unreferenced ancestors\n"
3097+" Texts that are ancestors of other texts, but\n"
3098+" are not properly referenced by the revision ancestry. This is a\n"
3099+" subtle problem that Bazaar can work around."
3100+msgstr ""
3101+
3102+#: bzrlib/builtins.py:3329
3103+msgid ""
3104+"unique file texts\n"
3105+" This is the total number of unique file contents\n"
3106+" seen in the checked revisions. It does not indicate a problem."
3107+msgstr ""
3108+
3109+#: bzrlib/builtins.py:3333
3110+msgid ""
3111+"repeated file texts\n"
3112+" This is the total number of repeated texts seen\n"
3113+" in the checked revisions. Texts can be repeated when their file\n"
3114+" entries are modified, but the file contents are not. It does not\n"
3115+" indicate a problem."
3116+msgstr ""
3117+
3118+#: bzrlib/builtins.py:3339
3119+msgid ""
3120+"If no restrictions are specified, all Bazaar data that is found at the "
3121+"given\n"
3122+"location will be checked."
3123+msgstr ""
3124+
3125+#: bzrlib/builtins.py:3342
3126+msgid ":Examples:"
3127+msgstr ""
3128+
3129+#: bzrlib/builtins.py:3344
3130+msgid " Check the tree and branch at 'foo'::"
3131+msgstr ""
3132+
3133+#: bzrlib/builtins.py:3346
3134+msgid " bzr check --tree --branch foo"
3135+msgstr ""
3136+
3137+#: bzrlib/builtins.py:3348
3138+msgid " Check only the repository at 'bar'::"
3139+msgstr ""
3140+
3141+#: bzrlib/builtins.py:3350
3142+msgid " bzr check --repo bar"
3143+msgstr ""
3144+
3145+#: bzrlib/builtins.py:3352
3146+msgid " Check everything at 'baz'::"
3147+msgstr ""
3148+
3149+#: bzrlib/builtins.py:3354
3150+msgid " bzr check baz"
3151+msgstr ""
3152+
3153+# help of 'branch' option of 'check' command
3154+#: bzrlib/builtins.py:3360
3155+msgid "Check the branch related to the current directory."
3156+msgstr ""
3157+
3158+# help of 'repo' option of 'check' command
3159+#: bzrlib/builtins.py:3362
3160+msgid "Check the repository related to the current directory."
3161+msgstr ""
3162+
3163+# help of 'tree' option of 'check' command
3164+#: bzrlib/builtins.py:3364
3165+msgid "Check the working tree related to the current directory."
3166+msgstr ""
3167+
3168+#: bzrlib/builtins.py:3378
3169+msgid "Upgrade a repository, branch or working tree to a newer format."
3170+msgstr ""
3171+
3172+#: bzrlib/builtins.py:3380
3173+msgid ""
3174+"When the default format has changed after a major new release of\n"
3175+"Bazaar, you may be informed during certain operations that you\n"
3176+"should upgrade. Upgrading to a newer format may improve performance\n"
3177+"or make new features available. It may however limit interoperability\n"
3178+"with older repositories or with older versions of Bazaar."
3179+msgstr ""
3180+
3181+#: bzrlib/builtins.py:3386
3182+msgid ""
3183+"If you wish to upgrade to a particular format rather than the\n"
3184+"current default, that can be specified using the --format option.\n"
3185+"As a consequence, you can use the upgrade command this way to\n"
3186+"\"downgrade\" to an earlier format, though some conversions are\n"
3187+"a one way process (e.g. changing from the 1.x default to the\n"
3188+"2.x default) so downgrading is not always possible."
3189+msgstr ""
3190+
3191+#: bzrlib/builtins.py:3393
3192+msgid ""
3193+"A backup.bzr.~#~ directory is created at the start of the conversion\n"
3194+"process (where # is a number). By default, this is left there on\n"
3195+"completion. If the conversion fails, delete the new .bzr directory\n"
3196+"and rename this one back in its place. Use the --clean option to ask\n"
3197+"for the backup.bzr directory to be removed on successful conversion.\n"
3198+"Alternatively, you can delete it by hand if everything looks good\n"
3199+"afterwards."
3200+msgstr ""
3201+
3202+#: bzrlib/builtins.py:3401
3203+msgid ""
3204+"If the location given is a shared repository, dependent branches\n"
3205+"are also converted provided the repository converts successfully.\n"
3206+"If the conversion of a branch fails, remaining branches are still\n"
3207+"tried."
3208+msgstr ""
3209+
3210+#: bzrlib/builtins.py:3406
3211+msgid ""
3212+"For more information on upgrades, see the Bazaar Upgrade Guide,\n"
3213+"http://doc.bazaar.canonical.com/latest/en/upgrade-guide/."
3214+msgstr ""
3215+
3216+# help of 'format' option of 'upgrade' command
3217+#: bzrlib/builtins.py:3414
3218+msgid "Upgrade to a specific format. See \"bzr help formats\" for details."
3219+msgstr ""
3220+
3221+# title of 'format' option of 'init' command
3222+#: bzrlib/builtins.py:3418
3223+msgid "Branch format"
3224+msgstr ""
3225+
3226+# help of 'clean' option of 'upgrade' command
3227+#: bzrlib/builtins.py:3420
3228+msgid "Remove the backup.bzr directory if successful."
3229+msgstr ""
3230+
3231+#: bzrlib/builtins.py:3437
3232+msgid "Show or set bzr user id."
3233+msgstr ""
3234+
3235+#: bzrlib/builtins.py:3439
3236+msgid ""
3237+":Examples:\n"
3238+" Show the email of the current user::"
3239+msgstr ""
3240+
3241+#: bzrlib/builtins.py:3442
3242+msgid " bzr whoami --email"
3243+msgstr ""
3244+
3245+#: bzrlib/builtins.py:3444
3246+msgid " Set the current user::"
3247+msgstr ""
3248+
3249+#: bzrlib/builtins.py:3446
3250+msgid " bzr whoami \"Frank Chu <fchu@example.com>\""
3251+msgstr ""
3252+
3253+# help of 'email' option of 'whoami' command
3254+#: bzrlib/builtins.py:3450
3255+msgid "Display email address only."
3256+msgstr ""
3257+
3258+# help of 'branch' option of 'whoami' command
3259+#: bzrlib/builtins.py:3452
3260+msgid "Set identity for the current branch instead of globally."
3261+msgstr ""
3262+
3263+#: bzrlib/builtins.py:3498
3264+msgid "Print or set the branch nickname."
3265+msgstr ""
3266+
3267+#: bzrlib/builtins.py:3500
3268+msgid ""
3269+"If unset, the tree root directory name is used as the nickname.\n"
3270+"To print the current nickname, execute with no argument."
3271+msgstr ""
3272+
3273+#: bzrlib/builtins.py:3503
3274+msgid ""
3275+"Bound branches use the nickname of its master branch unless it is set\n"
3276+"locally."
3277+msgstr ""
3278+
3279+#: bzrlib/builtins.py:3523
3280+msgid "Set/unset and display aliases."
3281+msgstr ""
3282+
3283+#: bzrlib/builtins.py:3525
3284+msgid ""
3285+":Examples:\n"
3286+" Show the current aliases::"
3287+msgstr ""
3288+
3289+#: bzrlib/builtins.py:3528
3290+msgid " bzr alias"
3291+msgstr ""
3292+
3293+#: bzrlib/builtins.py:3530
3294+msgid " Show the alias specified for 'll'::"
3295+msgstr ""
3296+
3297+#: bzrlib/builtins.py:3532
3298+msgid " bzr alias ll"
3299+msgstr ""
3300+
3301+#: bzrlib/builtins.py:3534
3302+msgid " Set an alias for 'll'::"
3303+msgstr ""
3304+
3305+#: bzrlib/builtins.py:3536
3306+msgid " bzr alias ll=\"log --line -r-10..-1\""
3307+msgstr ""
3308+
3309+#: bzrlib/builtins.py:3538
3310+msgid " To remove an alias for 'll'::"
3311+msgstr ""
3312+
3313+#: bzrlib/builtins.py:3540
3314+msgid " bzr alias --remove ll"
3315+msgstr ""
3316+
3317+# help of 'remove' option of 'alias' command
3318+#: bzrlib/builtins.py:3545
3319+msgid "Remove the alias."
3320+msgstr ""
3321+
3322+#: bzrlib/builtins.py:3780
3323+msgid "Show version of bzr."
3324+msgstr ""
3325+
3326+# help of 'short' option of 'version' command
3327+#: bzrlib/builtins.py:3784
3328+msgid "Print just the version number."
3329+msgstr ""
3330+
3331+#: bzrlib/builtins.py:3831
3332+msgid "Perform a three-way merge."
3333+msgstr ""
3334+
3335+#: bzrlib/builtins.py:3833
3336+msgid ""
3337+"The source of the merge can be specified either in the form of a branch,\n"
3338+"or in the form of a path to a file containing a merge directive generated\n"
3339+"with bzr send. If neither is specified, the default is the upstream branch\n"
3340+"or the branch most recently merged using --remember."
3341+msgstr ""
3342+
3343+#: bzrlib/builtins.py:3838
3344+msgid ""
3345+"When merging from a branch, by default bzr will try to merge in all new\n"
3346+"work from the other branch, automatically determining an appropriate base\n"
3347+"revision. If this fails, you may need to give an explicit base."
3348+msgstr ""
3349+
3350+#: bzrlib/builtins.py:3842
3351+msgid ""
3352+"To pick a different ending revision, pass \"--revision OTHER\". bzr will\n"
3353+"try to merge in all new work up to and including revision OTHER."
3354+msgstr ""
3355+
3356+#: bzrlib/builtins.py:3845
3357+msgid ""
3358+"If you specify two values, \"--revision BASE..OTHER\", only revisions BASE\n"
3359+"through OTHER, excluding BASE but including OTHER, will be merged. If this\n"
3360+"causes some revisions to be skipped, i.e. if the destination branch does\n"
3361+"not already contain revision BASE, such a merge is commonly referred to as\n"
3362+"a \"cherrypick\"."
3363+msgstr ""
3364+
3365+#: bzrlib/builtins.py:3851
3366+msgid "Revision numbers are always relative to the source branch."
3367+msgstr ""
3368+
3369+#: bzrlib/builtins.py:3858
3370+msgid "Use bzr resolve when you have fixed a problem. See also bzr conflicts."
3371+msgstr ""
3372+
3373+#: bzrlib/builtins.py:3860
3374+msgid ""
3375+"If there is no default branch set, the first merge will set it. After\n"
3376+"that, you can omit the branch to use the default. To change the\n"
3377+"default, use --remember. The value will only be saved if the remote\n"
3378+"location can be accessed."
3379+msgstr ""
3380+
3381+#: bzrlib/builtins.py:3865
3382+msgid ""
3383+"The results of the merge are placed into the destination working\n"
3384+"directory, where they can be reviewed (with bzr diff), tested, and then\n"
3385+"committed to record the result of the merge."
3386+msgstr ""
3387+
3388+#: bzrlib/builtins.py:3869
3389+msgid ""
3390+"merge refuses to run if there are any uncommitted changes, unless\n"
3391+"--force is given. The --force option can also be used to create a\n"
3392+"merge revision which has more than two parents."
3393+msgstr ""
3394+
3395+#: bzrlib/builtins.py:3873
3396+msgid ""
3397+"If one would like to merge changes from the working tree of the other\n"
3398+"branch without merging any committed revisions, the --uncommitted option\n"
3399+"can be given."
3400+msgstr ""
3401+
3402+#: bzrlib/builtins.py:3877
3403+msgid ""
3404+"To select only some changes to merge, use \"merge -i\", which will prompt\n"
3405+"you to apply each diff hunk and file change, similar to \"shelve\"."
3406+msgstr ""
3407+
3408+#: bzrlib/builtins.py:3880
3409+msgid ""
3410+":Examples:\n"
3411+" To merge all new revisions from bzr.dev::"
3412+msgstr ""
3413+
3414+#: bzrlib/builtins.py:3883
3415+msgid " bzr merge ../bzr.dev"
3416+msgstr ""
3417+
3418+#: bzrlib/builtins.py:3885
3419+msgid " To merge changes up to and including revision 82 from bzr.dev::"
3420+msgstr ""
3421+
3422+#: bzrlib/builtins.py:3887
3423+msgid " bzr merge -r 82 ../bzr.dev"
3424+msgstr ""
3425+
3426+#: bzrlib/builtins.py:3889
3427+msgid " To merge the changes introduced by 82, without previous changes::"
3428+msgstr ""
3429+
3430+#: bzrlib/builtins.py:3891
3431+msgid " bzr merge -r 81..82 ../bzr.dev"
3432+msgstr ""
3433+
3434+#: bzrlib/builtins.py:3893
3435+msgid " To apply a merge directive contained in /tmp/merge::"
3436+msgstr ""
3437+
3438+#: bzrlib/builtins.py:3895
3439+msgid " bzr merge /tmp/merge"
3440+msgstr ""
3441+
3442+#: bzrlib/builtins.py:3897
3443+msgid ""
3444+" To create a merge revision with three parents from two branches\n"
3445+" feature1a and feature1b:"
3446+msgstr ""
3447+
3448+#: bzrlib/builtins.py:3900
3449+msgid ""
3450+" bzr merge ../feature1a\n"
3451+" bzr merge ../feature1b --force\n"
3452+" bzr commit -m 'revision with three parents'"
3453+msgstr ""
3454+
3455+# help of 'force' option of 'merge' command
3456+#: bzrlib/builtins.py:3912
3457+msgid "Merge even if the destination tree has uncommitted changes."
3458+msgstr ""
3459+
3460+# help of 'uncommitted' option of 'merge' command
3461+#: bzrlib/builtins.py:3918
3462+msgid ""
3463+"Apply uncommitted changes from a working copy, instead of branch changes."
3464+msgstr ""
3465+
3466+# help of 'pull' option of 'merge' command
3467+#: bzrlib/builtins.py:3920
3468+msgid ""
3469+"If the destination is already completely merged into the source, pull from "
3470+"the source rather than merging. When this happens, you do not need to "
3471+"commit the result."
3472+msgstr ""
3473+
3474+# help of 'directory' option of 'merge' command
3475+#: bzrlib/builtins.py:3925
3476+msgid ""
3477+"Branch to merge into, rather than the one containing the working directory."
3478+msgstr ""
3479+
3480+# help of 'preview' option of 'merge' command
3481+#: bzrlib/builtins.py:3927
3482+msgid "Instead of merging, show a diff of the merge."
3483+msgstr ""
3484+
3485+# help of 'interactive' option of 'merge' command
3486+#: bzrlib/builtins.py:3929
3487+msgid "Select changes interactively."
3488+msgstr ""
3489+
3490+#: bzrlib/builtins.py:4196
3491+msgid "Redo a merge."
3492+msgstr ""
3493+
3494+#: bzrlib/builtins.py:4198
3495+msgid ""
3496+"Use this if you want to try a different merge technique while resolving\n"
3497+"conflicts. Some merge techniques are better than others, and remerge\n"
3498+"lets you try different ones on different files."
3499+msgstr ""
3500+
3501+#: bzrlib/builtins.py:4202
3502+msgid ""
3503+"The options for remerge have the same meaning and defaults as the ones for\n"
3504+"merge. The difference is that remerge can (only) be run when there is a\n"
3505+"pending merge, and it lets you specify particular files."
3506+msgstr ""
3507+
3508+#: bzrlib/builtins.py:4206
3509+msgid ""
3510+":Examples:\n"
3511+" Re-do the merge of all conflicted files, and show the base text in\n"
3512+" conflict regions, in addition to the usual THIS and OTHER texts::"
3513+msgstr ""
3514+
3515+#: bzrlib/builtins.py:4210
3516+msgid " bzr remerge --show-base"
3517+msgstr ""
3518+
3519+#: bzrlib/builtins.py:4212
3520+msgid ""
3521+" Re-do the merge of \"foobar\", using the weave merge algorithm, with\n"
3522+" additional processing to reduce the size of conflict regions::"
3523+msgstr ""
3524+
3525+#: bzrlib/builtins.py:4215
3526+msgid " bzr remerge --merge-type weave --reprocess foobar"
3527+msgstr ""
3528+
3529+# help of 'show-base' option of 'merge' command
3530+#: bzrlib/builtins.py:4222
3531+msgid "Show base revision text in conflicts."
3532+msgstr ""
3533+
3534+#: bzrlib/builtins.py:4290
3535+msgid "Revert files to a previous revision."
3536+msgstr ""
3537+
3538+#: bzrlib/builtins.py:4292
3539+msgid ""
3540+"Giving a list of files will revert only those files. Otherwise, all files\n"
3541+"will be reverted. If the revision is not specified with '--revision', the\n"
3542+"last committed revision is used."
3543+msgstr ""
3544+
3545+#: bzrlib/builtins.py:4296
3546+msgid ""
3547+"To remove only some changes, without reverting to a prior version, use\n"
3548+"merge instead. For example, \"merge . -r -2..-3\" (don't forget the \".\")\n"
3549+"will remove the changes introduced by the second last commit (-2), without\n"
3550+"affecting the changes introduced by the last commit (-1). To remove\n"
3551+"certain changes on a hunk-by-hunk basis, see the shelve command."
3552+msgstr ""
3553+
3554+#: bzrlib/builtins.py:4302
3555+msgid ""
3556+"By default, any files that have been manually changed will be backed up\n"
3557+"first. (Files changed only by merge are not backed up.) Backup files have\n"
3558+"'.~#~' appended to their name, where # is a number."
3559+msgstr ""
3560+
3561+#: bzrlib/builtins.py:4306
3562+msgid ""
3563+"When you provide files, you can use their current pathname or the pathname\n"
3564+"from the target revision. So you can use revert to \"undelete\" a file by\n"
3565+"name. If you name a directory, all the contents of that directory will be\n"
3566+"reverted."
3567+msgstr ""
3568+
3569+#: bzrlib/builtins.py:4311
3570+msgid ""
3571+"If you have newly added files since the target revision, they will be\n"
3572+"removed. If the files to be removed have been changed, backups will be\n"
3573+"created as above. Directories containing unknown files will not be\n"
3574+"deleted."
3575+msgstr ""
3576+
3577+#: bzrlib/builtins.py:4316
3578+msgid ""
3579+"The working tree contains a list of revisions that have been merged but\n"
3580+"not yet committed. These revisions will be included as additional parents\n"
3581+"of the next commit. Normally, using revert clears that list as well as\n"
3582+"reverting the files. If any files are specified, revert leaves the list\n"
3583+"of uncommitted merges alone and reverts only the files. Use ``bzr revert\n"
3584+".`` in the tree root to revert all files but keep the recorded merges,\n"
3585+"and ``bzr revert --forget-merges`` to clear the pending merge list without\n"
3586+"reverting any files."
3587+msgstr ""
3588+
3589+#: bzrlib/builtins.py:4325
3590+msgid ""
3591+"Using \"bzr revert --forget-merges\", it is possible to apply all of the\n"
3592+"changes from a branch in a single revision. To do this, perform the merge\n"
3593+"as desired. Then doing revert with the \"--forget-merges\" option will "
3594+"keep\n"
3595+"the content of the tree as it was, but it will clear the list of pending\n"
3596+"merges. The next commit will then contain all of the changes that are\n"
3597+"present in the other branch, but without any other parent revisions.\n"
3598+"Because this technique forgets where these changes originated, it may\n"
3599+"cause additional conflicts on later merges involving the same source and\n"
3600+"target branches."
3601+msgstr ""
3602+
3603+# help of 'no-backup' option of 'revert' command
3604+#: bzrlib/builtins.py:4339
3605+msgid "Do not save backups of reverted files."
3606+msgstr ""
3607+
3608+# help of 'forget-merges' option of 'revert' command
3609+#: bzrlib/builtins.py:4341
3610+msgid "Remove pending merge marker, without changing any files."
3611+msgstr ""
3612+
3613+#: bzrlib/builtins.py:4372
3614+msgid ""
3615+"Show help on a command or other topic.\n"
3616+" "
3617+msgstr ""
3618+
3619+# help of 'long' option of 'help' command
3620+#: bzrlib/builtins.py:4377
3621+msgid "Show help on all commands."
3622+msgstr ""
3623+
3624+#: bzrlib/builtins.py:4406
3625+msgid "Show unmerged/unpulled revisions between two branches."
3626+msgstr ""
3627+
3628+#: bzrlib/builtins.py:4408
3629+msgid "OTHER_BRANCH may be local or remote."
3630+msgstr ""
3631+
3632+#: bzrlib/builtins.py:4410
3633+msgid ""
3634+"To filter on a range of revisions, you can use the command -r begin..end\n"
3635+"-r revision requests a specific revision, -r ..end or -r begin.. are\n"
3636+"also valid.\n"
3637+" \n"
3638+":Exit values:\n"
3639+" 1 - some missing revisions\n"
3640+" 0 - no missing revisions"
3641+msgstr ""
3642+
3643+#: bzrlib/builtins.py:4420
3644+msgid ""
3645+" Determine the missing revisions between this and the branch at the\n"
3646+" remembered pull location::"
3647+msgstr ""
3648+
3649+#: bzrlib/builtins.py:4423
3650+msgid " bzr missing"
3651+msgstr ""
3652+
3653+#: bzrlib/builtins.py:4425
3654+msgid " Determine the missing revisions between this and another branch::"
3655+msgstr ""
3656+
3657+#: bzrlib/builtins.py:4427
3658+msgid " bzr missing http://server/branch"
3659+msgstr ""
3660+
3661+#: bzrlib/builtins.py:4429
3662+msgid ""
3663+" Determine the missing revisions up to a specific revision on the other\n"
3664+" branch::"
3665+msgstr ""
3666+
3667+#: bzrlib/builtins.py:4432
3668+msgid " bzr missing -r ..-10"
3669+msgstr ""
3670+
3671+#: bzrlib/builtins.py:4434
3672+msgid ""
3673+" Determine the missing revisions up to a specific revision on this\n"
3674+" branch::"
3675+msgstr ""
3676+
3677+#: bzrlib/builtins.py:4437
3678+msgid " bzr missing --my-revision ..-10"
3679+msgstr ""
3680+
3681+# help of 'reverse' option of 'missing' command
3682+#: bzrlib/builtins.py:4444
3683+msgid "Reverse the order of revisions."
3684+msgstr ""
3685+
3686+# help of 'mine-only' option of 'missing' command
3687+#: bzrlib/builtins.py:4446
3688+msgid "Display changes in the local branch only."
3689+msgstr ""
3690+
3691+# help of 'this' option of 'missing' command
3692+#: bzrlib/builtins.py:4447
3693+msgid "Same as --mine-only."
3694+msgstr ""
3695+
3696+# help of 'theirs-only' option of 'missing' command
3697+#: bzrlib/builtins.py:4449
3698+msgid "Display changes in the remote branch only."
3699+msgstr ""
3700+
3701+# help of 'other' option of 'missing' command
3702+#: bzrlib/builtins.py:4450
3703+msgid "Same as --theirs-only."
3704+msgstr ""
3705+
3706+# help of 'revision' option of 'missing' command
3707+#: bzrlib/builtins.py:4455
3708+msgid ""
3709+"Filter on other branch revisions (inclusive). See \"help revisionspec\" for "
3710+"details."
3711+msgstr ""
3712+
3713+# help of 'my-revision' option of 'missing' command
3714+#: bzrlib/builtins.py:4459
3715+msgid ""
3716+"Filter on local branch revisions (inclusive). See \"help revisionspec\" for "
3717+"details."
3718+msgstr ""
3719+
3720+# help of 'include-merges' option of 'missing' command
3721+#: bzrlib/builtins.py:4462
3722+msgid "Show all revisions in addition to the mainline ones."
3723+msgstr ""
3724+
3725+#: bzrlib/builtins.py:4578
3726+msgid "Compress the data within a repository."
3727+msgstr ""
3728+
3729+#: bzrlib/builtins.py:4580
3730+msgid ""
3731+"This operation compresses the data within a bazaar repository. As\n"
3732+"bazaar supports automatic packing of repository, this operation is\n"
3733+"normally not required to be done manually."
3734+msgstr ""
3735+
3736+#: bzrlib/builtins.py:4584
3737+msgid ""
3738+"During the pack operation, bazaar takes a backup of existing repository\n"
3739+"data, i.e. pack files. This backup is eventually removed by bazaar\n"
3740+"automatically when it is safe to do so. To save disk space by removing\n"
3741+"the backed up pack files, the --clean-obsolete-packs option may be\n"
3742+"used."
3743+msgstr ""
3744+
3745+#: bzrlib/builtins.py:4590
3746+msgid ""
3747+"Warning: If you use --clean-obsolete-packs and your machine crashes\n"
3748+"during or immediately after repacking, you may be left with a state\n"
3749+"where the deletion has been written to disk but the new packs have not\n"
3750+"been. In this case the repository may be unusable."
3751+msgstr ""
3752+
3753+# help of 'clean-obsolete-packs' option of 'pack' command
3754+#: bzrlib/builtins.py:4599
3755+msgid "Delete obsolete packs to save disk space."
3756+msgstr ""
3757+
3758+#: bzrlib/builtins.py:4613
3759+msgid "List the installed plugins."
3760+msgstr ""
3761+
3762+#: bzrlib/builtins.py:4615
3763+msgid ""
3764+"This command displays the list of installed plugins including\n"
3765+"version of plugin and a short description of each."
3766+msgstr ""
3767+
3768+#: bzrlib/builtins.py:4618
3769+msgid "--verbose shows the path where each plugin is located."
3770+msgstr ""
3771+
3772+#: bzrlib/builtins.py:4620
3773+msgid ""
3774+"A plugin is an external component for Bazaar that extends the\n"
3775+"revision control system, by adding or replacing code in Bazaar.\n"
3776+"Plugins can do a variety of things, including overriding commands,\n"
3777+"adding new commands, providing additional network transports and\n"
3778+"customizing log output."
3779+msgstr ""
3780+
3781+#: bzrlib/builtins.py:4626
3782+msgid ""
3783+"See the Bazaar Plugin Guide <http://doc.bazaar.canonical.com/plugins/en/>\n"
3784+"for further information on plugins including where to find them and how to\n"
3785+"install them. Instructions are also provided there on how to write new\n"
3786+"plugins using the Python programming language."
3787+msgstr ""
3788+
3789+#: bzrlib/builtins.py:4641
3790+msgid "Show testament (signing-form) of a revision."
3791+msgstr ""
3792+
3793+# help of 'long' option of 'testament' command
3794+#: bzrlib/builtins.py:4644
3795+msgid "Produce long-format testament."
3796+msgstr ""
3797+
3798+# help of 'strict' option of 'testament' command
3799+#: bzrlib/builtins.py:4646
3800+msgid "Produce a strict-format testament."
3801+msgstr ""
3802+
3803+#: bzrlib/builtins.py:4672
3804+msgid "Show the origin of each line in a file."
3805+msgstr ""
3806+
3807+#: bzrlib/builtins.py:4674
3808+msgid ""
3809+"This prints out the given file with an annotation on the left side\n"
3810+"indicating which revision, author and date introduced the change."
3811+msgstr ""
3812+
3813+#: bzrlib/builtins.py:4677
3814+msgid ""
3815+"If the origin is the same for a run of consecutive lines, it is\n"
3816+"shown only at the top, unless the --all option is given."
3817+msgstr ""
3818+
3819+# help of 'all' option of 'annotate' command
3820+#: bzrlib/builtins.py:4685
3821+msgid "Show annotations on all lines."
3822+msgstr ""
3823+
3824+# help of 'long' option of 'annotate' command
3825+#: bzrlib/builtins.py:4686
3826+msgid "Show commit date in annotations."
3827+msgstr ""
3828+
3829+#: bzrlib/builtins.py:4789
3830+msgid ""
3831+"Convert the current branch into a checkout of the supplied branch.\n"
3832+"If no branch is supplied, rebind to the last bound location."
3833+msgstr ""
3834+
3835+#: bzrlib/builtins.py:4792
3836+msgid ""
3837+"Once converted into a checkout, commits must succeed on the master branch\n"
3838+"before they will be applied to the local branch."
3839+msgstr ""
3840+
3841+#: bzrlib/builtins.py:4795
3842+msgid ""
3843+"Bound branches use the nickname of its master branch unless it is set\n"
3844+"locally, in which case binding will update the local nickname to be\n"
3845+"that of the master."
3846+msgstr ""
3847+
3848+#: bzrlib/builtins.py:4830
3849+msgid "Convert the current checkout into a regular branch."
3850+msgstr ""
3851+
3852+#: bzrlib/builtins.py:4832
3853+msgid ""
3854+"After unbinding, the local branch is considered independent and subsequent\n"
3855+"commits will be local only."
3856+msgstr ""
3857+
3858+#: bzrlib/builtins.py:4847
3859+msgid "Remove the last committed revision."
3860+msgstr ""
3861+
3862+#: bzrlib/builtins.py:4849
3863+msgid ""
3864+"--verbose will print out what is being removed.\n"
3865+"--dry-run will go through all the motions, but not actually\n"
3866+"remove anything."
3867+msgstr ""
3868+
3869+#: bzrlib/builtins.py:4853
3870+msgid ""
3871+"If --revision is specified, uncommit revisions to leave the branch at the\n"
3872+"specified revision. For example, \"bzr uncommit -r 15\" will leave the\n"
3873+"branch at revision 15."
3874+msgstr ""
3875+
3876+#: bzrlib/builtins.py:4857
3877+msgid ""
3878+"Uncommit leaves the working tree ready for a new commit. The only change\n"
3879+"it may make is to restore any pending merges that were present before\n"
3880+"the commit."
3881+msgstr ""
3882+
3883+# help of 'dry-run' option of 'uncommit' command
3884+#: bzrlib/builtins.py:4868
3885+msgid "Don't actually make changes."
3886+msgstr ""
3887+
3888+# help of 'force' option of 'uncommit' command
3889+#: bzrlib/builtins.py:4869
3890+msgid "Say yes to all questions."
3891+msgstr ""
3892+
3893+# help of 'local' option of 'uncommit' command
3894+#: bzrlib/builtins.py:4871
3895+msgid "Only remove the commits from the local branch when in a checkout."
3896+msgstr ""
3897+
3898+#: bzrlib/builtins.py:4956
3899+msgid "Break a dead lock."
3900+msgstr ""
3901+
3902+#: bzrlib/builtins.py:4958
3903+msgid ""
3904+"This command breaks a lock on a repository, branch, working directory or\n"
3905+"config file."
3906+msgstr ""
3907+
3908+#: bzrlib/builtins.py:4961
3909+msgid ""
3910+"CAUTION: Locks should only be broken when you are sure that the process\n"
3911+"holding the lock has been stopped."
3912+msgstr ""
3913+
3914+#: bzrlib/builtins.py:4964
3915+msgid ""
3916+"You can get information on what locks are open via the 'bzr info\n"
3917+"[location]' command."
3918+msgstr ""
3919+
3920+#: bzrlib/builtins.py:4967
3921+msgid ""
3922+":Examples:\n"
3923+" bzr break-lock\n"
3924+" bzr break-lock bzr+ssh://example.com/bzr/foo\n"
3925+" bzr break-lock --conf ~/.bazaar"
3926+msgstr ""
3927+
3928+# help of 'config' option of 'break-lock' command
3929+#: bzrlib/builtins.py:4976
3930+msgid "LOCATION is the directory where the config lock is."
3931+msgstr ""
3932+
3933+# help of 'force' option of 'break-lock' command
3934+#: bzrlib/builtins.py:4978
3935+msgid "Do not ask for confirmation before breaking the lock."
3936+msgstr ""
3937+
3938+#: bzrlib/builtins.py:5014
3939+msgid "Run the bzr server."
3940+msgstr ""
3941+
3942+# help of 'inet' option of 'serve' command
3943+#: bzrlib/builtins.py:5020
3944+msgid "Serve on stdin/out for use from inetd or sshd."
3945+msgstr ""
3946+
3947+# title of 'protocol' option of 'serve' command
3948+#: bzrlib/builtins.py:5021
3949+msgid "protocol"
3950+msgstr ""
3951+
3952+# help of 'protocol' option of 'serve' command
3953+#: bzrlib/builtins.py:5022
3954+msgid "Protocol to serve."
3955+msgstr ""
3956+
3957+# help of 'port' option of 'serve' command
3958+#: bzrlib/builtins.py:5026
3959+msgid ""
3960+"Listen for connections on nominated port of the form [hostname:]portnumber. "
3961+"Passing 0 as the port number will result in a dynamically allocated port. "
3962+"The default port depends on the protocol."
3963+msgstr ""
3964+
3965+# help of 'directory' option of 'serve' command
3966+#: bzrlib/builtins.py:5032
3967+msgid "Serve contents of this directory."
3968+msgstr ""
3969+
3970+# help of 'allow-writes' option of 'serve' command
3971+#: bzrlib/builtins.py:5034
3972+msgid ""
3973+"By default the server is a readonly server. Supplying --allow-writes "
3974+"enables write access to the contents of the served directory and below. "
3975+"Note that ``bzr serve`` does not perform authentication, so unless some form "
3976+"of external authentication is arranged supplying this option leads to global "
3977+"uncontrolled write access to your file system."
3978+msgstr ""
3979+
3980+#: bzrlib/builtins.py:5079
3981+msgid "Combine a tree into its containing tree."
3982+msgstr ""
3983+
3984+#: bzrlib/builtins.py:5081
3985+msgid "This command requires the target tree to be in a rich-root format."
3986+msgstr ""
3987+
3988+#: bzrlib/builtins.py:5083
3989+msgid ""
3990+"The TREE argument should be an independent tree, inside another tree, but\n"
3991+"not part of it. (Such trees can be produced by \"bzr split\", but also by\n"
3992+"running \"bzr branch\" with the target inside a tree.)"
3993+msgstr ""
3994+
3995+#: bzrlib/builtins.py:5087
3996+msgid ""
3997+"The result is a combined tree, with the subtree no longer an independent\n"
3998+"part. This is marked as a merge of the subtree into the containing tree,\n"
3999+"and all history is preserved."
4000+msgstr ""
4001+
4002+#: bzrlib/builtins.py:5125
4003+msgid "Split a subdirectory of a tree into a separate tree."
4004+msgstr ""
4005+
4006+#: bzrlib/builtins.py:5127
4007+msgid ""
4008+"This command will produce a target tree in a format that supports\n"
4009+"rich roots, like 'rich-root' or 'rich-root-pack'. These formats cannot be\n"
4010+"converted into earlier formats like 'dirstate-tags'."
4011+msgstr ""
4012+
4013+#: bzrlib/builtins.py:5131
4014+msgid ""
4015+"The TREE argument should be a subdirectory of a working tree. That\n"
4016+"subdirectory will be converted into an independent tree, with its own\n"
4017+"branch. Commits in the top-level tree will not apply to the new subtree."
4018+msgstr ""
4019+
4020+#: bzrlib/builtins.py:5252
4021+msgid "Mail or create a merge-directive for submitting changes."
4022+msgstr ""
4023+
4024+#: bzrlib/builtins.py:5254
4025+msgid "A merge directive provides many things needed for requesting merges:"
4026+msgstr ""
4027+
4028+#: bzrlib/builtins.py:5256
4029+msgid "* A machine-readable description of the merge to perform"
4030+msgstr ""
4031+
4032+#: bzrlib/builtins.py:5258
4033+msgid "* An optional patch that is a preview of the changes requested"
4034+msgstr ""
4035+
4036+#: bzrlib/builtins.py:5260
4037+msgid ""
4038+"* An optional bundle of revision data, so that the changes can be applied\n"
4039+" directly from the merge directive, without retrieving data from a\n"
4040+" branch."
4041+msgstr ""
4042+
4043+#: bzrlib/builtins.py:5264
4044+msgid ""
4045+"`bzr send` creates a compact data set that, when applied using bzr\n"
4046+"merge, has the same effect as merging from the source branch. "
4047+msgstr ""
4048+
4049+#: bzrlib/builtins.py:5267
4050+msgid ""
4051+"By default the merge directive is self-contained and can be applied to any\n"
4052+"branch containing submit_branch in its ancestory without needing access to\n"
4053+"the source branch."
4054+msgstr ""
4055+
4056+#: bzrlib/builtins.py:5271
4057+msgid ""
4058+"If --no-bundle is specified, then Bazaar doesn't send the contents of the\n"
4059+"revisions, but only a structured request to merge from the\n"
4060+"public_location. In that case the public_branch is needed and it must be\n"
4061+"up-to-date and accessible to the recipient. The public_branch is always\n"
4062+"included if known, so that people can check it later."
4063+msgstr ""
4064+
4065+#: bzrlib/builtins.py:5277
4066+msgid ""
4067+"The submit branch defaults to the parent of the source branch, but can be\n"
4068+"overridden. Both submit branch and public branch will be remembered in\n"
4069+"branch.conf the first time they are used for a particular branch. The\n"
4070+"source branch defaults to that containing the working directory, but can\n"
4071+"be changed using --from."
4072+msgstr ""
4073+
4074+#: bzrlib/builtins.py:5283
4075+msgid ""
4076+"In order to calculate those changes, bzr must analyse the submit branch.\n"
4077+"Therefore it is most efficient for the submit branch to be a local mirror.\n"
4078+"If a public location is known for the submit_branch, that location is used\n"
4079+"in the merge directive."
4080+msgstr ""
4081+
4082+#: bzrlib/builtins.py:5288
4083+msgid ""
4084+"The default behaviour is to send the merge directive by mail, unless -o is\n"
4085+"given, in which case it is sent to a file."
4086+msgstr ""
4087+
4088+#: bzrlib/builtins.py:5291
4089+msgid ""
4090+"Mail is sent using your preferred mail program. This should be transparent\n"
4091+"on Windows (it uses MAPI). On Unix, it requires the xdg-email utility.\n"
4092+"If the preferred client can't be found (or used), your editor will be used."
4093+msgstr ""
4094+
4095+#: bzrlib/builtins.py:5295
4096+msgid ""
4097+"To use a specific mail program, set the mail_client configuration option.\n"
4098+"(For Thunderbird 1.5, this works around some bugs.) Supported values for\n"
4099+"specific clients are \"claws\", \"evolution\", \"kmail\", \"mail.app"
4100+"\" (MacOS X's\n"
4101+"Mail.app), \"mutt\", and \"thunderbird\"; generic options are \"default\",\n"
4102+"\"editor\", \"emacsclient\", \"mapi\", and \"xdg-email\". Plugins may also "
4103+"add\n"
4104+"supported clients."
4105+msgstr ""
4106+
4107+#: bzrlib/builtins.py:5302
4108+msgid ""
4109+"If mail is being sent, a to address is required. This can be supplied\n"
4110+"either on the commandline, by setting the submit_to configuration\n"
4111+"option in the branch itself or the child_submit_to configuration option\n"
4112+"in the submit branch."
4113+msgstr ""
4114+
4115+#: bzrlib/builtins.py:5307
4116+msgid ""
4117+"Two formats are currently supported: \"4\" uses revision bundle format 4 "
4118+"and\n"
4119+"merge directive format 2. It is significantly faster and smaller than\n"
4120+"older formats. It is compatible with Bazaar 0.19 and later. It is the\n"
4121+"default. \"0.9\" uses revision bundle format 0.9 and merge directive\n"
4122+"format 1. It is compatible with Bazaar 0.12 - 0.18."
4123+msgstr ""
4124+
4125+#: bzrlib/builtins.py:5313
4126+msgid ""
4127+"The merge directives created by bzr send may be applied using bzr merge or\n"
4128+"bzr pull by specifying a file containing a merge directive as the location."
4129+msgstr ""
4130+
4131+#: bzrlib/builtins.py:5316
4132+msgid ""
4133+"bzr send makes extensive use of public locations to map local locations "
4134+"into\n"
4135+"URLs that can be used by other people. See `bzr help configuration` to\n"
4136+"set them, and use `bzr info` to display them."
4137+msgstr ""
4138+
4139+# help of 'output' option of 'send' command
4140+#: bzrlib/builtins.py:5340
4141+msgid "Write merge directive to this file or directory; use - for stdout."
4142+msgstr ""
4143+
4144+# help of 'strict' option of 'send' command
4145+#: bzrlib/builtins.py:5344
4146+msgid ""
4147+"Refuse to send if there are uncommitted changes in the working tree, --no-"
4148+"strict disables the check."
4149+msgstr ""
4150+
4151+# help of 'mail-to' option of 'send' command
4152+#: bzrlib/builtins.py:5346
4153+msgid "Mail the request to this address."
4154+msgstr ""
4155+
4156+# help of 'body' option of 'send' command
4157+#: bzrlib/builtins.py:5350
4158+msgid "Body for the email."
4159+msgstr ""
4160+
4161+# help of 'no-bundle' option of 'send' command
4162+#: bzrlib/builtins.py:5403
4163+msgid "Do not include a bundle in the merge directive."
4164+msgstr ""
4165+
4166+# help of 'no-patch' option of 'send' command
4167+#: bzrlib/builtins.py:5404
4168+msgid "Do not include a preview patch in the merge directive."
4169+msgstr ""
4170+
4171+# help of 'remember' option of 'send' command
4172+#: bzrlib/builtins.py:5407
4173+msgid "Remember submit and public branch."
4174+msgstr ""
4175+
4176+# help of 'from' option of 'send' command
4177+#: bzrlib/builtins.py:5409
4178+msgid ""
4179+"Branch to generate the submission from, rather than the one containing the "
4180+"working directory."
4181+msgstr ""
4182+
4183+# title of 'format' option of 'send' command
4184+#: bzrlib/builtins.py:5419
4185+msgid "format"
4186+msgstr ""
4187+
4188+# help of 'format' option of 'send' command
4189+#: bzrlib/builtins.py:5420
4190+msgid "Use the specified output format."
4191+msgstr ""
4192+
4193+#: bzrlib/builtins.py:5442
4194+msgid "Create, remove or modify a tag naming a revision."
4195+msgstr ""
4196+
4197+#: bzrlib/builtins.py:5444
4198+msgid ""
4199+"Tags give human-meaningful names to revisions. Commands that take a -r\n"
4200+"(--revision) option can be given -rtag:X, where X is any previously\n"
4201+"created tag."
4202+msgstr ""
4203+
4204+#: bzrlib/builtins.py:5448
4205+msgid ""
4206+"Tags are stored in the branch. Tags are copied from one branch to another\n"
4207+"along when you branch, push, pull or merge."
4208+msgstr ""
4209+
4210+#: bzrlib/builtins.py:5451
4211+msgid ""
4212+"It is an error to give a tag name that already exists unless you pass\n"
4213+"--force, in which case the tag is moved to point to the new revision."
4214+msgstr ""
4215+
4216+#: bzrlib/builtins.py:5454
4217+msgid ""
4218+"To rename a tag (change the name but keep it on the same revsion), run "
4219+"``bzr\n"
4220+"tag new-name -r tag:old-name`` and then ``bzr tag --delete oldname``."
4221+msgstr ""
4222+
4223+#: bzrlib/builtins.py:5457
4224+msgid ""
4225+"If no tag name is specified it will be determined through the \n"
4226+"'automatic_tag_name' hook. This can e.g. be used to automatically tag\n"
4227+"upstream releases by reading configure.ac. See ``bzr help hooks`` for\n"
4228+"details."
4229+msgstr ""
4230+
4231+# help of 'delete' option of 'tag' command
4232+#: bzrlib/builtins.py:5467
4233+msgid "Delete this tag rather than placing it."
4234+msgstr ""
4235+
4236+# help of 'directory' option of 'tag' command
4237+#: bzrlib/builtins.py:5470
4238+msgid "Branch in which to place the tag."
4239+msgstr ""
4240+
4241+# help of 'force' option of 'tag' command
4242+#: bzrlib/builtins.py:5472
4243+msgid "Replace existing tags."
4244+msgstr ""
4245+
4246+#: bzrlib/builtins.py:5511
4247+msgid "List tags."
4248+msgstr ""
4249+
4250+#: bzrlib/builtins.py:5513
4251+msgid ""
4252+"This command shows a table of tag names and the revisions they reference."
4253+msgstr ""
4254+
4255+# help of 'directory' option of 'tags' command
4256+#: bzrlib/builtins.py:5519
4257+msgid "Branch whose tags should be displayed."
4258+msgstr ""
4259+
4260+# help of 'sort' option of 'tags' command
4261+#: bzrlib/builtins.py:5521
4262+msgid "Sort tags by different criteria."
4263+msgstr ""
4264+
4265+# title of 'sort' option of 'tags' command
4266+#: bzrlib/builtins.py:5521
4267+msgid "Sorting"
4268+msgstr ""
4269+
4270+#: bzrlib/builtins.py:5566
4271+msgid "Reconfigure the type of a bzr directory."
4272+msgstr ""
4273+
4274+#: bzrlib/builtins.py:5568
4275+msgid "A target configuration must be specified."
4276+msgstr ""
4277+
4278+#: bzrlib/builtins.py:5570
4279+msgid ""
4280+"For checkouts, the bind-to location will be auto-detected if not specified.\n"
4281+"The order of preference is\n"
4282+"1. For a lightweight checkout, the current bound location.\n"
4283+"2. For branches that used to be checkouts, the previously-bound location.\n"
4284+"3. The push location.\n"
4285+"4. The parent location.\n"
4286+"If none of these is available, --bind-to must be specified."
4287+msgstr ""
4288+
4289+# title of 'target_type' option of 'reconfigure' command
4290+#: bzrlib/builtins.py:5584
4291+msgid "Target type"
4292+msgstr ""
4293+
4294+# help of 'target_type' option of 'reconfigure' command
4295+#: bzrlib/builtins.py:5585
4296+msgid "The type to reconfigure the directory to."
4297+msgstr ""
4298+
4299+# help of 'bind-to' option of 'reconfigure' command
4300+#: bzrlib/builtins.py:5600
4301+msgid "Branch to bind checkout to."
4302+msgstr ""
4303+
4304+# help of 'force' option of 'reconfigure' command
4305+#: bzrlib/builtins.py:5602
4306+msgid "Perform reconfiguration even if local changes will be lost."
4307+msgstr ""
4308+
4309+# help of 'stacked-on' option of 'reconfigure' command
4310+#: bzrlib/builtins.py:5605
4311+msgid "Reconfigure a branch to be stacked on another branch."
4312+msgstr ""
4313+
4314+# help of 'unstacked' option of 'reconfigure' command
4315+#: bzrlib/builtins.py:5609
4316+msgid ""
4317+"Reconfigure a branch to be unstacked. This may require copying substantial "
4318+"data into it."
4319+msgstr ""
4320+
4321+#: bzrlib/builtins.py:5657
4322+msgid "Set the branch of a checkout and update."
4323+msgstr ""
4324+
4325+#: bzrlib/builtins.py:5659
4326+msgid ""
4327+"For lightweight checkouts, this changes the branch being referenced.\n"
4328+"For heavyweight checkouts, this checks that there are no local commits\n"
4329+"versus the current bound branch, then it makes the local branch a mirror\n"
4330+"of the new location and binds to it."
4331+msgstr ""
4332+
4333+#: bzrlib/builtins.py:5664
4334+msgid ""
4335+"In both cases, the working tree is updated and uncommitted changes\n"
4336+"are merged. The user can commit or revert these as they desire."
4337+msgstr ""
4338+
4339+#: bzrlib/builtins.py:5667
4340+msgid "Pending merges need to be committed or reverted before using switch."
4341+msgstr ""
4342+
4343+#: bzrlib/builtins.py:5669
4344+msgid ""
4345+"The path to the branch to switch to can be specified relative to the parent\n"
4346+"directory of the current branch. For example, if you are currently in a\n"
4347+"checkout of /path/to/branch, specifying 'newbranch' will find a branch at\n"
4348+"/path/to/newbranch."
4349+msgstr ""
4350+
4351+#: bzrlib/builtins.py:5674
4352+msgid ""
4353+"Bound branches use the nickname of its master branch unless it is set\n"
4354+"locally, in which case switching will update the local nickname to be\n"
4355+"that of the master."
4356+msgstr ""
4357+
4358+# help of 'force' option of 'switch' command
4359+#: bzrlib/builtins.py:5682
4360+msgid "Switch even if local commits will be lost."
4361+msgstr ""
4362+
4363+# help of 'create-branch' option of 'switch' command
4364+#: bzrlib/builtins.py:5685
4365+msgid "Create the target branch from this one before switching to it."
4366+msgstr ""
4367+
4368+#: bzrlib/builtins.py:5754
4369+msgid "Manage filtered views."
4370+msgstr ""
4371+
4372+#: bzrlib/builtins.py:5756
4373+msgid ""
4374+"Views provide a mask over the tree so that users can focus on\n"
4375+"a subset of a tree when doing their work. After creating a view,\n"
4376+"commands that support a list of files - status, diff, commit, etc -\n"
4377+"effectively have that list of files implicitly given each time.\n"
4378+"An explicit list of files can still be given but those files\n"
4379+"must be within the current view."
4380+msgstr ""
4381+
4382+#: bzrlib/builtins.py:5763
4383+msgid ""
4384+"In most cases, a view has a short life-span: it is created to make\n"
4385+"a selected change and is deleted once that change is committed.\n"
4386+"At other times, you may wish to create one or more named views\n"
4387+"and switch between them."
4388+msgstr ""
4389+
4390+#: bzrlib/builtins.py:5768
4391+msgid ""
4392+"To disable the current view without deleting it, you can switch to\n"
4393+"the pseudo view called ``off``. This can be useful when you need\n"
4394+"to see the whole tree for an operation or two (e.g. merge) but\n"
4395+"want to switch back to your view after that."
4396+msgstr ""
4397+
4398+#: bzrlib/builtins.py:5773
4399+msgid ""
4400+":Examples:\n"
4401+" To define the current view::"
4402+msgstr ""
4403+
4404+#: bzrlib/builtins.py:5776
4405+msgid " bzr view file1 dir1 ..."
4406+msgstr ""
4407+
4408+#: bzrlib/builtins.py:5778
4409+msgid " To list the current view::"
4410+msgstr ""
4411+
4412+#: bzrlib/builtins.py:5780
4413+msgid " bzr view"
4414+msgstr ""
4415+
4416+#: bzrlib/builtins.py:5782
4417+msgid " To delete the current view::"
4418+msgstr ""
4419+
4420+#: bzrlib/builtins.py:5784
4421+msgid " bzr view --delete"
4422+msgstr ""
4423+
4424+#: bzrlib/builtins.py:5786
4425+msgid " To disable the current view without deleting it::"
4426+msgstr ""
4427+
4428+#: bzrlib/builtins.py:5788
4429+msgid " bzr view --switch off"
4430+msgstr ""
4431+
4432+#: bzrlib/builtins.py:5790
4433+msgid " To define a named view and switch to it::"
4434+msgstr ""
4435+
4436+#: bzrlib/builtins.py:5792
4437+msgid " bzr view --name view-name file1 dir1 ..."
4438+msgstr ""
4439+
4440+#: bzrlib/builtins.py:5794
4441+msgid " To list a named view::"
4442+msgstr ""
4443+
4444+#: bzrlib/builtins.py:5796
4445+msgid " bzr view --name view-name"
4446+msgstr ""
4447+
4448+#: bzrlib/builtins.py:5798
4449+msgid " To delete a named view::"
4450+msgstr ""
4451+
4452+#: bzrlib/builtins.py:5800
4453+msgid " bzr view --name view-name --delete"
4454+msgstr ""
4455+
4456+#: bzrlib/builtins.py:5802
4457+msgid " To switch to a named view::"
4458+msgstr ""
4459+
4460+#: bzrlib/builtins.py:5804
4461+msgid " bzr view --switch view-name"
4462+msgstr ""
4463+
4464+#: bzrlib/builtins.py:5806
4465+msgid " To list all views defined::"
4466+msgstr ""
4467+
4468+#: bzrlib/builtins.py:5808
4469+msgid " bzr view --all"
4470+msgstr ""
4471+
4472+#: bzrlib/builtins.py:5810
4473+msgid " To delete all views::"
4474+msgstr ""
4475+
4476+#: bzrlib/builtins.py:5812
4477+msgid " bzr view --delete --all"
4478+msgstr ""
4479+
4480+# help of 'all' option of 'view' command
4481+#: bzrlib/builtins.py:5819
4482+msgid "Apply list or delete action to all views."
4483+msgstr ""
4484+
4485+# help of 'delete' option of 'view' command
4486+#: bzrlib/builtins.py:5822
4487+msgid "Delete the view."
4488+msgstr ""
4489+
4490+# help of 'name' option of 'view' command
4491+#: bzrlib/builtins.py:5825
4492+msgid "Name of the view to define, list or delete."
4493+msgstr ""
4494+
4495+# help of 'switch' option of 'view' command
4496+#: bzrlib/builtins.py:5829
4497+msgid "Name of the view to switch to."
4498+msgstr ""
4499+
4500+#: bzrlib/builtins.py:5929
4501+msgid "Remove a branch."
4502+msgstr ""
4503+
4504+#: bzrlib/builtins.py:5931
4505+msgid ""
4506+"This will remove the branch from the specified location but \n"
4507+"will keep any working tree or repository in place."
4508+msgstr ""
4509+
4510+#: bzrlib/builtins.py:5936
4511+msgid " Remove the branch at repo/trunk::"
4512+msgstr ""
4513+
4514+#: bzrlib/builtins.py:5938
4515+msgid " bzr remove-branch repo/trunk"
4516+msgstr ""
4517+
4518+#: bzrlib/builtins.py:5954
4519+msgid "Temporarily set aside some changes from the current tree."
4520+msgstr ""
4521+
4522+#: bzrlib/builtins.py:5956
4523+msgid ""
4524+"Shelve allows you to temporarily put changes you've made \"on the shelf\",\n"
4525+"ie. out of the way, until a later time when you can bring them back from\n"
4526+"the shelf with the 'unshelve' command. The changes are stored alongside\n"
4527+"your working tree, and so they aren't propagated along with your branch nor\n"
4528+"will they survive its deletion."
4529+msgstr ""
4530+
4531+#: bzrlib/builtins.py:5962
4532+msgid "If shelve --list is specified, previously-shelved changes are listed."
4533+msgstr ""
4534+
4535+#: bzrlib/builtins.py:5964
4536+msgid ""
4537+"Shelve is intended to help separate several sets of changes that have\n"
4538+"been inappropriately mingled. If you just want to get rid of all changes\n"
4539+"and you don't need to restore them later, use revert. If you want to\n"
4540+"shelve all text changes at once, use shelve --all."
4541+msgstr ""
4542+
4543+#: bzrlib/builtins.py:5969
4544+msgid ""
4545+"If filenames are specified, only the changes to those files will be\n"
4546+"shelved. Other files will be left untouched."
4547+msgstr ""
4548+
4549+#: bzrlib/builtins.py:5972
4550+msgid ""
4551+"If a revision is specified, changes since that revision will be shelved."
4552+msgstr ""
4553+
4554+#: bzrlib/builtins.py:5974
4555+msgid ""
4556+"You can put multiple items on the shelf, and by default, 'unshelve' will\n"
4557+"restore the most recently shelved changes."
4558+msgstr ""
4559+
4560+#: bzrlib/builtins.py:5977
4561+msgid ""
4562+"For complicated changes, it is possible to edit the changes in a separate\n"
4563+"editor program to decide what the file remaining in the working copy\n"
4564+"should look like. To do this, add the configuration option"
4565+msgstr ""
4566+
4567+#: bzrlib/builtins.py:5981
4568+msgid " change_editor = PROGRAM @new_path @old_path"
4569+msgstr ""
4570+
4571+#: bzrlib/builtins.py:5983
4572+msgid ""
4573+"where @new_path is replaced with the path of the new version of the \n"
4574+"file and @old_path is replaced with the path of the old version of \n"
4575+"the file. The PROGRAM should save the new file with the desired \n"
4576+"contents of the file in the working tree.\n"
4577+" "
4578+msgstr ""
4579+
4580+# help of 'all' option of 'shelve' command
4581+#: bzrlib/builtins.py:5995
4582+msgid "Shelve all changes."
4583+msgstr ""
4584+
4585+# help of 'writer' option of 'shelve' command
4586+#: bzrlib/builtins.py:5997
4587+msgid "Method to use for writing diffs."
4588+msgstr ""
4589+
4590+# title of 'writer' option of 'shelve' command
4591+#: bzrlib/builtins.py:5997
4592+msgid "writer"
4593+msgstr ""
4594+
4595+# help of 'list' option of 'shelve' command
4596+#: bzrlib/builtins.py:6001
4597+msgid "List shelved changes."
4598+msgstr ""
4599+
4600+# help of 'destroy' option of 'shelve' command
4601+#: bzrlib/builtins.py:6003
4602+msgid "Destroy removed changes instead of shelving them."
4603+msgstr ""
4604+
4605+#: bzrlib/builtins.py:6043
4606+msgid "Restore shelved changes."
4607+msgstr ""
4608+
4609+#: bzrlib/builtins.py:6045
4610+msgid ""
4611+"By default, the most recently shelved changes are restored. However if you\n"
4612+"specify a shelf by id those changes will be restored instead. This works\n"
4613+"best when the changes don't depend on each other."
4614+msgstr ""
4615+
4616+# help of 'action' option of 'unshelve' command
4617+#: bzrlib/builtins.py:6054
4618+msgid "The action to perform."
4619+msgstr ""
4620+
4621+#: bzrlib/builtins.py:6076
4622+msgid "Remove unwanted files from working tree."
4623+msgstr ""
4624+
4625+#: bzrlib/builtins.py:6078
4626+msgid ""
4627+"By default, only unknown files, not ignored files, are deleted. Versioned\n"
4628+"files are never deleted."
4629+msgstr ""
4630+
4631+#: bzrlib/builtins.py:6081
4632+msgid ""
4633+"Another class is 'detritus', which includes files emitted by bzr during\n"
4634+"normal operations and selftests. (The value of these files decreases with\n"
4635+"time.)"
4636+msgstr ""
4637+
4638+#: bzrlib/builtins.py:6085
4639+msgid ""
4640+"If no options are specified, unknown files are deleted. Otherwise, option\n"
4641+"flags are respected, and may be combined."
4642+msgstr ""
4643+
4644+#: bzrlib/builtins.py:6088
4645+msgid "To check what clean-tree will do, use --dry-run."
4646+msgstr ""
4647+
4648+# help of 'ignored' option of 'clean-tree' command
4649+#: bzrlib/builtins.py:6091
4650+msgid "Delete all ignored files."
4651+msgstr ""
4652+
4653+# help of 'detritus' option of 'clean-tree' command
4654+#: bzrlib/builtins.py:6092
4655+msgid ""
4656+"Delete conflict files, merge and revert backups, and failed selftest dirs."
4657+msgstr ""
4658+
4659+# help of 'unknown' option of 'clean-tree' command
4660+#: bzrlib/builtins.py:6095
4661+msgid "Delete files unknown to bzr (default)."
4662+msgstr ""
4663+
4664+# help of 'dry-run' option of 'clean-tree' command
4665+#: bzrlib/builtins.py:6096
4666+msgid "Show files to delete instead of deleting them."
4667+msgstr ""
4668+
4669+# help of 'force' option of 'clean-tree' command
4670+#: bzrlib/builtins.py:6098
4671+msgid "Do not prompt before deleting."
4672+msgstr ""
4673+
4674+#: bzrlib/cmd_version_info.py:50
4675+msgid "Show version information about this tree."
4676+msgstr ""
4677+
4678+#: bzrlib/cmd_version_info.py:52
4679+msgid ""
4680+"You can use this command to add information about version into\n"
4681+"source code of an application. The output can be in one of the\n"
4682+"supported formats or in a custom format based on a template."
4683+msgstr ""
4684+
4685+#: bzrlib/cmd_version_info.py:56
4686+msgid "For example::"
4687+msgstr ""
4688+
4689+#: bzrlib/cmd_version_info.py:58
4690+msgid ""
4691+" bzr version-info --custom \\\n"
4692+" --template=\"#define VERSION_INFO \\\"Project 1.2.3 (r{revno})\\\"\\n\""
4693+msgstr ""
4694+
4695+#: bzrlib/cmd_version_info.py:61
4696+msgid ""
4697+"will produce a C header file with formatted string containing the\n"
4698+"current revision number. Other supported variables in templates are:"
4699+msgstr ""
4700+
4701+#: bzrlib/cmd_version_info.py:64
4702+msgid ""
4703+" * {date} - date of the last revision\n"
4704+" * {build_date} - current date\n"
4705+" * {revno} - revision number\n"
4706+" * {revision_id} - revision id\n"
4707+" * {branch_nick} - branch nickname\n"
4708+" * {clean} - 0 if the source tree contains uncommitted changes,\n"
4709+" otherwise 1"
4710+msgstr ""
4711+
4712+# help of 'format' option of 'version-info' command
4713+#: bzrlib/cmd_version_info.py:74
4714+msgid "Select the output format."
4715+msgstr ""
4716+
4717+# help of 'all' option of 'version-info' command
4718+#: bzrlib/cmd_version_info.py:78
4719+msgid "Include all possible information."
4720+msgstr ""
4721+
4722+# help of 'check-clean' option of 'version-info' command
4723+#: bzrlib/cmd_version_info.py:79
4724+msgid "Check if tree is clean."
4725+msgstr ""
4726+
4727+# help of 'include-history' option of 'version-info' command
4728+#: bzrlib/cmd_version_info.py:81
4729+msgid "Include the revision-history."
4730+msgstr ""
4731+
4732+# help of 'include-file-revisions' option of 'version-info' command
4733+#: bzrlib/cmd_version_info.py:83
4734+msgid "Include the last revision for each file."
4735+msgstr ""
4736+
4737+# help of 'template' option of 'version-info' command
4738+#: bzrlib/cmd_version_info.py:84
4739+msgid "Template for the output."
4740+msgstr ""
4741+
4742+#: bzrlib/commands.py:516
4743+msgid "Purpose"
4744+msgstr ""
4745+
4746+#: bzrlib/commands.py:518 bzrlib/commands.py:520
4747+msgid "Usage"
4748+msgstr ""
4749+
4750+#: bzrlib/commands.py:538
4751+msgid "Options"
4752+msgstr ""
4753+
4754+#: bzrlib/commands.py:549
4755+msgid "Description"
4756+msgstr ""
4757+
4758+#: bzrlib/commands.py:564
4759+msgid "Aliases"
4760+msgstr ""
4761+
4762+#: bzrlib/commands.py:583
4763+msgid "See also"
4764+msgstr ""
4765+
4766+#: bzrlib/config.py:2098
4767+msgid "Display, set or remove a configuration option."
4768+msgstr ""
4769+
4770+#: bzrlib/config.py:2100
4771+msgid "Display the active value for a given option."
4772+msgstr ""
4773+
4774+#: bzrlib/config.py:2102
4775+msgid ""
4776+"If --all is specified, NAME is interpreted as a regular expression and all\n"
4777+"matching options are displayed mentioning their scope. The active value\n"
4778+"that bzr will take into account is the first one displayed for each option."
4779+msgstr ""
4780+
4781+#: bzrlib/config.py:2106
4782+msgid "If no NAME is given, --all .* is implied."
4783+msgstr ""
4784+
4785+#: bzrlib/config.py:2108
4786+msgid ""
4787+"Setting a value is achieved by using name=value without spaces. The value\n"
4788+"is set in the most relevant scope and can be checked by displaying the\n"
4789+"option again."
4790+msgstr ""
4791+
4792+# help of 'scope' option of 'config' command
4793+#: bzrlib/config.py:2119
4794+msgid "Reduce the scope to the specified configuration file"
4795+msgstr ""
4796+
4797+# help of 'all' option of 'config' command
4798+#: bzrlib/config.py:2123
4799+msgid "Display all the defined values for the matching options."
4800+msgstr ""
4801+
4802+# help of 'remove' option of 'config' command
4803+#: bzrlib/config.py:2125
4804+msgid "Remove the option from the configuration file"
4805+msgstr ""
4806+
4807+#: bzrlib/conflicts.py:47
4808+msgid "List files with conflicts."
4809+msgstr ""
4810+
4811+#: bzrlib/conflicts.py:49
4812+msgid ""
4813+"Merge will do its best to combine the changes in two branches, but there\n"
4814+"are some kinds of problems only a human can fix. When it encounters those,\n"
4815+"it will mark a conflict. A conflict means that you need to fix something,\n"
4816+"before you should commit."
4817+msgstr ""
4818+
4819+#: bzrlib/conflicts.py:54
4820+msgid ""
4821+"Conflicts normally are listed as short, human-readable messages. If --text\n"
4822+"is supplied, the pathnames of files with text conflicts are listed,\n"
4823+"instead. (This is useful for editing all files with text conflicts.)"
4824+msgstr ""
4825+
4826+#: bzrlib/conflicts.py:58
4827+msgid "Use bzr resolve when you have fixed a problem."
4828+msgstr ""
4829+
4830+# help of 'text' option of 'conflicts' command
4831+#: bzrlib/conflicts.py:63
4832+msgid "List paths of files with text conflicts."
4833+msgstr ""
4834+
4835+# help of 'action' option of 'resolve' command
4836+#: bzrlib/conflicts.py:95
4837+msgid "How to resolve the conflict."
4838+msgstr ""
4839+
4840+#: bzrlib/conflicts.py:101
4841+msgid "Mark a conflict as resolved."
4842+msgstr ""
4843+
4844+#: bzrlib/conflicts.py:108
4845+msgid ""
4846+"Once you have fixed a problem, use \"bzr resolve\" to automatically mark\n"
4847+"text conflicts as fixed, \"bzr resolve FILE\" to mark a specific conflict "
4848+"as\n"
4849+"resolved, or \"bzr resolve --all\" to mark all conflicts as resolved."
4850+msgstr ""
4851+
4852+# help of 'all' option of 'resolve' command
4853+#: bzrlib/conflicts.py:116
4854+msgid "Resolve all conflicts in this tree."
4855+msgstr ""
4856+
4857+# title of 'action' option of 'resolve' command
4858+#: bzrlib/conflicts.py:678
4859+msgid "action"
4860+msgstr ""
4861+
4862+#: bzrlib/errors.py:224
4863+msgid "The tree builder is already building a tree."
4864+msgstr ""
4865+
4866+#: bzrlib/errors.py:245
4867+msgid "The dirstate file (%(state)s) appears to be corrupt: %(msg)s"
4868+msgstr ""
4869+
4870+#: bzrlib/errors.py:264
4871+msgid ""
4872+"The API for \"%(api)s\" is not compatible with \"%(wanted)s\". It supports "
4873+"versions \"%(minimum)s\" to \"%(current)s\"."
4874+msgstr ""
4875+
4876+#: bzrlib/errors.py:276
4877+msgid "The transport '%(transport)s' is only accessible within this process."
4878+msgstr ""
4879+
4880+#: bzrlib/errors.py:294
4881+msgid "Invalid revision number %(revno)s"
4882+msgstr ""
4883+
4884+#: bzrlib/errors.py:303
4885+msgid "Invalid revision-id {%(revision_id)s} in %(branch)s"
4886+msgstr ""
4887+
4888+#: bzrlib/errors.py:314
4889+msgid "Reserved revision-id {%(revision_id)s}"
4890+msgstr ""
4891+
4892+#: bzrlib/errors.py:328
4893+msgid "There is no public branch set for \"%(branch_url)s\"."
4894+msgstr ""
4895+
4896+#: bzrlib/errors.py:338
4897+msgid ""
4898+"No help could be found for '%(topic)s'. Please use 'bzr help topics' to "
4899+"obtain a list of topics."
4900+msgstr ""
4901+
4902+#: bzrlib/errors.py:347
4903+msgid "The file id \"%(file_id)s\" is not present in the tree %(tree)s."
4904+msgstr ""
4905+
4906+#: bzrlib/errors.py:357
4907+msgid ""
4908+"The file id \"%(file_id)s\" is not present in the repository %(repository)r"
4909+msgstr ""
4910+
4911+#: bzrlib/errors.py:366
4912+msgid "The branch '%(branch)s' is not stacked."
4913+msgstr ""
4914+
4915+#: bzrlib/errors.py:380
4916+msgid "No WorkingTree exists for \"%(base)s\"."
4917+msgstr ""
4918+
4919+#: bzrlib/errors.py:389
4920+msgid "Not currently building a tree."
4921+msgstr ""
4922+
4923+#: bzrlib/errors.py:394
4924+msgid "%(url)s is not a local path."
4925+msgstr ""
4926+
4927+#: bzrlib/errors.py:422
4928+msgid "%(not_locked)r is not write locked but needs to be."
4929+msgstr ""
4930+
4931+#: bzrlib/errors.py:430
4932+msgid "Error in command line options"
4933+msgstr ""
4934+
4935+#: bzrlib/errors.py:435
4936+msgid "%(value)s is not an index of type %(_type)s."
4937+msgstr ""
4938+
4939+#: bzrlib/errors.py:445
4940+msgid "Error in data for index %(value)s."
4941+msgstr ""
4942+
4943+#: bzrlib/errors.py:454
4944+msgid "The key '%(key)s' is already in index '%(index)s'."
4945+msgstr ""
4946+
4947+#: bzrlib/errors.py:464
4948+msgid "The key '%(key)s' is not a valid key."
4949+msgstr ""
4950+
4951+#: bzrlib/errors.py:473
4952+msgid "Could not parse options for index %(value)s."
4953+msgstr ""
4954+
4955+#: bzrlib/errors.py:482
4956+msgid "The value '%(value)s' is not a valid value."
4957+msgstr ""
4958+
4959+#: bzrlib/errors.py:491
4960+msgid "Bad value \"%(value)s\" for option \"%(name)s\"."
4961+msgstr ""
4962+
4963+#: bzrlib/errors.py:510
4964+msgid "Generic path error: %(path)r%(extra)s)"
4965+msgstr ""
4966+
4967+#: bzrlib/errors.py:523
4968+msgid "No such file: %(path)r%(extra)s"
4969+msgstr ""
4970+
4971+#: bzrlib/errors.py:528
4972+msgid "File exists: %(path)r%(extra)s"
4973+msgstr ""
4974+
4975+#: bzrlib/errors.py:534
4976+msgid ""
4977+"Could not rename %(source)s => %(dest)s because both files exist. (Use --"
4978+"after to tell bzr about a rename that has already happened)%(extra)s"
4979+msgstr ""
4980+
4981+#: bzrlib/errors.py:550
4982+msgid "\"%(path)s\" is not a directory %(extra)s"
4983+msgstr ""
4984+
4985+#: bzrlib/errors.py:555
4986+msgid "\"%(path)s\" is not in the working directory %(extra)s"
4987+msgstr ""
4988+
4989+#: bzrlib/errors.py:560
4990+msgid "Directory not empty: \"%(path)s\"%(extra)s"
4991+msgstr ""
4992+
4993+#: bzrlib/errors.py:565
4994+msgid "Hard-linking \"%(path)s\" is not supported"
4995+msgstr ""
4996+
4997+#: bzrlib/errors.py:580
4998+msgid "Device or resource busy: \"%(path)s\"%(extra)s"
4999+msgstr ""
5000+
The diff has been truncated for viewing.