| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an initial step towards improving BE's efficiency.
Previously, BE gets slow as the bug count increases for several
commands (e.g. `be list`), because it takes time to load the bugdir
information from disk at each invocation. If you use a remote repo
(`be --repo http://localhost:8000/ list`), the server process may have
already loaded the repo from disk, but now your listing process has to
fetch everything over the wire. This is even worse than loading it
from disk.
With the new `be serve-commands` and `be --server URL ...` pair, the
bugdir loading happens once on the server, and all the processing is
also carried out on the server. This means that calls like `be
--server http://localhost:8000/ list` will scale much better than
other methods. For example:
$ time be --server http://localhost:8000/ list > /dev/null
real 0m2.234s
user 0m0.548s
sys 0m0.114s
$ time be --server http://localhost:8000/ list > /dev/null
real 0m0.730s
user 0m0.548s
sys 0m0.112s
$ time be list > /dev/null
real 0m2.453s
user 0m2.289s
sys 0m0.166s
$ time be list > /dev/null
real 0m2.521s
user 0m2.350s
sys 0m0.172s
The first call to a cold server takes about the same time as a local
call, because you need to load the bugs from the filesystem. However,
later calls to a warm server are 3x faster, while later local calls
are still slow.
This is currently a minimal working implementation. There's a good
deal of code in libbe.command.serve that I'd like to abstract out into
a libbe.util library (since there's still a bunch of duplication
between libbe.command.serve and libbe.command.serve_commands). The
remote calls are also not as fast as I'd like, likely due to library
load times. This commit just locks in an initial working
implementation.
|
|
|
|
| |
This way they can be shared with the upcoming Command._run_remote.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If the command is run in the pager, access to stdin is tricky, so I
avoid it by default. I'd just missed the fact that `new -` used
stdin, which caused
https://bugzilla.redhat.com/show_bug.cgi?id=751473
$ be new -
Traceback (most recent call last):
...
File "/usr/lib/python2.7/site-packages/libbe/command/new.py", line 89, in _run
summary = self.stdin.readline()
...
File "/usr/lib64/python2.7/codecs.py", line 473, in read
newdata = self.stream.read(size)
IOError: [Errno 9] Bad file descriptor
|
|
|
|
|
|
|
|
|
| |
In response to
https://bugzilla.redhat.com/show_bug.cgi?id=733945
in which Neal Becker was bummed at the long traceback, which may
initially look like a programming issue.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
UsageError was removed back in
commit bf3d434b244c57556bec979acbc658c30eb58221
Author: W. Trevor King <wking@drexel.edu>
Date: Sat Dec 12 00:31:55 2009 -0500
Added libbe.command.base (with Command class)...
because the distinction between UsageError and UserError was unclear.
I've brought it back to satisfy a request by Christian Heinrich:
On Sun, May 01, 2011 at 02:52:13AM +0200, Christian Heinrich wrote:
> 3.) Using wrong syntax should receive better help messages.
>
> Current:
>
> "be new" -> ERROR:
> Missing required argument SUMMARY
>
> Should be:
>
> "be new" -> usage: be new [options] SUMMARY
> ...
He suggested we print the full option list as well, but I've decided
to just print the usage summary and remind the user how to get the
full help message if they want it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
String command-line options are converted to unicode using the input
encoding.
We use the fact that Python sets up the original sys.stdout to
determine the terminal encoding.
This should fix Anders Sneckenborg's issues with Swedish characters:
C:\temp\slask4>be new "Svenska tecken åäö"
Created bug with ID 6be/5c3
C:\temp\slask4>
C:\temp\slask4>
C:\temp\slask4>be list
ERROR:
'ascii' codec can't decode byte 0xe5 in position 15: ordinal not in
range(128)
You should set a locale that supports unicode, e.g.
export LANG=en_US.utf8
See http://docs.python.org/library/locale.html for details
|
|
|
|
|
|
|
|
|
|
| |
This should have been done alongside:
commit b64851e3eb706b7b57503a0a605e0984e443747c
Author: Robert Lehmann <mail@robertlehmann.de>
Date: Fri Nov 26 08:34:35 2010 +0100
Exclude --complete from completion.
|
| |
|
| |
|
|
|
|
|
| |
See #bea/e30# ("Where should the vcs-name and encoding configuration
options live?") for details.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Now the following works:
some-BE-dir$ ./be serve
$ ./be --repo http://localhost:8000 list
I haven't come up with a clean idea for testing this yet, so other
commands may be broken, but once we get the testing working, it
shouldn't be too hard to get everything working over HTTP :).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added a bunch of classes to make the commands, user interfaces, and
storage backends more abstract and distinct. This should make it much
easier to extend and maintain BE.
Features:
* Directory restructured:
becommands/ -> libbe/commands
submods sorted by functionality.
* Lots of new classes:
Option, Argument, Command
InputOutput, StorageCallbacks, UserInterface
Storage
* Consolidated ID handling in libbe.util.id
* Transitioned VCS backends for Python-based VCSs from subprocess
calss to internal python calls.
Plus the user-visible changes:
* New bugdir/bug/comment ID format replaces old bug:comment format.
* Deprecated support for `be diff` on Arch and Darcs <= 2.3.1. A new
backend abstraction (Storage) makes the former implementation
ungainly.
* Improved command completion.
* Removed commands close, open, email_bugs,
* Flipped some arguments
`be assign BUG-ID [ASSIGNEE]` -> `be status ASSIGNED BUG-ID ...`
`be severity BUG-ID SEVERITY` -> `be severity SEVERITY BUG-ID ...`
`be status BUG-ID STATUS` -> `be status STATUS BUG-ID ...`
In the merge:
* Added 'commit' to list of pagerless commands.
* Updated doc/README.dev
See
#bea86499-824e-4e77-b085-2d581fa9ccab/1100c966-9671-4bc6-8b68-6d408a910da1#
for a discussion of why the changes were made and some of the
difficulties en-route.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This entailed a fairly thorough cleanup of libbe.util.id.
Remaining unimplemented completion helpers:
* complete_assigned()
* complete_extra_strings()
Since these would require scanning all (active?) bugs to compile
lists, and I was feeling lazy...
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes
$ python be diff -2
Usage: be [options]
be: error: no such option: -2
and we now get the correct output
$ python be diff -2
Usage: be diff [options] [REVISION]
be: error: no such option: -2
|
|
|
|
| |
It may need access to the tty for the spawned editor.
|
|
|
|
|
|
| |
Also added ConnectionError pretty-print to ui.command_line, storage
version checking to BugDir.duplicate_bugdir(), and optional revision
argument to Storage.storage_version().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
duplicate_bugdir() works, but for the vcs backends, it could require
shelling out for _every_ file read. This could, and probably will, be
horribly slow. Still it works ;).
I'm not sure what a better implementation would be. The old
implementation checked out the entire earlier state into a temporary
directory
pros: single shell out, simple upgrade implementation
cons: wouldn't work well for HTTP backens
I think a good solution would run along the lines of the currently
commented out code in duplicate_bugdir(), where a
VersionedStorage.changed_since(revision)
call would give you a list of changed files. diff could work off of
that directly, without the need to generate a whole duplicate bugdir.
I'm stuck on how to handle upgrades though...
Also removed trailing whitespace from all python files.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The old
.requires_*
thing was rediculous. The new ._get_*() callbacks allow the caller
to provide a means for getting the expensive structures, which the
command can use, or not, as required. This will also make it easier
to implement the completion callbacks.
The callbacks should probably have matching .set_*() methods, to
avoid the current cache tweaking
cmd._storage = ...
etc. But that can wait for now...
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Python 2.6 doesn't mind, but 2.5 doesn't like kwargs after a *
expansion:
$ ./be list
Traceback (most recent call last):
File "./be", line 5, in <module>
import libbe.ui.command_line
File "/home/wking/src/fun/be/be.restructure/libbe/ui/command_line.py", line 63
*opt_strings, action='callback', dest=dest,
^
SyntaxError: invalid syntax
|
| |
|
|
|