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 | ||||
Related bugs: |
|
||||
Related blueprints: |
i18n
(Medium)
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Vincent Ladeuil | Needs Information | ||
Review via email: mp+59890@code.launchpad.net |
Commit message
Description of the change
i18n implementation for bzr.
methane (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/
> - in the same file you use width=70, how does that interact with th rest of bzrlib (osutils.
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.
methane (songofacandy) wrote : | # |
> > - in bzrlib/
> 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.
> I'll do these soon.
>
Done. I've request merge in:
https:/
Vincent Ladeuil (vila) 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.
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/
> 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.
> 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...
- 5825. By methane
-
Make UTextWrapper support byte string and add tests including Python's
test_textwrap as a regression test. - 5826. By methane
-
Don't fill up terminal width because console may shows extra blank line.
- 5827. By methane
-
Add test for fill.
- 5828. By methane
-
Add two tests for fill demonstrates complicated cases. The second test fails
so needs more fixing. - 5829. By methane
-
Default width of UTextWrapper is also osutils.
terminal_ widtth( ) and
use osutils.default_ terminal_ width when it returns None. - 5830. By methane
-
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 methane
-
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
- 5832. By Vincent Ladeuil
-
Use assert(expected, actual) style and split some tests.
- 5833. By Vincent Ladeuil
-
Use a dedicated class for 'fill' tests.
- 5834. By Vincent Ladeuil
-
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-
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/
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 internationaliz
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:/
--
All the dude wanted was his rug back
Alexander Belchenko (bialix) wrote : | # |
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:/
Is it work on Windows? Mac?
> and python-
> 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/
> 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/
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 internationaliz
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...
methane (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:/
2. message extraction.
lp:~songofacandy/bzr/i18n-msgextract
https:/
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.
- 5835. By Martin Packman
-
Cope with lack of TextWrapper.
drop_whitespace before Python 2.6 - 5836. By methane
-
Split calculating width of char logic into separated function.
- 5837. By methane
-
Drop supporting byte string in private functions.
- 5838. By methane
-
Add copyright for some function.
- 5839. By methane
-
Add keyword parameter 'ambiguous_width' that specifies width for character
when unicodedata.east_asian_ width(c) =='A'. - 5840. By methane
-
Stop using utextwrap until i18n is implemented.
- 5841. By methane
-
Change default value of ambiguous_width from 2 to 1.
- 5842. By methane
-
Add document of some limitations in docstring.
David Planella (dpm) wrote : | # |
> 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:/
> 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-
It's a perl script, so it should run on any platform where perl can be run.
> > and python-
> instead of writing extras/
> > 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/
>
I'm not sure I understand the question on restrictions, but in any case, here's the code:
> > 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/
>
> 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...
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://
iEYEARECAAYFAk3
u8QAn3jS+
=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
- 5843. By methane
-
merge i18n-msgextract
- 5844. By methane
-
merge i18n-msgfmt
- 5845. By methane
-
Add first version of pot
- 5846. By methane
-
merge i18n-msgextract.
- 5847. By methane
-
Update pot
- 5848. By methane
-
merge some files from lp:~songofacandy/bzr/i18n
- 5849. By methane
-
Fix import
- 5850. By methane
-
Cleanup
- 5851. By methane
-
Fix line of command help in pot.
- 5852. By methane
-
Fix lineno of error formats in bzr.pot.
- 5853. By methane
-
Update pot
- 5854. By methane
-
merge i18n-utextwrap
- 5855. By methane
-
Enable extracting messages from help topics.
- 5856. By methane
-
Update pot file.
- 5857. By methane
-
Translate help topics.
- 5858. By methane
-
Disable too verbose mutter.
- 5859. By methane
-
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 methane
-
Update pot
Unmerged revisions
- 5860. By methane
-
Update pot
- 5859. By methane
-
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 methane
-
Disable too verbose mutter.
- 5857. By methane
-
Translate help topics.
- 5856. By methane
-
Update pot file.
- 5855. By methane
-
Enable extracting messages from help topics.
- 5854. By methane
-
merge i18n-utextwrap
- 5853. By methane
-
Update pot
- 5852. By methane
-
Fix lineno of error formats in bzr.pot.
- 5851. By methane
-
Fix line of command help in pot.
Preview Diff
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 | + |
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: utextwrap. py, you have tests protected by if __name == 'main', better put that in a proper file under bzrlib/tests
- in bzrlib/
- 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.