| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
This makes it easier to tweak log verbosity and redirect logs to other
handlers. For example, the WSGI servers are unstable with stderr
closed, and crash with an IOError if they try to print a warning to
stderr.
|
| |
|
|
|
|
|
| |
This happens because SimpleBugDir is not defined if libbe.TESTING is
not set before importing libbe.bugdir.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
The bulk of the work is in regard to XML, with new BugDir.xml and
.from_xml methods to support the new <bugdir> entity. I also split
the guts import_xml's ._run method into sub-methods to make the import
logic more obvious.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This avoids a deepcopy error where the BugDir tries to update before
the Bug has had it's uuid assigned:
Traceback (most recent call last):
...
File ".../libbe/command/merge.py", line 168, in _run
newCommTree = copy.deepcopy(bugB.comment_root)
File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
y = _reconstruct(x, rv, 1, memo)
...
File "/usr/lib64/python2.7/copy.py", line 352, in _reconstruct
y.append(item)
File ".../libbe/bugdir.py", line 263, in append
self._bug_map_gen()
File ".../libbe/bugdir.py", line 152, in _bug_map_gen
map[bug.uuid] = bug
AttributeError: 'Bug' object has no attribute 'uuid'
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
For `be list` on a bugdir with 4096 open bugs, this reduced the
cumulative time spend in 8194 calls to BugDir.uuids() from 41 seconds
to 33 seconds.
Of the 33 cumulative seconds, 24 were spend in uuids() itself (and not
in child functions), which is probably from the list comprehension
extracting in-memory Bug uuids. With fancier accounting, you could
probably trust _uuids_cache to already contain all the in-memory
uuids and dispense with the union altogether.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Avoids problems like:
$ be html
Traceback (most recent call last):
File "be", line 21, in <module>
sys.exit(libbe.ui.command_line.main())
File ".../libbe/ui/command_line.py", line 327, in main
ret = dispatch(ui, command, args)
File ".../libbe/ui/command_line.py", line 267, in dispatch
ret = ui.run(command, options, args)
File ".../libbe/command/base.py", line 504, in run
return command.run(options, args)
File ".../libbe/command/base.py", line 233, in run
self.status = self._run(**params)
File ".../libbe/command/html.py", line 111, in _run
html_gen.run(params['output'])
File ".../libbe/command/html.py", line 154, in run
bugs.sort()
File ".../libbe/bug.py", line 261, in __cmp__
return cmp_full(self, other)
File ".../libbe/bug.py", line 818, in __call__
val = comparison(bug_1, bug_2)
File ".../libbe/bug.py", line 750, in cmp_status
return cmp(status_index[bug_1.status], status_index[bug_2.status])
File ".../libbe/storage/util/properties.py", line 223,
in _fget
raise ValueCheckError(name, value, value_allowed_fn)
libbe.storage.util.properties.ValueCheckError: open-feature not allowed by <function <lambda> at 0x84b610c> for status
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
$ python test.py libbe.command.init
Doctest: libbe.command.init.Init ... FAIL
...
-----------------------
File ".../libbe/command/init.py", line 47, in libbe.command.init.Init
Failed example:
ui.run(cmd)
Exception raised:
Traceback (most recent call last):
...
File "/tmp/be.wtk/libbe/command/init.py", line 97, in _run
bd = libbe.bugdir.BugDir(storage, from_storage=False)
File "/tmp/be.wtk/libbe/bugdir.py", line 185, in __init__
self.save()
File "/tmp/be.wtk/libbe/bugdir.py", line 228, in save
self.save_settings()
File "/tmp/be.wtk/libbe/bugdir.py", line 204, in save_settings
mf = mapfile.generate(self._get_saved_settings())
File "/tmp/be.wtk/libbe/storage/util/settings_object.py", line 230, in _get_saved_settings
self, self._setting_name_to_attr_name(k))
File "/tmp/be.wtk/libbe/storage/util/properties.py", line 194, in _fget
value = fget(self)
File "/tmp/be.wtk/libbe/storage/util/properties.py", line 329, in _fget
primer(self)
File "/tmp/be.wtk/libbe/storage/util/settings_object.py", line 69, in prop_load_settings
self.load_settings()
File "/tmp/be.wtk/libbe/bugdir.py", line 194, in load_settings
self.settings = mapfile.parse(settings_mapfile)
File "/tmp/be.wtk/libbe/storage/util/mapfile.py", line 123, in parse
c = yaml.load(contents)
...
File "/usr/lib/python2.6/site-packages/yaml/reader.py", line 213, in update_raw
data = self.stream.read(size)
AttributeError: 'NoneType' object has no attribute 'read'
...
|
| |
|
| |
|
|
|
|
|
| |
Initial implementation in wking@drexel.edu-20100120192451-j206hn1s78u9a3ys
missed them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Output of
python -m cProfile -o profile be list
python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_stats()"
on my slow netbook before optimization:
ncalls tottime percall cumtime percall filename:lineno(function)
10290 0.417 0.000 10.832 0.001 libbe/bugdir.py:237(uuids)
after optimization:
105 0.063 0.001 0.250 0.002 libbe/bugdir.py:237(uuids)
The old generator produced many more calls than the new
implementation, but the number of calls was not the source of the
slowdown (data not shown ;).
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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...
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
We may already have the right type, in which case, don't mess with it.
This speeds up bugdir loading a bit more:
$ time be list > /dev/null
real 0m1.245s
user 0m1.116s
sys 0m0.124s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This flag allows us to skip unittest and testsuite declaration if we
woln't need them. It speeds up simple be calls a suprising amount.
With Testing=True (the old behavior):
wking@thor:be.wtk$ time ./be > /dev/null
real 0m0.393s
user 0m0.340s
sys 0m0.048s
With TESTING=False (the new behavior):
be.wtk$ time ./be > /dev/null
real 0m0.216s
user 0m0.152s
sys 0m0.064s
This adjustment was inspired by Jakub Wilk's Debian bug:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559295
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Protects agaist the off chance that the user doesn't have Arch (tla)
installed ;).
Changed Arch.name from "Arch" to "arch" so that each VCSs .name
matches the module name. This allows us to use vcs.VCS_ORDER (a list
of module names) to set up the allowed values of BugDir.vcs_name.
|
| |
|
|
|
|
|
|
|
|
|
| |
*.__del__() is run some unspecified time after the refcount for an
object is reduced to zero. Sometimes that means that the rest of the
world has already been deallocated, which makes life difficult,
especially when Python won't attempt to construct stack traces inside
*.__del__(). We were always (hopefully ;) calling del(*) anyway,
so we just replace those calls with *.cleanup()
|