pax_global_header00006660000000000000000000000064120517124760014517gustar00rootroot0000000000000052 comment=31b3f442f200c2c0d2e6b39e596c8f2793034d87 bugs-everywhere-1.1.1/000077500000000000000000000000001205171247600146425ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/000077500000000000000000000000001205171247600153065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/000077500000000000000000000000001205171247600222535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/000077500000000000000000000000001205171247600232135ustar00rootroot0000000000000000f26f04-9202-4288-8744-b29abc2342d6/000077500000000000000000000000001205171247600274115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600312365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d64be73baf-e46b-4acb-a58e-4719e57c550b/000077500000000000000000000000001205171247600363225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/commentsbody000066400000000000000000000005071205171247600372040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/4be73baf-e46b-4acb-a58e-4719e57c550bThe FSF offices are no longer at Temple Place, and there is a revised text of the GPLv2 giving the correct address and other textual clean-ups. The COPYING file should be updated to the new GPLv2 text, and the copyright notices throughout the working tree should be updated for the new boilerplate how-to-use-the-GPL text. values000066400000000000000000000002041205171247600375400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/4be73baf-e46b-4acb-a58e-4719e57c550b{ "Author": "benf", "Content-type": "text/plain", "Date": "Fri, 18 Apr 2008 11:21:03 +0000" } d5ed4f87-f1a1-4138-b0ad-190e4a49d820/000077500000000000000000000000001205171247600360735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/commentsbody000066400000000000000000000000671205171247600367560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/d5ed4f87-f1a1-4138-b0ad-190e4a49d820We could add this functionality to update_copyright.sh values000066400000000000000000000003431205171247600373150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/d5ed4f87-f1a1-4138-b0ad-190e4a49d820{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 14:08:45 +0000", "In-reply-to": "4be73baf-e46b-4acb-a58e-4719e57c550b" } values000066400000000000000000000004311205171247600306310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/00f26f04-9202-4288-8744-b29abc2342d6{ "assigned": "Ben Finney ", "creator": "benf", "severity": "minor", "status": "fixed", "summary": "Address is outdated for FSF offices", "time": "Fri, 18 Apr 2008 11:18:58 +0000" } 01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/000077500000000000000000000000001205171247600300115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1bb8e5c376-32a4-42ea-b6b2-adbee069384a/000077500000000000000000000000001205171247600366325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/commentsbody000066400000000000000000000015751205171247600375220ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384aOn Wed, Jan 20, 2010 at 01:24:25PM -0500, W. Trevor King wrote: > Of course, incorperating interactive functionality in command output > (i.e. changing the bug target from the bug-show page), doesn't fit > into this model. To do that, we'd have to abstract the default > command output the way we've already abstracted the commands and their > input... Does anyone know of any output-abstraction implementations to look at for inspiration. * How would we handle the options we currently pass through (shortlist, show_comments, etc.)? * Would standard arguments know how to display themselves? class Status (Argument): def str(self, ui, command, *args, **kwargs): ui.display_status(self, command, *args, **kwargs) class Bug (Argument): def str(self, ui, command, *args, **kwargs): ui.display_bug(self, command, *args, **kwargs) ... values000066400000000000000000000004341205171247600400550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a{ "Alt-id": "<20100120183646.GC14791@mjolnir>", "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Wed, 20 Jan 2010 18:36:46 +0000", "In-reply-to": "<20100120182425.GB14791@mjolnir>" } f5139012-e20b-4d24-90a5-10d969ddd364/000077500000000000000000000000001205171247600362505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/commentsbody000066400000000000000000000052451205171247600371360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364On Wed, Jan 20, 2010 at 09:34:44AM -0500, W. Trevor King wrote: > On Sun, Dec 06, 2009 at 04:47:23AM -0500, W. Trevor King wrote: > > Steve, I've caught my CFBE branch up to my current pre-trunk BE and > > added dependency links to the bug page, so you should be all set once > > you get back to CFBE. > > And I haven't pulled it up to date with my recent reorganization. As > far as release tarballs go though, we don't have to port to Bazaar at > all, we can stuff a recent CFBE snapshot into the BE tarball. How > do people feel about that? Ok, I've got CFBE working with my BE head: http://www.physics.drexel.edu/~wking/code/hg/cfbe/ However, I haven't reworked CFBE to take advantage of the new command structure. We'll need to extend libbe.command.base.Argument a bit as we work this out, but I expect we can auto-generate handlers for various commands with something along the lines of: class CommandHandler (object): def __init__(self, command): self.command = command def __call__(self, *args, **kwargs): if GET: template = self.env.get_template('command.html') return template.render(command=self.command) else: try: ret = libbe.ui.command_line.dispatch( self.command.ui, self.command, *args, **kwargs) except libbe.command.UserError, e: HANDLE ERROR stdout = self.command.ui.get_stdout() DISPLAY STDOUT OR REDIRECT... class WebInterface (libbe.command.UserInterface): ... def add_commands(self): for command_name in libbe.command.commands(): Class = libbe.command.get_command_class( command_name=command_name) command = Class(ui=self) self.command_name = cherrypy.expose( CommandHandler(command))
{% for option in command.options %} {{ option_form_html(option) }} {% endfor %} {% for argument in command.args %} {{ argument_form_html(argument) }} {% endfor %}
{{ command.help() }}
Of course, incorperating interactive functionality in command output (i.e. changing the bug target from the bug-show page), doesn't fit into this model. To do that, we'd have to abstract the default command output the way we've already abstracted the commands and their input... This sounds like a lot of work, and it is, but the goal is that BE adds functionality (new commands, option, etc.), and CFBE, be-handle-mail, etc. automatically incorperate the new stuff. Thoughts? values000066400000000000000000000004341205171247600374730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364{ "Alt-id": "<20100120182425.GB14791@mjolnir>", "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Wed, 20 Jan 2010 18:24:25 +0000", "In-reply-to": "<20100120143444.GA14451@mjolnir>" } values000066400000000000000000000004001205171247600312250ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b{ "creator": "W. Trevor King ", "severity": "minor", "status": "open", "summary": "Need command output abstraction for flexible UIs", "time": "Wed, 20 Jan 2010 20:35:12 +0000" } 01e7151c-6113-4c8f-9fc5-4d594431bd2b/000077500000000000000000000000001205171247600276315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b2f9beed6-4008-442a-8d44-a45cb7ce0a36/000077500000000000000000000000001205171247600363735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/commentsbody000066400000000000000000000007421205171247600372560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/comments/2f9beed6-4008-442a-8d44-a45cb7ce0a36I'm not sure that changing the URLs is a good idea. I'd rather use .htaccess and mod_rewrite to redirect short URLs to their permanent long equivalents. Nobody else seems to mind though, so I've merged Gianluca's solution with a few changes: * Since we're truncating bug IDs, truncate comment IDs too. * Use libbe.util.id._truncate to generate the short IDs, so that `be html` truncation is consistent with general BE truncation. * Updated cross-linking code to match. values000066400000000000000000000002411205171247600376120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/comments/2f9beed6-4008-442a-8d44-a45cb7ce0a36{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 20 Feb 2010 18:10:42 +0000" } values000066400000000000000000000004751205171247600310610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b{ "creator": "Gianluca Montecchi ", "reporter": "Gianluca Montecchi ", "severity": "minor", "status": "fixed", "summary": "Short the files name used by the be html command", "time": "Tue, 09 Feb 2010 23:03:33 +0000" } 02223264-e28a-4720-9f20-1e7a27a7041d/000077500000000000000000000000001205171247600273725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002271205171247600306150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/02223264-e28a-4720-9f20-1e7a27a7041d{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Needs more test cases" } 03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/000077500000000000000000000000001205171247600300525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b7bef29a2-20fb-4da2-b339-316787b416b7/000077500000000000000000000000001205171247600364605ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/commentsbody000066400000000000000000000000451205171247600373370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/7bef29a2-20fb-4da2-b339-316787b416b7I've changed my mind ;). Fixed now. values000066400000000000000000000003471205171247600377060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/7bef29a2-20fb-4da2-b339-316787b416b7{ "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Sat, 25 Feb 2012 20:46:41 +0000", "In-reply-to": "cf0b0155-0f1b-4863-a4c0-8cfc0494b280" } cf0b0155-0f1b-4863-a4c0-8cfc0494b280/000077500000000000000000000000001205171247600364375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/commentsbody000066400000000000000000000003001205171247600373100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/cf0b0155-0f1b-4863-a4c0-8cfc0494b280Trying to write to a bug repository to which you do not have write access should be uncommon enough that hiding the traceback seems like overkill. The final error message is clear enough... values000066400000000000000000000003471205171247600376650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/cf0b0155-0f1b-4863-a4c0-8cfc0494b280{ "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Thu, 08 Sep 2011 03:27:28 +0000", "In-reply-to": "cfea9568-a52d-4587-b803-823877dba0de" } cfea9568-a52d-4587-b803-823877dba0de/000077500000000000000000000000001205171247600365615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/commentsbody000066400000000000000000000033131205171247600374410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/cfea9568-a52d-4587-b803-823877dba0deUgly "exception" crash when permissions are not properly set. $ sudo chown -R root:root .be $ be new "Unauthorized" Traceback (most recent call last): File "/usr/local/bin/be", line 26, in sys.exit(libbe.ui.command_line.main()) File "/usr/local/lib/python2.7/dist-packages/libbe/ui/command_line.py", line 332, in main ret = dispatch(ui, command, args) File "/usr/local/lib/python2.7/dist-packages/libbe/ui/command_line.py", line 264, in dispatch ret = ui.run(command, options, args) File "/usr/local/lib/python2.7/dist-packages/libbe/command/base.py", line 534, in run return command.run(options, args) File "/usr/local/lib/python2.7/dist-packages/libbe/command/base.py", line 262, in run self.status = self._run(**params) File "/usr/local/lib/python2.7/dist-packages/libbe/command/new.py", line 92, in _run bug = bugdir.new_bug(summary=summary.strip()) File "/usr/local/lib/python2.7/dist-packages/libbe/bugdir.py", line 247, in new_bug from_storage=False) File "/usr/local/lib/python2.7/dist-packages/libbe/bug.py", line 257, in __init__ self.save() File "/usr/local/lib/python2.7/dist-packages/libbe/bug.py", line 663, in save self.storage.add(self.id.storage(), parent=parent, directory=True) File "/usr/local/lib/python2.7/dist-packages/libbe/storage/base.py", line 249, in add self._add(id, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/libbe/storage/vcs/base.py", line 654, in _add self._add_path(path, **kwargs) File "/usr/local/lib/python2.7/dist-packages/libbe/storage/vcs/base.py", line 643, in _add_path os.mkdir(dir) OSError: [Errno 13] Permission denied: '/home/tanguy/tmp/test/.be/7c416fb1-ab04-4144-97f4-6fded55524bc/bugs' values000066400000000000000000000002561205171247600400060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b/comments/cfea9568-a52d-4587-b803-823877dba0de{ "Author": "Tanguy LE CARROUR ", "Content-type": "text/plain", "Date": "Mon, 06 Jun 2011 18:48:16 +0000" } values000066400000000000000000000005031205171247600312720ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/03d07e61-f10b-4dc9-9bd8-3e4c14d6b47b{ "creator": "Tanguy LE CARROUR ", "reporter": "Tanguy LE CARROUR ", "severity": "minor", "status": "fixed", "summary": "Crash on permission problems", "time": "Mon, 06 Jun 2011 18:45:39 +0000" } 04edb940-06dd-4ded-8697-156d54a1d875/000077500000000000000000000000001205171247600277335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315605ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875e3389187-1e84-43d5-b40b-26f53090edff/000077500000000000000000000000001205171247600362755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/commentsbody000066400000000000000000000001371205171247600371560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edffThe problem is the jQuery selector... I need to escape something special but I'm not sure what.values000066400000000000000000000002401205171247600375130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff{ "Author": "Steve Losh ", "Content-type": "text/plain", "Date": "Mon, 02 Feb 2009 00:39:43 +0000" } values000066400000000000000000000007471205171247600311650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "open", "summary": "Assignee default selection is broken if two people have the same name but different emails.", "time": "Mon, 02 Feb 2009 00:38:49 +0000" } 09f84059-fc8e-4954-b24d-a2b33ef21bf4/000077500000000000000000000000001205171247600300055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4144c238c-75d1-40f1-82c1-647668bcf2bc/000077500000000000000000000000001205171247600363325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/commentsbody000066400000000000000000000000641205171247600372120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/144c238c-75d1-40f1-82c1-647668bcf2bcMerged from bug 597a7386-643f-4559-8dc4-6871924229b6values000066400000000000000000000002411205171247600375510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/144c238c-75d1-40f1-82c1-647668bcf2bc{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 13:35:41 +0000" } 2bb9163c-a2c4-4301-aff5-385f58a14301/000077500000000000000000000000001205171247600363125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/commentsbody000066400000000000000000000000271205171247600371710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/2bb9163c-a2c4-4301-aff5-385f58a14301Add *support*, damnit! values000066400000000000000000000002061205171247600375320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/2bb9163c-a2c4-4301-aff5-385f58a14301{ "Author": "abentley", "Content-type": "text/rst", "Date": "Thu, 06 Apr 2006 16:47:25 +0000" } eff20807-07f0-444d-8992-f69ab3f526c5/000077500000000000000000000000001205171247600363565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/commentsbody000066400000000000000000000001671205171247600372420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/eff20807-07f0-444d-8992-f69ab3f526c5This is an *rst* comment. Which means newlines don't matter, except when they gang up. lala - Bullet - Bulletvalues000066400000000000000000000003211205171247600375740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/eff20807-07f0-444d-8992-f69ab3f526c5{ "Author": "abentley", "Content-type": "text/restructured", "Date": "Thu, 06 Apr 2006 16:54:57 +0000", "In-reply-to": "144c238c-75d1-40f1-82c1-647668bcf2bc" } values000066400000000000000000000003041205171247600312240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Support RST", "time": "Thu, 06 Apr 2006 16:45:52 +0000" } 0a234f51-2fdf-4001-a04f-b7e02c2fa47b/000077500000000000000000000000001205171247600300205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006511205171247600312440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0a234f51-2fdf-4001-a04f-b7e02c2fa47b{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "fixed", "summary": "Humanize empty result pages.", "time": "Sat, 31 Jan 2009 03:03:52 +0000" } 0be47243-c172-4de9-b71b-d5dea60f91d5/000077500000000000000000000000001205171247600300535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007521205171247600313010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0be47243-c172-4de9-b71b-d5dea60f91d5{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "open", "summary": "Fix the null creation date bug. See bug ee6 in the BE repo for an example that breaks things.", "time": "Sun, 01 Feb 2009 21:26:49 +0000" } 0ca2d112-b5bb-4df1-8ac0-e46db6cdd442/000077500000000000000000000000001205171247600302435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003061205171247600314640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0ca2d112-b5bb-4df1-8ac0-e46db6cdd442{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Organize list by target, and whether it's assigned to current be id" } 0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/000077500000000000000000000000001205171247600304345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600322615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c16ba77d3-dfc9-4732-8d08-0e471f400d85/000077500000000000000000000000001205171247600367715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/commentsbody000066400000000000000000000030271205171247600376530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/16ba77d3-dfc9-4732-8d08-0e471f400d85When I try to do set-root on a git repository, I get: # be set-root . Traceback (most recent call last): File "/usr/local/bin/be", line 55, in sys.exit(execute(sys.argv[1], sys.argv[2:])) File "/usr/lib/python2.5/site-packages/libbe/cmdutil.py", line 105, in execute File "/usr/lib/python2.5/site-packages/becommands/set_root.py", line 57, in execute File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 110, in create_bug_dir File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 70, in set_version File "/usr/lib/python2.5/site-packages/libbe/git.py", line 51, in set_file_contents File "/usr/lib/python2.5/site-packages/libbe/git.py", line 38, in add_id File "/usr/lib/python2.5/site-packages/libbe/git.py", line 33, in invoke_client File "/usr/lib/python2.5/site-packages/libbe/rcs.py", line 63, in invoke File "/usr/lib/python2.5/subprocess.py", line 594, in __init__ errread, errwrite) File "/usr/lib/python2.5/subprocess.py", line 1147, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory: '' because the cwd argument for Popen is set to '' (the empty string). The following patch fixes the issue: --- libbe/git.py 2008-06-22 19:52:14.000000000 -0400 +++ libbe/git.py 2008-06-23 00:53:39.000000000 -0400 @@ -26,7 +26,7 @@ return filename def invoke_client(*args, **kwargs): - directory = kwargs['directory'] + directory = kwargs['directory'] or None expect = kwargs.get('expect', (0, 1)) cl_args = ["git"] cl_args.extend(args) values000066400000000000000000000002061205171247600402110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/16ba77d3-dfc9-4732-8d08-0e471f400d85{ "Author": "hubert", "Content-type": "text/plain", "Date": "Mon, 23 Jun 2008 05:02:22 +0000" } 17a2217e-fc1d-4d7a-a569-4fd2a4a2261e/000077500000000000000000000000001205171247600371675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/commentsbody000066400000000000000000000030541205171247600400510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/17a2217e-fc1d-4d7a-a569-4fd2a4a2261eIt looks like the problems with the git backend are more than just in the site-init command. It looks like several places expect that git_dir_for_path and git_repo_for_path return absolute paths, while in the current implementation, it may not be the case. Here is an updated patch to fix this. This replaces the previous patch that I gave in this bug. It seems to work for me, but I haven't heavily tested it. --- libbe/git.py 2008-06-22 19:52:14.000000000 -0400 +++ /libbe/git.py 2008-06-23 22:39:17.000000000 -0400 @@ -102,11 +102,16 @@ """Find the root of the deepest repository containing path.""" # Assume that nothing funny is going on; in particular, that we aren't # dealing with a bare repo. - return os.path.dirname(git_dir_for_path(path)) + # "git rev-parse --show-cdup" gives the relative path to the top-level + # directory of the repository. We then join that to the requested path, + # and then use realpath to turn it into an absolute path and to get rid of + # ".." components. + return os.path.realpath(os.path.join(path,invoke_client("rev-parse", "--show-cdup", directory=path)[1].rstrip())) def git_dir_for_path(path): """Find the git-dir of the deepest repo containing path.""" - return invoke_client("rev-parse", "--git-dir", directory=path)[1].rstrip() + repo = git_repo_for_path(path) + return os.path.join(repo,invoke_client("rev-parse", "--git-dir", directory=repo)[1].rstrip()) def export(spec, bug_dir, revision_dir): """Check out commit 'spec' from the git repo containing bug_dir into values000066400000000000000000000002061205171247600404070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/17a2217e-fc1d-4d7a-a569-4fd2a4a2261e{ "Author": "hubert", "Content-type": "text/plain", "Date": "Tue, 24 Jun 2008 02:45:18 +0000" } 202e0dc6-61bf-4b17-a8bd-f8a27482cb68/000077500000000000000000000000001205171247600371775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/commentsbody000066400000000000000000000003271205171247600400610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/202e0dc6-61bf-4b17-a8bd-f8a27482cb68Fixed another bug in git.strip_git(). lstrip() wasn't what I had thought. >>> "/a.b/.be/x/y".lstrip("/a.b/") 'e/x/y' So I went back to just droping the first N chars >>> "/a.b/.be/x/y"[len("/a.b/"):] '.be/x/y' values000066400000000000000000000002411205171247600404160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/202e0dc6-61bf-4b17-a8bd-f8a27482cb68{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 16 Nov 2008 20:36:20 +0000" } 6a0080c4-d684-4c2c-afaa-c15cc43d68ad/000077500000000000000000000000001205171247600373225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/commentsbody000066400000000000000000000000341205171247600401770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/6a0080c4-d684-4c2c-afaa-c15cc43d68adFixed with a simpler patch. values000066400000000000000000000002411205171247600405410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/6a0080c4-d684-4c2c-afaa-c15cc43d68ad{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 13 Nov 2008 19:31:04 +0000" } 7e733393-8ba0-4345-a0e3-4140101d32f0/000077500000000000000000000000001205171247600365125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/commentsbody000066400000000000000000000014051205171247600373720ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/7e733393-8ba0-4345-a0e3-4140101d32f0Oops, missed a case. I now see what Hubert was saying about absolute paths :p. In git.strip_git(), the output of git_repo_for_path('.') was being subtracted from an absolute path. Obviously, if the path was returning '.', you'd get things like filename= /home/wking/src/fun/testbe/.be/bugs/c3bf839b-88f9-4609-89a2-6a5b75c415b8/values stripping 2 chars ('.' and '/')], returns ome/wking/src/fun/testbe/.be/bugs/c3bf839b-88f9-4609-89a2-6a5b75c415b8/values Now we convert the git_repo_for_path output to an absolute path and get filename= /home/wking/src/fun/testbe/.be/bugs/c3bf839b-88f9-4609-89a2-6a5b75c415b8/values absRepoPath= /home/wking/src/fun/testbe absRepoSlashedDir= /home/wking/src/fun/testbe/ returns .be/bugs/c3bf839b-88f9-4609-89a2-6a5b75c415b8/values values000066400000000000000000000002411205171247600377310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/7e733393-8ba0-4345-a0e3-4140101d32f0{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 13 Nov 2008 20:18:02 +0000" } values000066400000000000000000000003261205171247600316570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c{ "creator": "hubert", "severity": "minor", "status": "fixed", "summary": "set-root in git repository fails", "time": "Mon, 23 Jun 2008 04:57:22 +0000" } 0e0c806c-5443-4839-aa60-9615c8c10853/000077500000000000000000000000001205171247600274145ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002311205171247600306320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0e0c806c-5443-4839-aa60-9615c8c10853{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "fix up command listings" } 1100c966-9671-4bc6-8b68-6d408a910da1/000077500000000000000000000000001205171247600274765ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da13646e056-a2df-46e5-b877-88608c7cc5af/000077500000000000000000000000001205171247600361345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/commentsbody000066400000000000000000000014601205171247600370150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/3646e056-a2df-46e5-b877-88608c7cc5af> We also have the unfortunate situation of duplicate UUIDs from the old > be merge > implemtation. This means that id-to-path is not a well defined > mapping with single-uuid ids. That's ok though, we get a bit uglier > and send the long_user() id into the storage backend instead. While > not so elegant, this will avoid the need for the cached id/path table. The situation is worse than just the old `be merge` effects, because the existence, children, and parents of a particular UUID may be revision dependent. A UUID will always refer to the same bugdir/bug/comment, but that bugdir/bug/comment may have different relatives. Another point in favor of long_user()-style storage ids, but that just pushes relation-tracking up to the command level. I'm still figuring out a good way to deal with this... values000066400000000000000000000003431205171247600373560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/3646e056-a2df-46e5-b877-88608c7cc5af{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 28 Dec 2009 12:12:45 +0000", "In-reply-to": "bd1207ef-f97e-4078-8c5d-046072012082" } 7812d2e5-9d4b-4621-b071-22e91e8757d2/000077500000000000000000000000001205171247600356735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/commentsbody000066400000000000000000000012331205171247600365520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/7812d2e5-9d4b-4621-b071-22e91e8757d2> The situation is worse than just the old `be merge` effects, because > the existence, children, and parents of a particular UUID may be > revision dependent. A UUID will always refer to the same > bugdir/bug/comment, but that bugdir/bug/comment may have different > relatives. I'm not sure how to support .children(revision) in the Arch backend or the older versions of Darcs without checking out a pristine tree for the revision in question. That's how we used to support BugDir.duplicate_bugdir() but it doesn't fit well with the new Storage system. Since I don't feel strongly about tla or old Darcs support, I'm leaving that functionality unimplemented. values000066400000000000000000000003431205171247600371150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/7812d2e5-9d4b-4621-b071-22e91e8757d2{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 29 Dec 2009 16:20:06 +0000", "In-reply-to": "3646e056-a2df-46e5-b877-88608c7cc5af" } bb406a33-92b6-46dd-950c-c7cfb5440e7b/000077500000000000000000000000001205171247600362415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/commentsbody000066400000000000000000000021131205171247600371160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bb406a33-92b6-46dd-950c-c7cfb5440e7bRather than all the hackery that goes on with email-bugs, the email interface, etc., it would be nice for distribution if be provided a uniform issue/bug tracking library and a number of interfaces and backends. Current backends: filesystem (with assorted VCSs) Current UIs: command line (be) email (be-handle-mail) web (CFBE) Future backend architecture: be --repo REPO ... where --repo REPO replaces and extends the current --dir DIR. Example REPOs could be path/to/repo (the current DIR) http://some-server.com:port/path/to/repo (http interface) mysql://user@server:port/?db=db-name;pwd=password ... Each repo would have to support a few get/set commands at the bugdir, bug, and comment level. The UIs would all load BugDir(REPO), and thus be backend agnostic. This way a GUI app that let you work on your own machine could also be used to work on a public repository. Setting up a public repository would just consist of exposing one of the wire-capable REPO formats (e.g. http via a future `be serve MY-URL`) with public write permissions. values000066400000000000000000000002411205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bb406a33-92b6-46dd-950c-c7cfb5440e7b{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 08 Dec 2009 01:06:12 +0000" } bd1207ef-f97e-4078-8c5d-046072012082/000077500000000000000000000000001205171247600356635ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/commentsbody000066400000000000000000000041651205171247600365510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bd1207ef-f97e-4078-8c5d-046072012082Some additional thoughts, as I've been developing this idea: Different BE storage versions will be difficult to handle. We currently do disk upgrades via libbe.storage.util.upgrade which browses through the .be/ directory, making appropriate changes. The new formats know very little about paths, which brought on the whole libbe.storage.vcs.base.CachedPathID bit. Still, most VCSs seem to be able to handle renames, e.g. $ bzr cat -r 200 ./libbe/command/new.py works, when as of revision 200, the file was ./becommands/new.py In fact, bzr recognizes both names: $ diff <(bzr cat -r 200 ./becommands/new.py) \ <(bzr cat -r 200 ./libbe/commands/new.py) returns nothing. Still, I'm not sure this is something we should require in a storage backend. Which means we'd need to have a version-dependent id-to-path(version) function. We also have the unfortunate situation of duplicate UUIDs from the old be merge implemtation. This means that id-to-path is not a well defined mapping with single-uuid ids. That's ok though, we get a bit uglier and send the long_user() id into the storage backend instead. While not so elegant, this will avoid the need for the cached id/path table. Ok, you say, we're fine if we have the compound bugdir/bug/comment ids going out to storage, with the upgrader upgrading the file appropriately for each file type. Almost. You'll still run into trouble with upgrades like dir format v1.2 to 1.3 where targets moved from a per-bug string to a seperate-bugs-with-dependencies. Now you need to create virtual-target-bugs on the fly when you're loading the old bugs. Yuck. All of this makes me wonder how much we care about being able to see bug diffs for any repository format older than the current one. I think that we don't really care ;). After all, the on-disk format should settle down as BE matures :p. When you _do_ want to see the long-term history of a particular bug, there's always bzr log .be/123/bugs/456/values or the equivalent for your VCS. If access to the raw log ends up being important, it should be very easy to add libbe.storage.base.VersionedStorage.log(id) libbe.command.log values000066400000000000000000000003431205171247600371050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bd1207ef-f97e-4078-8c5d-046072012082{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 15 Dec 2009 12:21:11 +0000", "In-reply-to": "bb406a33-92b6-46dd-950c-c7cfb5440e7b" } values000066400000000000000000000004761205171247600307270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/1100c966-9671-4bc6-8b68-6d408a910da1{ "creator": "W. Trevor King ", "reporter": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "Reoranize BE for more flexible backend / frontend", "time": "Tue, 08 Dec 2009 00:48:27 +0000" } 12c986be-d19a-4b8b-b1b5-68248ff4d331/000077500000000000000000000000001205171247600300035ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316305ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d3310f60a148-7024-44bd-bbed-377cbece9d1b/000077500000000000000000000000001205171247600367005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000017311205171247600375620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/0f60a148-7024-44bd-bbed-377cbece9d1bRonny Pfannschmidt writes: > the basic idea is to take a look at all public branches (for exaple > all on lp/bitbucket/github) in order to tell the user of a > webinterface that bug foo is fixed in branch xyz, and if its merged to > the main branch I don't understand. The state of the bug in the main branch is right there in the main branch; if it's not fixed there, it's not fixed there. If it's merged in from a different branch, the bug state follows all the other changes when they come in. Can you give an example of what would be done differently? -- \ “The basic fact about human existence is not that it is a | `\ tragedy, but that it is a bore.” —Henry L. Mencken | _o__) | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600401230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/0f60a148-7024-44bd-bbed-377cbece9d1b{ "Alt-id": "<874otjmjhr.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 23:34:08 +1000", "In-reply-to": "88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7" } 13012b22-2d02-444c-87c0-8cf0f17137ae/000077500000000000000000000000001205171247600362215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000025351205171247600371060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/13012b22-2d02-444c-87c0-8cf0f17137aeOn Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > 1. is there any way to aggregate over multiple public branches in order > to get the complete bug state Keeping the bug data with the source helps synchronize bug state and source code. Bug state in branch A may not apply to branch B. Some people like to weaken this source-bug linkage by keeping their bugs in a branch all by themselves (ditz [http://ditz.rubyforge.org/] currently supports this workflow). It sounds like you want to move from "bugs with code" to "bugs and code in separate branches". We don't have an easy way to do that in BE at the moment, since version-control systems like Git have a single working branch at a time (I think :p). What VCS are you using as a backend? > 2. is there any model for storing bigger files at a central place (for > some of my bugs i have multi-megabyte tarballs attached) be comment ID "See the tarball at http://yourpage/something.tar.gz" Then to grab the tarball, you'd use: wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` to grab it. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600374460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/13012b22-2d02-444c-87c0-8cf0f17137ae{ "Alt-id": "<20090711125030.GA18185@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 08:50:30 -0400", "In-reply-to": "88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7" } 1f9f60de-ba37-42bc-a1c0-dc062ef255e1/000077500000000000000000000000001205171247600366715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000017171205171247600375570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/1f9f60de-ba37-42bc-a1c0-dc062ef255e1Ronny Pfannschmidt writes: > 1. is there any way to aggregate over multiple public branches in > order to get the complete bug state The bug state is as complete as the source code state. It's exactly as aggregated as the rest of the source code; the “complete bug state” would be the integration branch where you merge all the feature branches and bug-fix branches together. If instead you want bugs to *not* be tightly linked with the rest of the source code state, it seems you don't want a distributed bug tracker like Bugs Everywhere. -- \ “I cannot conceive that anybody will require multiplications at | `\ the rate of 40,000 or even 4,000 per hour …” —F. H. Wales, 1936 | _o__) | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600401140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/1f9f60de-ba37-42bc-a1c0-dc062ef255e1{ "Alt-id": "<878wivmjm1.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 23:31:34 +1000", "In-reply-to": "88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7" } 30a8b841-98ae-41b7-9ef2-6af7cffca8da/000077500000000000000000000000001205171247600370055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000104231205171247600376650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/30a8b841-98ae-41b7-9ef2-6af7cffca8daOn Mon, Jul 13, 2009 at 09:05:34AM +0200, Ronny Pfannschmidt wrote: > On Sun, 2009-07-12 at 19:55 -0400, W. Trevor King wrote: > > On Sun, Jul 12, 2009 at 11:20:10PM +0200, Ronny Pfannschmidt wrote: > > > On Sat, 2009-07-11 at 11:25 -0400, W. Trevor King wrote: > > > > On Sat, Jul 11, 2009 at 03:13:05PM +0200, Ronny Pfannschmidt wrote: > > > > > On Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > > > > > > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > > > > > > 2. is there any model for storing bigger files at a central place (for > > > > > > > some of my bugs i have multi-megabyte tarballs attached) > > > > > > > > > > > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > > > > > > Then to grab the tarball, you'd use: > > > > > > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > > > > > > to grab it. > > > > > > > > > > so the basic idea is to do it completely self-managed > > > > > and have have heterogenous sources of extended data? > > > > > > > > I assume "extended data" here refers to your tarballs. What sort of > > > > homogenous source did you have in mind? The comment body is currently > > > > just a binary blob for non-text/* types, otherwise it's text in > > > > whatever encoding you've configured. > > > > > > some kind of common upload target for a single project in order to have > > > more reliable sources of stuff thats related to bugs but doesnt fit into > > > the normal repository > > > > Sorry, I'm still having trouble with "doesn't fit into the normal > > repository". It's going to be large wherever you keep it. You > > worried about multiple branches all having these big tarballs in them > > and want a "lightweight" checkout without all the big > > tarballs/whatever? I still think having some sort of "resources" > > directory on an http server somewhere that you link to from comments > > is the best plan. If you use the > > be show --xml ID | be-xml-to-mbox | catmutt > > approach, you can even write your comments in text/html and get > > clickable links ;). A "push big file to remote and commit comment > > linking to it" script would be pretty simple and keep everything > > consistent. > > thats probably what i want to do #!/bin/bash REMOTE_DIR="you@webhost:./public_html/bigfiles" REMOTE_LINK="http://www.webhost.com/bigfiles" if [ $# -ne 2 ]; then echo "usage: $0 ID BIGFILE" exit 1 fi ID="$1" BIGFILE="$2" be comment "$ID" "Large file stored at ${REMOTE_LINK}/${BIGFILE}" && scp "$BIGFILE" "${REMOTE_DIR}" > > > > On Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > > > > > Ronny Pfannschmidt writes: > > > > > > > > > > > i want to see the combination of the bug data of all branches > > > > > > > > > > How is a tool to determine the set of “all branches”? The distributed > > > > > VCS model means that set is indeterminate. > > > > > > > > He could just make a list of branches he likes. > > > > > > > > Ronny, are you looking to check bug status across several repos on the > > > > fly, or periodically run something (with cron, etc.) to update a > > > > static multi-repo summary? > > > > > > on the fly access > > > > Then listing bugs in a remote repo will either involve httping tons of > > tiny values files for each bug (slow?) or running some hypothetical > > BE-server locally for each repo speaking some BE-specific protocol > > (complicated?). And how would you handle e.g. headless git repos, > > where nothing's even checked out? > > > > You could always run the cron job every 15 minutes, and rely on > > whatever VCS you're using having some intelligent protocol/procedure > > to keep bandwidth down ;). If you need faster / more-efficient > > updates, you'll probably need to throw out polling altogether and > > setup all involved repos with a "push to central-repo on commit" hook > > or some such. > > its intended to run on the place where i publish the repositories anyway Oh, you mean all the repos you want to cover are all _already_ on the same host? -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600402320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/30a8b841-98ae-41b7-9ef2-6af7cffca8da{ "Alt-id": "<20090713104715.GA13723@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 13 Jul 2009 06:47:15 -0400", "In-reply-to": "6dcc910a-ce15-4eeb-b49b-4747719748ed" } 46937fd4-b0bc-4eed-8033-d699445441ea/000077500000000000000000000000001205171247600364255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000021441205171247600373060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/46937fd4-b0bc-4eed-8033-d699445441eaOn Sat, Jul 11, 2009 at 11:25:07AM -0400, W. Trevor King wrote: > The easiest implementation I can think of would be to keep local > branches (on whatever computer is hosting your web interface) > following your favorite repos. > proxectX/ > |-- repoA > |-- repoB > `-- repoC > You'd pull upstream changes with a cron job. > Listing bugs would be something along the lines of > projectX$ for repo in * > do > pushd $repo > be list > popd > done | sort | uniq > ... I've reworked option handling for be, so my branch now supports projectX$ for repo in * do be --dir $repo list done | sort | uniq etc. This also makes it easy to use your uninstalled development version of be on any bug directory on your local machine. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600376520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/46937fd4-b0bc-4eed-8033-d699445441ea{ "Alt-id": "<20090713115734.GA13788@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 13 Jul 2009 07:57:34 -0400", "In-reply-to": "bd98f525-95ec-446a-84e8-34c7d6fa5b40" } 4d192c6c-a4a8-4844-b083-2dd5926bd2d9/000077500000000000000000000000001205171247600364175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000066461205171247600373130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/4d192c6c-a4a8-4844-b083-2dd5926bd2d9On Sun, Jul 12, 2009 at 11:20:10PM +0200, Ronny Pfannschmidt wrote: > On Sat, 2009-07-11 at 11:25 -0400, W. Trevor King wrote: > > On Sat, Jul 11, 2009 at 03:13:05PM +0200, Ronny Pfannschmidt wrote: > > > On Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > > > > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > > > > 2. is there any model for storing bigger files at a central place (for > > > > > some of my bugs i have multi-megabyte tarballs attached) > > > > > > > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > > > > Then to grab the tarball, you'd use: > > > > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > > > > to grab it. > > > > > > so the basic idea is to do it completely self-managed > > > and have have heterogenous sources of extended data? > > > > I assume "extended data" here refers to your tarballs. What sort of > > homogenous source did you have in mind? The comment body is currently > > just a binary blob for non-text/* types, otherwise it's text in > > whatever encoding you've configured. > > some kind of common upload target for a single project in order to have > more reliable sources of stuff thats related to bugs but doesnt fit into > the normal repository Sorry, I'm still having trouble with "doesn't fit into the normal repository". It's going to be large wherever you keep it. You worried about multiple branches all having these big tarballs in them and want a "lightweight" checkout without all the big tarballs/whatever? I still think having some sort of "resources" directory on an http server somewhere that you link to from comments is the best plan. If you use the be show --xml ID | be-xml-to-mbox | catmutt approach, you can even write your comments in text/html and get clickable links ;). A "push big file to remote and commit comment linking to it" script would be pretty simple and keep everything consistent. > > On Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > > > Ronny Pfannschmidt writes: > > > > > > > i want to see the combination of the bug data of all branches > > > > > > How is a tool to determine the set of “all branches”? The distributed > > > VCS model means that set is indeterminate. > > > > He could just make a list of branches he likes. > > > > Ronny, are you looking to check bug status across several repos on the > > fly, or periodically run something (with cron, etc.) to update a > > static multi-repo summary? > > on the fly access Then listing bugs in a remote repo will either involve httping tons of tiny values files for each bug (slow?) or running some hypothetical BE-server locally for each repo speaking some BE-specific protocol (complicated?). And how would you handle e.g. headless git repos, where nothing's even checked out? You could always run the cron job every 15 minutes, and rely on whatever VCS you're using having some intelligent protocol/procedure to keep bandwidth down ;). If you need faster / more-efficient updates, you'll probably need to throw out polling altogether and setup all involved repos with a "push to central-repo on commit" hook or some such. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600376440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/4d192c6c-a4a8-4844-b083-2dd5926bd2d9{ "Alt-id": "<20090712235502.GA10782@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 12 Jul 2009 19:55:02 -0400", "In-reply-to": "8ffc90d7-0be7-4b00-88e6-9ae1b65f7957" } 624a4542-92e9-442e-b71c-a14da4fe55cf/000077500000000000000000000000001205171247600364715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000074201205171247600373540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/624a4542-92e9-442e-b71c-a14da4fe55cfI read http://weblog.masukomi.org/2008/1/3/distributed-bug-tracking yesterday, and the section on bug visibility got me thinking about bug 12c (Multi-repo meta-BE?) some more. We already have interfaces like this email/html mashup: On Sun, Sep 13, 2009 at 07:04:05AM -0400, W. Trevor King wrote: > Since the non-bzr interfaces to BE are coming along nicely, I've put > up a non-bzr interface to my be-rr branch. > http://www.physics.drexel.edu/~wking/code/be > It uses nightly builds of Gianluca's static html from my devel branch > to provide read-only browsing, and accepts changes from the general > public through my email interface into a public branch. I handle the > synchronization of these two branches manually. These interfaces provide a means for remote users to access a BE repository without bzr or the command line. As far as users are concerned, this exposed repository looks pretty much like a centralized bugtracking system (e.g. bugzilla, ...). However, with BE we have more bug information living off in other branches that haven't yet been merged with the exposed repo. The problem is two-fold: 1) how to keep up to date within a distributed community. 2) how do users find branches/patches that fix bug XYZ. For (2), I think the best solution at the moment are along the lines of my little scripts (discussed in the bug 12c comments). With the addition of the `be diff --dir DIR` option, it's now even easier to find more information on bug 565 (or whatever UUID): be/be.wtk$ for repo in ../*; do \ if [ $repo == "be.wtk" ]; then continue; fi; \ diff=$(be diff --dir $repo --subscribe 565:all); \ if [ -n "$diff" ]; then \ echo "Changed from $repo:"; echo "$diff"; \ fi; \ done Changed from ../be.html: New bugs: 565:fm: be email-bugs for bug submission from bzr-less users Changed from ../be.trunk: New bugs: 565:fm: be email-bugs for bug submission from bzr-less users Changed from ../cherryflavoredbugseverywhere: New bugs: 565:fm: be email-bugs for bug submission from bzr-less users where the --dir and --subscribe options to `be diff` are new. If people don't like the command line, this would be easy to bundle into a web-frontend (CFBE?) if you wanted, with a cron job pulling updates into the tracked branches. I was starting into a solution for (1) when I did this: On Mon, Jul 27, 2009 at 08:42:19AM -0400, W. Trevor King wrote: > My email interface now supports subscription: > be subscribe DIR # see any changes to the bug directory. > be subscribe BUG-ID # see changes to a particular bug. > See > be subscribe --help > for more details. The idea was that a dev/user would subscribe to whatever issues they wanted to track, and they would get email notifications whenever some action affected any of those issues. These subscriptions would percolate through the distributed branches as a result of the usual mergers. For example, my subscription to all changes has made it into the trunk branch (see .be/settings). This subscription mechanism was setup to work through interactive public interfaces (my email interface, eventually CFBE, ...), but it doesn't work for changes made via the command-line interface, so I browsed around a bit and ran across some interesting workflows in the bzr documentation doc/developers/HACKING.txt, "Communicating and Coordinating" which points out the following plugins * email (http://doc.bazaar-vcs.org/plugins/en/email-plugin.html) * dbus (http://doc.bazaar-vcs.org/plugins/en/dbus-plugin.html) which send automatic notification messages after commits, etc. If people want this sort of functionality, it would be easy enough to rig a hook for `be commit' that sent a diff email to subscribers, which could include be-devel. values000066400000000000000000000002411205171247600377100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/624a4542-92e9-442e-b71c-a14da4fe55cf{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 05 Dec 2009 22:39:07 +0000" } 6dcc910a-ce15-4eeb-b49b-4747719748ed/000077500000000000000000000000001205171247600365705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000066561205171247600374650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/6dcc910a-ce15-4eeb-b49b-4747719748edOn Sun, 2009-07-12 at 19:55 -0400, W. Trevor King wrote: > On Sun, Jul 12, 2009 at 11:20:10PM +0200, Ronny Pfannschmidt wrote: > > On Sat, 2009-07-11 at 11:25 -0400, W. Trevor King wrote: > > > On Sat, Jul 11, 2009 at 03:13:05PM +0200, Ronny Pfannschmidt wrote: > > > > On Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > > > > > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > > > > > 2. is there any model for storing bigger files at a central place (for > > > > > > some of my bugs i have multi-megabyte tarballs attached) > > > > > > > > > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > > > > > Then to grab the tarball, you'd use: > > > > > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > > > > > to grab it. > > > > > > > > so the basic idea is to do it completely self-managed > > > > and have have heterogenous sources of extended data? > > > > > > I assume "extended data" here refers to your tarballs. What sort of > > > homogenous source did you have in mind? The comment body is currently > > > just a binary blob for non-text/* types, otherwise it's text in > > > whatever encoding you've configured. > > > > some kind of common upload target for a single project in order to have > > more reliable sources of stuff thats related to bugs but doesnt fit into > > the normal repository > > Sorry, I'm still having trouble with "doesn't fit into the normal > repository". It's going to be large wherever you keep it. You > worried about multiple branches all having these big tarballs in them > and want a "lightweight" checkout without all the big > tarballs/whatever? I still think having some sort of "resources" > directory on an http server somewhere that you link to from comments > is the best plan. If you use the > be show --xml ID | be-xml-to-mbox | catmutt > approach, you can even write your comments in text/html and get > clickable links ;). A "push big file to remote and commit comment > linking to it" script would be pretty simple and keep everything > consistent. thats probably what i want to do > > > > On Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > > > > Ronny Pfannschmidt writes: > > > > > > > > > i want to see the combination of the bug data of all branches > > > > > > > > How is a tool to determine the set of “all branches”? The distributed > > > > VCS model means that set is indeterminate. > > > > > > He could just make a list of branches he likes. > > > > > > Ronny, are you looking to check bug status across several repos on the > > > fly, or periodically run something (with cron, etc.) to update a > > > static multi-repo summary? > > > > on the fly access > > Then listing bugs in a remote repo will either involve httping tons of > tiny values files for each bug (slow?) or running some hypothetical > BE-server locally for each repo speaking some BE-specific protocol > (complicated?). And how would you handle e.g. headless git repos, > where nothing's even checked out? > > You could always run the cron job every 15 minutes, and rely on > whatever VCS you're using having some intelligent protocol/procedure > to keep bandwidth down ;). If you need faster / more-efficient > updates, you'll probably need to throw out polling altogether and > setup all involved repos with a "push to central-repo on commit" hook > or some such. its intended to run on the place where i publish the repositories anyway values000066400000000000000000000004541205171247600400150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/6dcc910a-ce15-4eeb-b49b-4747719748ed{ "Alt-id": "<1247468734.7189.1.camel@localhost>", "Author": "Ronny Pfannschmidt ", "Content-type": "text/plain", "Date": "Mon, 13 Jul 2009 09:05:34 +0200", "In-reply-to": "4d192c6c-a4a8-4844-b083-2dd5926bd2d9" } 88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7/000077500000000000000000000000001205171247600366535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000006301205171247600375320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7Hi, 1. is there any way to aggregate over multiple public branches in order to get the complete bug state 2. is there any model for storing bigger files at a central place (for some of my bugs i have multi-megabyte tarballs attached) Regards Ronny _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000003531205171247600400760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7{ "Alt-id": "<1247313294.7701.60.camel@localhost>", "Author": "Ronny Pfannschmidt ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 13:54:54 +0200" } 8ffc90d7-0be7-4b00-88e6-9ae1b65f7957/000077500000000000000000000000001205171247600365245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000074561205171247600374200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/8ffc90d7-0be7-4b00-88e6-9ae1b65f7957On Sat, 2009-07-11 at 11:25 -0400, W. Trevor King wrote: > On Sat, Jul 11, 2009 at 03:13:05PM +0200, Ronny Pfannschmidt wrote: > > On Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > > > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > > > 1. is there any way to aggregate over multiple public branches in order > > > > to get the complete bug state > > > > > > Keeping the bug data with the source helps synchronize bug state and > > > source code. Bug state in branch A may not apply to branch B. Some > > > people like to weaken this source-bug linkage by keeping their bugs in > > > a branch all by themselves (ditz [http://ditz.rubyforge.org/] > > > currently supports this workflow). It sounds like you want to move > > > from "bugs with code" to "bugs and code in separate branches". We > > > don't have an easy way to do that in BE at the moment, since > > > version-control systems like Git have a single working branch at a > > > time (I think :p). What VCS are you using as a backend? > > > > the basic idea is to take a look at all public branches (for exaple all > > on lp/bitbucket/github) in order to tell the user of a webinterface that > > bug foo is fixed in branch xyz, and if its merged to the main branch > > Hmm. > > > > > 2. is there any model for storing bigger files at a central place (for > > > > some of my bugs i have multi-megabyte tarballs attached) > > > > > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > > > Then to grab the tarball, you'd use: > > > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > > > to grab it. > > so the basic idea is to do it completely self-managed > > Well, it's going to be managed by somebody ;). So far I'm not > convinced enough for the manager to be me, so I'm suggesting it be you > :p. > > > and have have heterogenous sources of extended data? > > I assume "extended data" here refers to your tarballs. What sort of > homogenous source did you have in mind? The comment body is currently > just a binary blob for non-text/* types, otherwise it's text in > whatever encoding you've configured. some kind of common upload target for a single project in order to have more reliable sources of stuff thats related to bugs but doesnt fit into the normal repository > > On Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > > Ronny Pfannschmidt writes: > > > > > i want to see the combination of the bug data of all branches > > > > How is a tool to determine the set of “all branches”? The distributed > > VCS model means that set is indeterminate. > > He could just make a list of branches he likes. > > Ronny, are you looking to check bug status across several repos on the > fly, or periodically run something (with cron, etc.) to update a > static multi-repo summary? on the fly access > > The easiest implementation I can think of would be to keep local > branches (on whatever computer is hosting your web interface) > following your favorite repos. > proxectX/ > |-- repoA > |-- repoB > `-- repoC > You'd pull upstream changes with a cron job. > Listing bugs would be something along the lines of > projectX$ for repo in * > do > pushd $repo > be list > popd > done | sort | uniq > Then to show bug status you would have something like > projectX$ for repo in * > do > echo $repo > pushd $repo > be show ${BUGID} > popd > done > For a web frontend, you'd want to translate that to python/libbe. > yes, the idea is to get a web fontend for multiple branches and maybe a local gtk fontend for local multi-branch setups for some of my projects i have n local and m remote repos, and merging is not always intended soonish values000066400000000000000000000004551205171247600377520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/8ffc90d7-0be7-4b00-88e6-9ae1b65f7957{ "Alt-id": "<1247433610.14803.3.camel@localhost>", "Author": "Ronny Pfannschmidt ", "Content-type": "text/plain", "Date": "Sun, 12 Jul 2009 23:20:10 +0200", "In-reply-to": "bd98f525-95ec-446a-84e8-34c7d6fa5b40" } bd98f525-95ec-446a-84e8-34c7d6fa5b40/000077500000000000000000000000001205171247600365175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000067251205171247600374110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/bd98f525-95ec-446a-84e8-34c7d6fa5b40On Sat, Jul 11, 2009 at 03:13:05PM +0200, Ronny Pfannschmidt wrote: > On Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > > 1. is there any way to aggregate over multiple public branches in order > > > to get the complete bug state > > > > Keeping the bug data with the source helps synchronize bug state and > > source code. Bug state in branch A may not apply to branch B. Some > > people like to weaken this source-bug linkage by keeping their bugs in > > a branch all by themselves (ditz [http://ditz.rubyforge.org/] > > currently supports this workflow). It sounds like you want to move > > from "bugs with code" to "bugs and code in separate branches". We > > don't have an easy way to do that in BE at the moment, since > > version-control systems like Git have a single working branch at a > > time (I think :p). What VCS are you using as a backend? > > the basic idea is to take a look at all public branches (for exaple all > on lp/bitbucket/github) in order to tell the user of a webinterface that > bug foo is fixed in branch xyz, and if its merged to the main branch Hmm. > > > 2. is there any model for storing bigger files at a central place (for > > > some of my bugs i have multi-megabyte tarballs attached) > > > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > > Then to grab the tarball, you'd use: > > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > > to grab it. > so the basic idea is to do it completely self-managed Well, it's going to be managed by somebody ;). So far I'm not convinced enough for the manager to be me, so I'm suggesting it be you :p. > and have have heterogenous sources of extended data? I assume "extended data" here refers to your tarballs. What sort of homogenous source did you have in mind? The comment body is currently just a binary blob for non-text/* types, otherwise it's text in whatever encoding you've configured. On Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > Ronny Pfannschmidt writes: > > > i want to see the combination of the bug data of all branches > > How is a tool to determine the set of “all branches”? The distributed > VCS model means that set is indeterminate. He could just make a list of branches he likes. Ronny, are you looking to check bug status across several repos on the fly, or periodically run something (with cron, etc.) to update a static multi-repo summary? The easiest implementation I can think of would be to keep local branches (on whatever computer is hosting your web interface) following your favorite repos. proxectX/ |-- repoA |-- repoB `-- repoC You'd pull upstream changes with a cron job. Listing bugs would be something along the lines of projectX$ for repo in * do pushd $repo be list popd done | sort | uniq Then to show bug status you would have something like projectX$ for repo in * do echo $repo pushd $repo be show ${BUGID} popd done For a web frontend, you'd want to translate that to python/libbe. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600377440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/bd98f525-95ec-446a-84e8-34c7d6fa5b40{ "Alt-id": "<20090711152507.GA18461@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 11:25:07 -0400", "In-reply-to": "e520239c-8d69-4ff6-b1bd-0c2f74366200" } c8283e08-967c-4a7b-b953-3ec62c83fb9f/000077500000000000000000000000001205171247600365225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000030501205171247600374000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/c8283e08-967c-4a7b-b953-3ec62c83fb9fOn Sun, Jul 12, 2009 at 12:57:35AM +1000, Ben Finney wrote: > Ronny Pfannschmidt writes: > > > i want to see the combination of the bug data of all branches > > What is your definition of ???all branches???? When I'm working with > distributed VCS, I create branches wherever I feel like, and the VCS > tool doesn't have some central registry of branches to keep up to date. > > How is a tool to determine the set of ???all branches???? The distributed > VCS model means that set is indeterminate. In the first main Ronny spoke about "public" branches. To me it means that if a branch is public, he should like to have a status of that branch. We all agree (probably ;-) ) that tha main branch is the "right" branch, but as I see it, Ronny's question has some logic. I'd like to know that a certain bug is fixed in a certain branch, also if it is still not merged in the main branch, for various reason (ie I am interested in the solution since the bug stop my work) Imagine it like a rss feed aggregator: in one place there are all the bugs of all the branches that the developers make avaible to the public with a repository. This can make easier the life to who want to try a something since he know what branch he must check out, instead of checking all the branch he can find to test if he get what is looking for. Unluckyly I have no idea how to solve it. :-( bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004341205171247600377450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/c8283e08-967c-4a7b-b953-3ec62c83fb9f{ "Alt-id": "<20090713085859.GA21800@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 13 Jul 2009 10:58:59 +0200", "In-reply-to": "e520239c-8d69-4ff6-b1bd-0c2f74366200" } d86e497d-667d-4c2b-9249-76026df56633/000077500000000000000000000000001205171247600362325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000021211205171247600371060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/d86e497d-667d-4c2b-9249-76026df56633On Sat, 2009-07-11 at 23:34 +1000, Ben Finney wrote: > Ronny Pfannschmidt writes: > > > the basic idea is to take a look at all public branches (for exaple > > all on lp/bitbucket/github) in order to tell the user of a > > webinterface that bug foo is fixed in branch xyz, and if its merged to > > the main branch > > I don't understand. The state of the bug in the main branch is right > there in the main branch; if it's not fixed there, it's not fixed there. > If it's merged in from a different branch, the bug state follows all the > other changes when they come in. > > Can you give an example of what would be done differently? > i want to see the combination of the bug data of all branches for example i got bug its fixed in the branch "something" its not fixed/merged to "main" now something like a website should tell me, this bug has been fixed in branch xyz and the fix is not yet merged into main _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004551205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/d86e497d-667d-4c2b-9249-76026df56633{ "Alt-id": "<1247320857.7701.67.camel@localhost>", "Author": "Ronny Pfannschmidt ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 16:00:57 +0200", "In-reply-to": "0f60a148-7024-44bd-bbed-377cbece9d1b" } dc32aa62-cf56-4171-84a1-8f7d02b23b6d/000077500000000000000000000000001205171247600364565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000027411205171247600373420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/dc32aa62-cf56-4171-84a1-8f7d02b23b6dOn Sat, 2009-07-11 at 08:50 -0400, W. Trevor King wrote: > On Sat, Jul 11, 2009 at 01:54:54PM +0200, Ronny Pfannschmidt wrote: > > 1. is there any way to aggregate over multiple public branches in order > > to get the complete bug state > > Keeping the bug data with the source helps synchronize bug state and > source code. Bug state in branch A may not apply to branch B. Some > people like to weaken this source-bug linkage by keeping their bugs in > a branch all by themselves (ditz [http://ditz.rubyforge.org/] > currently supports this workflow). It sounds like you want to move > from "bugs with code" to "bugs and code in separate branches". We > don't have an easy way to do that in BE at the moment, since > version-control systems like Git have a single working branch at a > time (I think :p). What VCS are you using as a backend? the basic idea is to take a look at all public branches (for exaple all on lp/bitbucket/github) in order to tell the user of a webinterface that bug foo is fixed in branch xyz, and if its merged to the main branch > > > 2. is there any model for storing bigger files at a central place (for > > some of my bugs i have multi-megabyte tarballs attached) > > be comment ID "See the tarball at http://yourpage/something.tar.gz" > Then to grab the tarball, you'd use: > wget `be show COMMENT-ID | sed -n 's/ *See the tarball at //p'` > to grab it. so the basic idea is to do it completely self-managed and have have heterogenous sources of extended data? values000066400000000000000000000004551205171247600377040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/dc32aa62-cf56-4171-84a1-8f7d02b23b6d{ "Alt-id": "<1247317985.7701.63.camel@localhost>", "Author": "Ronny Pfannschmidt ", "Content-type": "text/plain", "Date": "Sat, 11 Jul 2009 15:13:05 +0200", "In-reply-to": "13012b22-2d02-444c-87c0-8cf0f17137ae" } e520239c-8d69-4ff6-b1bd-0c2f74366200/000077500000000000000000000000001205171247600363315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000015231205171247600372120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/e520239c-8d69-4ff6-b1bd-0c2f74366200Ronny Pfannschmidt writes: > i want to see the combination of the bug data of all branches What is your definition of “all branches”? When I'm working with distributed VCS, I create branches wherever I feel like, and the VCS tool doesn't have some central registry of branches to keep up to date. How is a tool to determine the set of “all branches”? The distributed VCS model means that set is indeterminate. -- \ “Pinky, are you pondering what I'm pondering?” “I think so, | `\ Brain, but I find scratching just makes it worse.” —_Pinky and | _o__) The Brain_ | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600375540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/e520239c-8d69-4ff6-b1bd-0c2f74366200{ "Alt-id": "<87zlbbl128.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Sun, 12 Jul 2009 00:57:35 +1000", "In-reply-to": "88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7" } fd6162f3-7fc1-41d1-a073-a07465802b72/000077500000000000000000000000001205171247600362375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/commentsbody000066400000000000000000000020521205171247600371160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/fd6162f3-7fc1-41d1-a073-a07465802b72On Sat, Jul 11, 2009 at 11:31:34PM +1000, Ben Finney wrote: > Ronny Pfannschmidt writes: > > > 1. is there any way to aggregate over multiple public branches in > > order to get the complete bug state > > The bug state is as complete as the source code state. It's exactly as > aggregated as the rest of the source code; the ???complete bug state??? > would be the integration branch where you merge all the feature branches > and bug-fix branches together. > > If instead you want bugs to *not* be tightly linked with the rest of the > source code state, it seems you don't want a distributed bug tracker > like Bugs Everywhere. "the complete bug state" probably means that he want to know (and in some way to publish it) that the bug "xyz" is fixed and merged in main while bug "abc" is fixed but only in branch "123" and bug "def" is still open in branch "456" bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004341205171247600374620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/fd6162f3-7fc1-41d1-a073-a07465802b72{ "Alt-id": "<20090713090341.GB21800@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 13 Jul 2009 11:03:41 +0200", "In-reply-to": "1f9f60de-ba37-42bc-a1c0-dc062ef255e1" } values000066400000000000000000000005101205171247600312210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331{ "creator": "W. Trevor King ", "reporter": "Ronny Pfannschmidt ", "severity": "wishlist", "status": "unconfirmed", "summary": "Bug aggregation. Multi-repo meta-BE?", "time": "Tue, 21 Jul 2009 18:32:12 +0000" } 16989098-aa1d-4a08-bff9-80446b4a82c5/000077500000000000000000000000001205171247600276535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16989098-aa1d-4a08-bff9-80446b4a82c585770405-0ead-4044-a3cf-082615ff1b6f/000077500000000000000000000000001205171247600361735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/commentsbody000066400000000000000000000023651205171247600370610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/comments/85770405-0ead-4044-a3cf-082615ff1b6fThis is an outgrowth of #bea86499-824e-4e77-b085-2d581fa9ccab/1100c966-9671-4bc6-8b68-6d408a910da1/bd1207ef-f97e-4078-8c5d-046072012082#: > All of this makes me wonder how much we care about being able to > see bug diffs for any repository format older than the current one. > I think that we don't really care ;). After all, the on-disk > format should settle down as BE matures :p. When you _do_ want > to see the long-term history of a particular bug, there's always > bzr log .be/123/bugs/456/values > or the equivalent for your VCS. If access to the raw log ends > up being important, it should be very easy to add > libbe.storage.base.VersionedStorage.log(id) > libbe.command.log Access to the (parsed) logs will be important for pretty-printing bugdir/bug/comment change logs. Since we do version the bug repository, users will expect us to be able to list the history for any particular item (e.g. for "last activity" timestamps, automatic reminder emails, whatever). While it does not necessarily need to be able to delve into old storage formats, it does need to get implemented. It's probably worth encapsulating changes in something like a list of Diff() objects, although it might be worth linking along bug lines, etc., like VCS annotation. values000066400000000000000000000002411205171247600374120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/comments/85770405-0ead-4044-a3cf-082615ff1b6f{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 29 Jan 2010 01:12:54 +0000" } values000066400000000000000000000004741205171247600311020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5{ "creator": "W. Trevor King ", "reporter": "W. Trevor King ", "severity": "wishlist", "status": "open", "summary": "Generating per-bugdir/bug/comment change logs", "time": "Thu, 28 Jan 2010 23:10:48 +0000" } 16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/000077500000000000000000000000001205171247600303315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600321565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb489397bd-b987-4a08-9589-c5b71661ebb7/000077500000000000000000000000001205171247600366445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/commentsbody000066400000000000000000000003101205171247600375160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/comments/489397bd-b987-4a08-9589-c5b71661ebb7Aaron said this was closeable in Nov. 24th email to the BE list. I think "priorities" == "bug severities", in which case this functionality is now available with the per-tree severity configuration. values000066400000000000000000000002411205171247600400630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/comments/489397bd-b987-4a08-9589-c5b71661ebb7{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 17:16:11 +0000" } values000066400000000000000000000003301205171247600315470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Arbitrary numerical priorities?", "time": "Wed, 04 Jan 2006 21:09:30 +0000" } 171819aa-c092-4ddf-ace3-797635fa2572/000077500000000000000000000000001205171247600277245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007271205171247600311540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/171819aa-c092-4ddf-ace3-797635fa2572{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "fatal", "status": "closed", "summary": "Get a basic template mocked up for the list page. Go further from there.", "time": "Fri, 30 Jan 2009 03:16:26 +0000" } 17921fbc-e7f0-4f31-8cdd-598e5ba7237b/000077500000000000000000000000001205171247600300715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b6010e186-0260-44e5-8442-8df2269910ce/000077500000000000000000000000001205171247600361175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/commentsbody000066400000000000000000000003111205171247600367720ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/6010e186-0260-44e5-8442-8df2269910ceIt's tricky to say whether we should have dependencies or reverse dependencies or both. In the case where a bug is removed, normal dependencies mean that its dependencies are erased from this system. values000066400000000000000000000002101205171247600373320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/6010e186-0260-44e5-8442-8df2269910ce{ "Author": "abentley", "Content-type": "text/plain", "Date": "Mon, 17 Apr 2006 20:59:15 +0000" } c2b78df3-641a-4d4d-ba94-33b26eda6364/000077500000000000000000000000001205171247600366355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/commentsbody000066400000000000000000000001441205171247600375140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c2b78df3-641a-4d4d-ba94-33b26eda6364This could be implemented with an external frontend storing the dependency data in arbitrary tags. values000066400000000000000000000002411205171247600400540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c2b78df3-641a-4d4d-ba94-33b26eda6364{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 22 Jun 2009 21:29:13 +0000" } c531727a-9d0f-486f-aa0e-d4d2f2236640/000077500000000000000000000000001205171247600364735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/commentsbody000066400000000000000000000000641205171247600373530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c531727a-9d0f-486f-aa0e-d4d2f2236640Merged into bug 7ec2c071-9630-42b0-b08a-9854616f9144values000066400000000000000000000002411205171247600377120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c531727a-9d0f-486f-aa0e-d4d2f2236640{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 22 Jun 2009 21:29:33 +0000" } values000066400000000000000000000003221205171247600313100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Indicate bug dependencies", "time": "Wed, 04 Jan 2006 21:05:37 +0000" } 206d9b07-6e30-4c8b-9594-ee98e3c646e7/000077500000000000000000000000001205171247600276715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e75bcce533-03bb-4b3a-ab77-92d32a7aa054/000077500000000000000000000000001205171247600364675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/commentsbody000066400000000000000000000001521205171247600373450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/5bcce533-03bb-4b3a-ab77-92d32a7aa054Fixed by replacing '/bug?id=%s' % shortname with '/bug?%s' % urlencode({'id':bug.id.long_user()}) values000066400000000000000000000002411205171247600377060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/5bcce533-03bb-4b3a-ab77-92d32a7aa054{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 15 Jul 2010 10:35:43 +0000" } 9e75984a-fc76-46ec-a1f3-ac80014b0c41/000077500000000000000000000000001205171247600363575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/commentsbody000066400000000000000000000011271205171247600372400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/9e75984a-fc76-46ec-a1f3-ac80014b0c41Attempt to edit some bug details gives 500 Internal Server Error with: [11/Jul/2010:17:28:26] HTTP Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/cherrypy/_cprequest.py", line 606, in respond cherrypy.response.body = self.handler() File "/usr/lib/python2.6/site-packages/cherrypy/_cpdispatch.py", line 25, in __call__ return self.callable(*self.args, **self.kwargs) File "/home/gour/repos/git/gour-be/interfaces/web/web.py", line 161, in edit shortname = self.bd.bug_shortname(bug) AttributeError: 'BugDir' object has no attribute 'bug_shortname' values000066400000000000000000000002271205171247600376020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/9e75984a-fc76-46ec-a1f3-ac80014b0c41{ "Author": "gour ", "Content-type": "text/plain", "Date": "Sun, 11 Jul 2010 17:48:17 +0000" } values000066400000000000000000000005641205171247600311200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7{ "creator": "gour ", "extra_strings": [ "TAG:CFBE" ], "reporter": "gour ", "severity": "minor", "status": "fixed", "summary": "'BugDir' object has no attribute 'bug_shortname' (cfbe)", "time": "Sun, 11 Jul 2010 17:46:52 +0000" } 2103f60c-36e5-4b05-b57c-8c6fee2d80d4/000077500000000000000000000000001205171247600277725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4b8bbd433-9017-4c04-a038-2a7370a3adc7/000077500000000000000000000000001205171247600363555ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/commentsbody000066400000000000000000000002311205171247600372310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/b8bbd433-9017-4c04-a038-2a7370a3adc7Target takes no options, so it does no parsing. Bad. We should probably use a framework more like bzr's. In any case, EVERY command should accept -h. values000066400000000000000000000002101205171247600375700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/b8bbd433-9017-4c04-a038-2a7370a3adc7{ "Author": "abentley", "Content-type": "text/plain", "Date": "Sat, 01 Apr 2006 18:32:47 +0000" } e5db7c9b-de48-4302-905b-9570bb6e7ade/000077500000000000000000000000001205171247600366325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/commentsbody000066400000000000000000000000401205171247600375040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/e5db7c9b-de48-4302-905b-9570bb6e7adeThis seems to be taken care of. values000066400000000000000000000002411205171247600400510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/e5db7c9b-de48-4302-905b-9570bb6e7ade{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 14 Nov 2008 05:00:43 +0000" } values000066400000000000000000000003431205171247600312140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "target (and others?) aren't parsed properly", "time": "Sat, 01 Apr 2006 18:29:33 +0000" } 22b6f620-d2f7-42a5-a02e-145733a4e366/000077500000000000000000000000001205171247600275405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e3664012c6cc-1300-4f6b-af0e-9176eedf8de7/000077500000000000000000000000001205171247600363635ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000035021205171247600372430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4012c6cc-1300-4f6b-af0e-9176eedf8de7On Mon, Jul 20, 2009 at 05:03:18PM -0400, Chris Ball wrote: > Hi Gianluca, > > > In any case, having the possibility to set a due date does not > > means that it is obligatory to do it and should be a good idea to > > offer as many possibilities as we can to the users of BE > > Okay, sounds reasonable. Would you like to write a patch for > associating due dates and open/closed with a target? I've been mulling this over, and I think that targets are a lot like bugs. Here's a list of issue/implementation pairs: * Targeting normal bugs With "be depend". I think we should remove the "target" field from bugs, and move target dependencies over into the "be depend" framework. Of course, we could add "blocks" (in addition to the current "blocked-by") tags to make target lookup more efficient. * "due_by" We could add "due-by" to Bug.extra_strings as well, so that anyone could set due dates for any issue they wanted. * Bugdir-wide target Just a pointer to the current target bug. * Target dependency tree / time-series. Use BLOCKS/BLOCKED-BY tags between targets, so you'd know which ones came first. * be target list Would become "be list --severity target". A target "severity" would keep target bugs distinct from other bug/issue types. * Commenting on targets They'd be Bug()s, so commenting already build in, e.g. to add release notes, layout roadmaps, etc. If you want, we could maintain the current "be target" interface, and just use all this stuff behind the scenes. Thoughts? Trevor -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000003421205171247600376040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4012c6cc-1300-4f6b-af0e-9176eedf8de7{ "Alt-id": "<20090801102742.GA29000@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 1 Aug 2009 06:27:42 -0400" } 4952e1c7-e035-42f1-882b-6b5264481d0a/000077500000000000000000000000001205171247600357255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000030651205171247600366110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4952e1c7-e035-42f1-882b-6b5264481d0aOn Sunday 19 July 2009 00:00:46 Chris Ball wrote: > Hi, > > > For example, let's assume we have target a, b, c There is a way > > to know that "a" is a past target, "b" is the current target and > > "c" is a future target ? > > We could add a "date due" field for each target. Good idea > > More: there is a way to know if a target is closed or open ? > > We could add a "target close" operation that moves all open bugs > assigned to one target to the next date-due target. Nice. But instead of moving all bugs to the next date-due target, I'd prefer to leave the choice to the user > I see problems with these ideas in general, because we're assuming > agreement by all parties/branches on when a target's date due is. > Maybe it's okay to demand that social conventions be used to handle > such a disagreement, or maybe not. I don't see these as problems per se. We can have two cases: 1) a personal branch (like my html output or Trevor's email interface). In this case there is not any problem to decide the due date 2) a branch with a group of delopers (let it be the canonical branch o an experimental branch): in this case I suppose that working together means to be able to agree on some things In any case, having the possibility to set a due date does not means that it is obligatory to do it and should be a good idea to offer as many possibilities as we can to the users of BE bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600371510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4952e1c7-e035-42f1-882b-6b5264481d0a{ "Alt-id": "<200907202259.11774.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 20 Jul 2009 22:59:11 +0200", "In-reply-to": "6555a651-5a7f-4a8a-9793-47ad1315e9e8" } 64424f05-b42b-4835-8afd-8495ae61345d/000077500000000000000000000000001205171247600360175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000004511205171247600366770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/64424f05-b42b-4835-8afd-8495ae61345dImplemented. You can now list targets by dependency (not by date, but better for most cases) with be depend -t-1 --severity target ID where ID is the uuid of any target bug, or with be depend -t-1 --severity target $(be target --resolve TARGET) where TARGET is the summary of any target bug. values000066400000000000000000000003431205171247600372410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/64424f05-b42b-4835-8afd-8495ae61345d{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 06 Dec 2009 05:42:52 +0000", "In-reply-to": "4012c6cc-1300-4f6b-af0e-9176eedf8de7" } 6555a651-5a7f-4a8a-9793-47ad1315e9e8/000077500000000000000000000000001205171247600360345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000015161205171247600367170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/6555a651-5a7f-4a8a-9793-47ad1315e9e8Hi, > For example, let's assume we have target a, b, c There is a way > to know that "a" is a past target, "b" is the current target and > "c" is a future target ? We could add a "date due" field for each target. > More: there is a way to know if a target is closed or open ? We could add a "target close" operation that moves all open bugs assigned to one target to the next date-due target. I see problems with these ideas in general, because we're assuming agreement by all parties/branches on when a target's date due is. Maybe it's okay to demand that social conventions be used to handle such a disagreement, or maybe not. - Chris. -- Chris Ball _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004321205171247600372550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/6555a651-5a7f-4a8a-9793-47ad1315e9e8{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Sat, 18 Jul 2009 18:00:46 -0400", "In-reply-to": "b9865d8b-46ae-4169-bc83-d75a98164729" } 7750d77c-85d2-4810-9d41-cec62b0da885/000077500000000000000000000000001205171247600361015ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000012431205171247600367610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/7750d77c-85d2-4810-9d41-cec62b0da885On Monday 20 July 2009 23:03:18 Chris Ball wrote: > Hi Gianluca, > > > In any case, having the possibility to set a due date does not > > means that it is obligatory to do it and should be a good idea to > > offer as many possibilities as we can to the users of BE > > Okay, sounds reasonable. Would you like to write a patch for > associating due dates and open/closed with a target? Ok. As soon as I finish a basic implementation of the html export, I will be glad to try to write a patch. bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600373250ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/7750d77c-85d2-4810-9d41-cec62b0da885{ "Alt-id": "<200907202340.39963.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 20 Jul 2009 23:40:39 +0200", "In-reply-to": "777182da-a216-45c7-bf4d-42c84e511c66" } 777182da-a216-45c7-bf4d-42c84e511c66/000077500000000000000000000000001205171247600360725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000010341205171247600367500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/777182da-a216-45c7-bf4d-42c84e511c66Hi Gianluca, > In any case, having the possibility to set a due date does not > means that it is obligatory to do it and should be a good idea to > offer as many possibilities as we can to the users of BE Okay, sounds reasonable. Would you like to write a patch for associating due dates and open/closed with a target? Thanks, - Chris. -- Chris Ball _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004321205171247600373130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/777182da-a216-45c7-bf4d-42c84e511c66{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Mon, 20 Jul 2009 17:03:18 -0400", "In-reply-to": "4952e1c7-e035-42f1-882b-6b5264481d0a" } 9bbe9370-99c7-4d7c-80ee-9ade6b6feb9f/000077500000000000000000000000001205171247600365725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000024621205171247600374560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/9bbe9370-99c7-4d7c-80ee-9ade6b6feb9fOn Sat, Jul 18, 2009 at 06:00:46PM -0400, Chris Ball wrote: > > For example, let's assume we have target a, b, c There is a way > > to know that "a" is a past target, "b" is the current target and > > "c" is a future target ? > > We could add a "date due" field for each target. Another option would be a "blocked by" field, since you might miss deadlines, or have parallel targeted branches. Or just pick target names following some scheme so the alphanumeric-sort is also a dependency-order sort ;). > > More: there is a way to know if a target is closed or open ? There's also $ be list --target 0.1 If there are active bugs, the target is open. Otherwise, you must have made it ;). > We could add a "target close" operation that moves all open bugs > assigned to one target to the next date-due target. for bug in `be list --target 0.1 --uuids`; do be target $bug $NEXT_TARGET done To avoid the loop, we could change status, severity, target, etc from be COMMAND BUG ARG to be COMMAND ARG BUG [MORE BUGS ...] -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004431205171247600400150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/9bbe9370-99c7-4d7c-80ee-9ade6b6feb9f{ "Alt-id": "<20090718222701.GA304@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 18 Jul 2009 18:27:01 -0400", "In-reply-to": "6555a651-5a7f-4a8a-9793-47ad1315e9e8" } b9865d8b-46ae-4169-bc83-d75a98164729/000077500000000000000000000000001205171247600360475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/commentsbody000066400000000000000000000007701205171247600367330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/b9865d8b-46ae-4169-bc83-d75a98164729Hello Just a question and only for curiosity: there is an easy way to determine the target succession ? For example, let's assume we have target a, b, c There is a way to know that "a" is a past target, "b" is the current target and "c" is a future target ? More: there is a way to know if a target is closed or open ? thanks bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000003331205171247600372700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/b9865d8b-46ae-4169-bc83-d75a98164729{ "Alt-id": "<200907182351.03217.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Sat, 18 Jul 2009 23:51:03 +0200" } values000066400000000000000000000007261205171247600307670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366{ "assigned": "W. Trevor King ", "creator": "W. Trevor King ", "extra_strings": [ "BLOCKED-BY:51930348-9ccc-4165-af41-6c7450de050e" ], "reporter": "Gianluca Montecchi ", "severity": "wishlist", "status": "fixed", "summary": "Sorting targets chronologically", "time": "Tue, 21 Jul 2009 18:34:25 +0000" } 24555ea1-76b5-40a8-918f-115a28f5f36a/000077500000000000000000000000001205171247600275615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006611205171247600310060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/24555ea1-76b5-40a8-918f-115a28f5f36a{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "critical", "status": "wontfix", "summary": "Fix the extra severity problem.", "time": "Thu, 25 Jun 2009 21:39:38 +0000" } 27549110-e491-4651-81ab-84de2ed8e14a/000077500000000000000000000000001205171247600275565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314035ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a27c70465-387e-442e-afb3-e193de42c829/000077500000000000000000000000001205171247600361215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/commentsbody000066400000000000000000000005101205171247600367750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/27c70465-387e-442e-afb3-e193de42c829When loading a bug containing UTF-8 (bea/12c), I see: Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/cherrypy/_cpwsgi.py", line 168, in next chunk = chunk.encode("ISO-8859-1") UnicodeEncodeError: 'latin-1' codec can't encode character u'\u201c' in position 11563: ordinal not in range(256) values000066400000000000000000000002331205171247600373410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/27c70465-387e-442e-afb3-e193de42c829{ "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Thu, 24 Jun 2010 22:18:34 +0000" } 6724994b-61de-45f1-b5e9-474a76b49311/000077500000000000000000000000001205171247600357675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/commentsbody000066400000000000000000000002751205171247600366530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/6724994b-61de-45f1-b5e9-474a76b49311Same output here, so it doesn't feel like locale: UTF-8 UTF-8 Note that bea/12c is the only bug that I've found to trigger this (because it's the only one containing UTF-8 in a comment). values000066400000000000000000000002331205171247600372070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/6724994b-61de-45f1-b5e9-474a76b49311{ "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Fri, 25 Jun 2010 17:02:09 +0000" } 72582f6f-ef8f-4e8f-9d24-f98ad874a3f7/000077500000000000000000000000001205171247600364035ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/commentsbody000066400000000000000000000005221205171247600372620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/72582f6f-ef8f-4e8f-9d24-f98ad874a3f7Hmm, it works for me. Maybe your locale is funny. I get: $ python -c 'import libbe.util.encoding as e; import libbe.ui.util.pager as p; print e.get_encoding(); p.run_pager(); print e.get_encoding()' UTF-8 UTF-8 but perhaps you're getting ISO-8859-1 for one of those? values000066400000000000000000000003471205171247600376310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/72582f6f-ef8f-4e8f-9d24-f98ad874a3f7{ "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Fri, 25 Jun 2010 16:21:56 +0000", "In-reply-to": "27c70465-387e-442e-afb3-e193de42c829" } 9f03980b-d572-45bf-8b9a-3fc959798bc6/000077500000000000000000000000001205171247600362305ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/commentsbody000066400000000000000000000000331205171247600371040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/9f03980b-d572-45bf-8b9a-3fc959798bc6 Tested working. Thanks! values000066400000000000000000000002331205171247600374500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/9f03980b-d572-45bf-8b9a-3fc959798bc6{ "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Fri, 25 Jun 2010 20:31:34 +0000" } aa30c0f4-f428-4cbb-9597-f64cfaf06728/000077500000000000000000000000001205171247600363345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/commentsbody000066400000000000000000000000241205171247600372100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/aa30c0f4-f428-4cbb-9597-f64cfaf06728This should fix it. values000066400000000000000000000003471205171247600375620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/aa30c0f4-f428-4cbb-9597-f64cfaf06728{ "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Fri, 25 Jun 2010 17:25:20 +0000", "In-reply-to": "6724994b-61de-45f1-b5e9-474a76b49311" } values000066400000000000000000000006301205171247600307770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27549110-e491-4651-81ab-84de2ed8e14a{ "creator": "Chris Ball ", "extra_strings": [ "BLOCKS:77399855-6300-41a8-91a3-decbb915a3ff", "TAG:CFBE" ], "reporter": "Chris Ball ", "severity": "minor", "status": "fixed", "summary": "Fix Unicode handling.", "time": "Thu, 24 Jun 2010 22:17:35 +0000" } 27bb8bc2-05c2-417a-9d09-928471380d7a/000077500000000000000000000000001205171247600275565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003231205171247600307760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/27bb8bc2-05c2-417a-9d09-928471380d7a{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Are dates still a problem?", "time": "Tue, 20 Dec 2005 19:37:03 +0000" } 2929814b-2163-45d0-87ba-f7d1ef0a32a9/000077500000000000000000000000001205171247600276345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a96d7072de-89b6-4c53-a435-6879c644a0e8/000077500000000000000000000000001205171247600361315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/commentsbody000066400000000000000000000000421205171247600370050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/comments/6d7072de-89b6-4c53-a435-6879c644a0e8We should support: WONTFIX EMPTYvalues000066400000000000000000000002101205171247600373440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/comments/6d7072de-89b6-4c53-a435-6879c644a0e8{ "Author": "abentley", "Content-type": "text/plain", "Date": "Wed, 04 Jan 2006 21:03:54 +0000" } values000066400000000000000000000003211205171247600310520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "More types of closed bugs", "time": "Wed, 04 Jan 2006 21:03:27 +0000" } 2aa60b34-2c8d-4f41-bb97-a57309523262/000077500000000000000000000000001205171247600275435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262f21bec0d-cad0-44d2-a301-bfb11adce313/000077500000000000000000000000001205171247600365355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/commentsbody000066400000000000000000000001011205171247600374050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/comments/f21bec0d-cad0-44d2-a301-bfb11adce313Aaron said this was closeable in Nov. 24th email to the BE list. values000066400000000000000000000002411205171247600377540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/comments/f21bec0d-cad0-44d2-a301-bfb11adce313{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 17:21:08 +0000" } values000066400000000000000000000002371205171247600307670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "implement message-change log" } 2b81b428-fc43-4970-9469-b442385b9c0d/000077500000000000000000000000001205171247600275125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004451205171247600307370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2b81b428-fc43-4970-9469-b442385b9c0d{ "creator": "gianluca ", "reporter": "gianluca ", "severity": "minor", "status": "fixed", "summary": "Use the get_parser in becommands/html.py", "time": "Wed, 08 Jul 2009 21:27:37 +0000" } 2f048ac5-5564-4b34-b7f9-605357267ed2/000077500000000000000000000000001205171247600275115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2074ef29a-3f1d-46dc-8561-7a56af7e6d67/000077500000000000000000000000001205171247600362235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000016421205171247600371060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/074ef29a-3f1d-46dc-8561-7a56af7e6d67"W. Trevor King" writes: > On Sat, Jul 04, 2009 at 10:19:35AM +1000, Ben Finney wrote: > > Instead of a separate command for each output format, could we have > > a single "produce a static report of the bug database" command, and > > specify output format as an option? > > […] > > Do people like this architecture better than my be-xml-to-mbox > approach? I think this question is illuminated by the related question: Is mbox output a static report, or another read-write data store? It can technically be both, of course, which is why the question may be helpful: it may help show what is the *conceptual* purpose of the mbox output format for Bugs Everywhere. -- \ “Time is the great legalizer, even in the field of morals.” | `\ —Henry L. Mencken | _o__) | Ben Finney values000066400000000000000000000004521205171247600374460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/074ef29a-3f1d-46dc-8561-7a56af7e6d67{ "Alt-id": "<87hbxqrckv.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Mon, 06 Jul 2009 08:26:24 +1000", "In-reply-to": "cb5689f4-7c36-4c44-b380-ca9e06e80bae" } 1dba8196-654b-4ca0-9a95-fb334af81863/000077500000000000000000000000001205171247600361255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000032211205171247600370030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/1dba8196-654b-4ca0-9a95-fb334af81863Gianluca Montecchi writes: > 1) is it ok to develop this command ? I know that this is not a fully > featured web interface, but I am sure that it can be usefull. Yes, definitely. I can see it being a very easy way to put one's bug database online for browsing. > I am open to suggestion about it of course. Instead of a separate command for each output format, could we have a single “produce a static report of the bug database” command, and specify output format as an option? How about: be report be report --format ascii be report --format rst be report --format html Where the ‘--format’ option has a default of, e.g., “ascii”. This would mean that you are implementing the ‘html’ format of this putative command. > 2) I see that every command is implemented with a python file in the > becommand dir. For a better code, I'd like to split the command > implementation into two files: a file that contain the actual code and > a second file that have the html related part, any problem with this ? This sounds quite sensible to me. The existence of a command implies a module of the same name in ‘becommand’, but there's no necessary implication that that module can't import modules from elsewhere to do its work. -- \ “It ain't so much the things we don't know that get us in | `\ trouble. It's the things we know that ain't so.” —Artemus Ward | _o__) (1834–1867), U.S. journalist | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600373500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/1dba8196-654b-4ca0-9a95-fb334af81863{ "Alt-id": "<87y6r5qoyw.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Sat, 04 Jul 2009 10:19:35 +1000", "In-reply-to": "cb5689f4-7c36-4c44-b380-ca9e06e80bae" } 3bf57ee7-710f-4a01-a8af-8bb9eb9dc937/000077500000000000000000000000001205171247600364345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000015251205171247600373170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/3bf57ee7-710f-4a01-a8af-8bb9eb9dc937Gianluca Montecchi writes: > On Monday 06 July 2009 12:48:39 W. Trevor King wrote: > > Gianluca is clearly thinking about a static report [for a collection > > of HTML files as output]: > > You are right, static, but not exactly a report as I think Ben is > thinking I think it exactly is a report: multiple, static, browseable pages reporting the state of the database at a point in time. What makes you think that term doesn't apply? -- \ “The problem with television is that the people must sit and | `\ keep their eyes glued on a screen: the average American family | _o__) hasn't time for it.” —_The New York Times_, 1939 | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600376570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/3bf57ee7-710f-4a01-a8af-8bb9eb9dc937{ "Alt-id": "<87skh9p8ax.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Tue, 07 Jul 2009 11:53:58 +1000", "In-reply-to": "cb5689f4-7c36-4c44-b380-ca9e06e80bae" } 55263144-9775-4b18-ab83-29d66ed91a53/000077500000000000000000000000001205171247600356375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000043341205171247600365230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/55263144-9775-4b18-ab83-29d66ed91a53On Mon, Jul 06, 2009 at 08:26:24AM +1000, Ben Finney wrote: > "W. Trevor King" writes: > > > On Sat, Jul 04, 2009 at 10:19:35AM +1000, Ben Finney wrote: > > > Instead of a separate command for each output format, could we have > > > a single "produce a static report of the bug database" command, and > > > specify output format as an option? > > > > Do people like this architecture better than my be-xml-to-mbox > > approach? > > I think this question is illuminated by the related question: Is mbox > output a static report, or another read-write data store? Gianluca is clearly thinking about a static report: On Fri, Jul 03, 2009 at 10:50:17PM +0200, Gianluca Montecchi wrote: > The goal is to be able to do something like "be html /web/page" to have in the > /web/page directory some static html pages that basically are the dump of the > be repository, much like ditz have I think truly interactive frontends like Steve's working on need to be build on top of libbe directly, since they'll need to make lots of small changes to the database, and it's to slow to be reloading the database for every change. Static dumps like my mbox or Gianluca's html could just parse the xml output of `be list' and other be commands. There should also be an xml import for `be new' and `be comment' so you could import new bugs/comments from whatever format after writing a whatever->xml converter. This would allow you to email new bugs and comments to the database (e.g. via some procmail-spawned be-parse-email script) which would give you some level of interactivity, but you'd have to regenerate your mbox to see your new comments in your mail reader. I think interactive use that gives you live-updates in your mail reader isn't worth the trouble, since you'd need to teach BE imap or smtp+mbox-locking. Hmm, maybe it smtp+mbox-locking wouldn't be so bad, but that would be a distinct frontend project like Steve's, not part of the becommands. Trevor -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004441205171247600370630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/55263144-9775-4b18-ab83-29d66ed91a53{ "Alt-id": "<20090706104839.GA19537@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 6 Jul 2009 06:48:39 -0400", "In-reply-to": "074ef29a-3f1d-46dc-8561-7a56af7e6d67" } 68927fef-6ce1-4a1f-a414-28695d913a50/000077500000000000000000000000001205171247600360545ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000016011205171247600367320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/68927fef-6ce1-4a1f-a414-28695d913a50On Sat, Jul 04, 2009 at 10:19:35AM +1000, Ben Finney wrote: > Instead of a separate command for each output format, could we have a > single "produce a static report of the bug database" command, and > specify output format as an option? > > How about: > > be report > be report --format ascii > be report --format rst > be report --format html Do people like this architecture better than my be-xml-to-mbox approach? I think the tradeoff is easy output format implementation vs cluttered core codebase. Should we use both, depending on how useful people think the output format will be? -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004441205171247600373000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/68927fef-6ce1-4a1f-a414-28695d913a50{ "Alt-id": "<20090705143108.GB10709@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 5 Jul 2009 10:31:08 -0400", "In-reply-to": "1dba8196-654b-4ca0-9a95-fb334af81863" } 83202b83-eea8-452f-8239-d468940bddba/000077500000000000000000000000001205171247600361275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000133521205171247600370130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/83202b83-eea8-452f-8239-d468940bddbaOn Fri, Jul 03, 2009 at 10:50:17PM +0200, Gianluca Montecchi wrote: > > Hello to everyone > > As i said in a previous mail, I am working on a "html" command for be. > The goal is to be able to do something like "be html /web/page" to have in the > /web/page directory some static html pages that basically are the dump of the > be repository, much like ditz have > This will enable a simple and fast publish of the bus list and details on the > web, at least in read only mode. > > So I'd like to ask some question: > 1) is it ok to develop this command ? I know that this is not a fully featured > web interface, but I am sure that it can be usefull. > > I am open to suggestion about it of course. > > 2) I see that every command is implemented with a python file in the becommand > dir. For a better code, I'd like to split the command implementation into two > files: a file that contain the actual code and a second file that have the html > related part, any problem with this ? I don't like to have the html part and > the code part in one big and unreadable file. > > I'd like to hear other opinion about this. > > Thanks for now > bye > Gianluca > > > _______________________________________________ > Be-devel mailing list > Be-devel@bugseverywhere.org > http://void.printf.net/cgi-bin/mailman/listinfo/be-devel On Mon, Jul 06, 2009 at 10:18:33PM +0200, Gianluca Montecchi wrote: > This sound like an interesting idea, but what i'd like to do is not, strictly > speaking, a report. It is a full tree of html pages that are browseable, both > on line and offline I'm not sure what distinction you're making about "report". You're just producing a static snapshot of the current database status, right? The number of pages and completeness of coverage are nice, but it's still a static entity generated from a particular snapshot, which is what I mean by "report" ;). > > > 2) I see that every command is implemented with a python file in the > > > becommand dir. For a better code, I'd like to split the command > > > implementation into two files: a file that contain the actual code and > > > a second file that have the html related part, any problem with this ? > > > > This sounds quite sensible to me. The existence of a command implies a > > module of the same name in ‘becommand’, but there's no necessary > > implication that that module can't import modules from elsewhere to do > > its work. > > The "elsewhere" for now is the same directory, just another module > On Mon, Jul 06, 2009 at 10:38:56PM +0200, Gianluca Montecchi wrote: > > On Fri, Jul 03, 2009 at 10:50:17PM +0200, Gianluca Montecchi wrote: > > > The goal is to be able to do something like "be html /web/page" to have > > > in the /web/page directory some static html pages that basically are the > > > dump of the be repository, much like ditz have > > > > I think truly interactive frontends like Steve's working on need to be > > build on top of libbe directly, since they'll need to make lots of > > small changes to the database, and it's to slow to be reloading the > > database for every change. Static dumps like my mbox or Gianluca's > > html could just parse the xml output of `be list' and other be > > commands. > > Ok, but if I want to have an html dump that is browseable, I need to parse the > xml. Am I correct ? > If yes, should not be easiear to use directly the libbe ? Using libbe directly is easier, but also more tightly tied to the be internals which could weigh down future refactoring. Partly I'm afraid of our 2.5 different html-output mechanisms. Either their should be a single Right Way that tries to satisfy everyone, or a smorgasbord of loosely coupled translators, so it's not so painful to kill them if/when they go out of style :p. On Mon, Jul 06, 2009 at 10:46:54PM +0200, Gianluca Montecchi wrote: > On Saturday 04 July 2009 02:31:26 Chris Ball wrote: > > It might be a good idea for "be html" to use the CherryPy web interface > > that Steve is working on. The command could start up the CherryPy app > > and scrape all of the available pages to get a stand-alone dump; this > > would avoid having to keep two (okay, more than two at this point) > > separate sets of HTML templates in the source tree. What do you think? > > It can be do, but this implies that CherryPy must be installed and configured, > a thing that I don't want to impose. My idea is to offer a simpler way to have > some html pages, where you just need to have BE installed. I agree that not needing CherryPy for a static html dump is good. Also, read-only templates will look different from the CherryPy interactive templates. +1 for another quasi-redundant template set ;). > > > 2) I see that every command is implemented with a python file in > > > the becommand dir. For a better code, I'd like to split the > > > command implementation into two files: a file that contain the > > > actual code and a second file that have the html related part, > > > any problem with this ? I don't like to have the html part and > > > the code part in one big and unreadable file. > > > > I agree that becommands/*.py commands should not contain any HTML > > layout code. Putting it somewhere else instead sounds fine. > > I am in doubt with the "somewhere else", since for now I put the html template > into a separate file in the same directory. Suggestion ? I think that only code intended only for command line use only should go into becommands, but really, just dump it anywhere and we can shift it around later :p. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004431205171247600373520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/83202b83-eea8-452f-8239-d468940bddba{ "Alt-id": "<20090707013454.GA3721@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 6 Jul 2009 21:34:54 -0400", "In-reply-to": "da97e18f-33d6-469e-9d93-6457b9a6bfca" } 8c1c4f38-a8d4-4cf9-a9f0-e9846ebbcad8/000077500000000000000000000000001205171247600365255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000030371205171247600374100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/8c1c4f38-a8d4-4cf9-a9f0-e9846ebbcad8On Saturday 04 July 2009 02:19:35 Ben Finney wrote: > Gianluca Montecchi writes: > > > I am open to suggestion about it of course. > > Instead of a separate command for each output format, could we have a > single “produce a static report of the bug database” command, and > specify output format as an option? > > How about: > > be report > be report --format ascii > be report --format rst > be report --format html > > Where the ‘--format’ option has a default of, e.g., “ascii”. > > This would mean that you are implementing the ‘html’ format of this > putative command. > This sound like an interesting idea, but what i'd like to do is not, strictly speaking, a report. It is a full tree of html pages that are browseable, both on line and offline > > 2) I see that every command is implemented with a python file in the > > becommand dir. For a better code, I'd like to split the command > > implementation into two files: a file that contain the actual code and > > a second file that have the html related part, any problem with this ? > > This sounds quite sensible to me. The existence of a command implies a > module of the same name in ‘becommand’, but there's no necessary > implication that that module can't import modules from elsewhere to do > its work. The "elsewhere" for now is the same directory, just another module bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600377510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/8c1c4f38-a8d4-4cf9-a9f0-e9846ebbcad8{ "Alt-id": "<200907062218.33895.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 06 Jul 2009 22:18:33 +0200", "In-reply-to": "1dba8196-654b-4ca0-9a95-fb334af81863" } b900f7fd-bab6-48c4-922c-a051f933da58/000077500000000000000000000000001205171247600362575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000027351205171247600371460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/b900f7fd-bab6-48c4-922c-a051f933da58Hi Gianluca, > As i said in a previous mail, I am working on a "html" command > for be. The goal is to be able to do something like "be html > /web/page" to have in the /web/page directory some static html > pages that basically are the dump of the be repository, much like > ditz have. This will enable a simple and fast publish of the bus > list and details on the web, at least in read only mode. It might be a good idea for "be html" to use the CherryPy web interface that Steve is working on. The command could start up the CherryPy app and scrape all of the available pages to get a stand-alone dump; this would avoid having to keep two (okay, more than two at this point) separate sets of HTML templates in the source tree. What do you think? > 2) I see that every command is implemented with a python file in > the becommand dir. For a better code, I'd like to split the > command implementation into two files: a file that contain the > actual code and a second file that have the html related part, > any problem with this ? I don't like to have the html part and > the code part in one big and unreadable file. I agree that becommands/*.py commands should not contain any HTML layout code. Putting it somewhere else instead sounds fine. Thanks! - Chris. -- Chris Ball _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004321205171247600375000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/b900f7fd-bab6-48c4-922c-a051f933da58{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Fri, 03 Jul 2009 20:31:26 -0400", "In-reply-to": "cb5689f4-7c36-4c44-b380-ca9e06e80bae" } c7ace551-2982-4683-bca3-b5e66056cce5/000077500000000000000000000000001205171247600362055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000074421205171247600370740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/c7ace551-2982-4683-bca3-b5e66056cce5> On Mon, Jul 06, 2009 at 10:18:33PM +0200, Gianluca Montecchi wrote: >> This sound like an interesting idea, but what i'd like to do is not, >> strictly >> speaking, a report. It is a full tree of html pages that are browseable, >> both >> on line and offline > > I'm not sure what distinction you're making about "report". You're > just producing a static snapshot of the current database status, > right? The number of pages and completeness of coverage are nice, but > it's still a static entity generated from a particular snapshot, which > is what I mean by "report" ;). Mmm, my bad here. I normally speak about "report" as something that is not browseable, like the output of a report generator (reportlab or whatever), but I admit that basically also the html output I am working on is a report. > On Mon, Jul 06, 2009 at 10:38:56PM +0200, Gianluca Montecchi wrote: >> >> Ok, but if I want to have an html dump that is browseable, I need to >> parse the >> xml. Am I correct ? >> If yes, should not be easiear to use directly the libbe ? > > Using libbe directly is easier, but also more tightly tied to the be > internals which could weigh down future refactoring. Partly I'm > afraid of our 2.5 different html-output mechanisms. Either their > should be a single Right Way that tries to satisfy everyone, or a > smorgasbord of loosely coupled translators, so it's not so painful to > kill them if/when they go out of style :p. I know that using libbe I am more tightly tied to the internals, but I am trying to keep the command code and the presentation code crearly separated to minimize this problem. I am not sure this is a real problem anyway. > On Mon, Jul 06, 2009 at 10:46:54PM +0200, Gianluca Montecchi wrote: >> On Saturday 04 July 2009 02:31:26 Chris Ball wrote: >> > It might be a good idea for "be html" to use the CherryPy web >> interface >> > that Steve is working on. The command could start up the CherryPy app >> > and scrape all of the available pages to get a stand-alone dump; this >> > would avoid having to keep two (okay, more than two at this point) >> > separate sets of HTML templates in the source tree. What do you >> think? >> >> It can be do, but this implies that CherryPy must be installed and >> configured, >> a thing that I don't want to impose. My idea is to offer a simpler way >> to have >> some html pages, where you just need to have BE installed. > > I agree that not needing CherryPy for a static html dump is good. > Also, read-only templates will look different from the CherryPy > interactive templates. +1 for another quasi-redundant template set > ;). The look is not a problem. I can always use the same html Steve is using. I am also playing with the idea to have the template themeable some time after I have a fully working version. > >> > > 2) I see that every command is implemented with a python file in >> > > the becommand dir. For a better code, I'd like to split the >> > > command implementation into two files: a file that contain the >> > > actual code and a second file that have the html related part, >> > > any problem with this ? I don't like to have the html part and >> > > the code part in one big and unreadable file. >> > >> > I agree that becommands/*.py commands should not contain any HTML >> > layout code. Putting it somewhere else instead sounds fine. >> >> I am in doubt with the "somewhere else", since for now I put the html >> template >> into a separate file in the same directory. Suggestion ? > > I think that only code intended only for command line use only should > go into becommands, but really, just dump it anywhere and we can shift > it around later :p. Of course. bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004421205171247600374270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/c7ace551-2982-4683-bca3-b5e66056cce5{ "Alt-id": "<6f719a1c43fdcba8bdbfee1130072595.squirrel@webmail.grys.it>", "Author": "gian@grys.it", "Content-type": "text/plain", "Date": "Tue, 07 Jul 2009 14:15:08 +0200", "In-reply-to": "83202b83-eea8-452f-8239-d468940bddba" } cb5689f4-7c36-4c44-b380-ca9e06e80bae/000077500000000000000000000000001205171247600362705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000022661205171247600371560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/cb5689f4-7c36-4c44-b380-ca9e06e80baeHello to everyone As i said in a previous mail, I am working on a "html" command for be. The goal is to be able to do something like "be html /web/page" to have in the /web/page directory some static html pages that basically are the dump of the be repository, much like ditz have This will enable a simple and fast publish of the bus list and details on the web, at least in read only mode. So I'd like to ask some question: 1) is it ok to develop this command ? I know that this is not a fully featured web interface, but I am sure that it can be usefull. I am open to suggestion about it of course. 2) I see that every command is implemented with a python file in the becommand dir. For a better code, I'd like to split the command implementation into two files: a file that contain the actual code and a second file that have the html related part, any problem with this ? I don't like to have the html part and the code part in one big and unreadable file. I'd like to hear other opinion about this. Thanks for now bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000003331205171247600375110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/cb5689f4-7c36-4c44-b380-ca9e06e80bae{ "Alt-id": "<200907032250.17327.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Fri, 03 Jul 2009 22:50:17 +0200" } da97e18f-33d6-469e-9d93-6457b9a6bfca/000077500000000000000000000000001205171247600363175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000040061205171247600371770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/da97e18f-33d6-469e-9d93-6457b9a6bfcaOn Saturday 04 July 2009 02:31:26 Chris Ball wrote: > Hi Gianluca, > > > As i said in a previous mail, I am working on a "html" command > > for be. The goal is to be able to do something like "be html > > /web/page" to have in the /web/page directory some static html > > pages that basically are the dump of the be repository, much like > > ditz have. This will enable a simple and fast publish of the bus > > list and details on the web, at least in read only mode. > > It might be a good idea for "be html" to use the CherryPy web interface > that Steve is working on. The command could start up the CherryPy app > and scrape all of the available pages to get a stand-alone dump; this > would avoid having to keep two (okay, more than two at this point) > separate sets of HTML templates in the source tree. What do you think? It can be do, but this implies that CherryPy must be installed and configured, a thing that I don't want to impose. My idea is to offer a simpler way to have some html pages, where you just need to have BE installed. My very first implementation was a script that parse directly the .be directory to build the pages, without BE itself installed. > > 2) I see that every command is implemented with a python file in > > the becommand dir. For a better code, I'd like to split the > > command implementation into two files: a file that contain the > > actual code and a second file that have the html related part, > > any problem with this ? I don't like to have the html part and > > the code part in one big and unreadable file. > > I agree that becommands/*.py commands should not contain any HTML > layout code. Putting it somewhere else instead sounds fine. I am in doubt with the "somewhere else", since for now I put the html template into a separate file in the same directory. Suggestion ? thanks bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600375430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/da97e18f-33d6-469e-9d93-6457b9a6bfca{ "Alt-id": "<200907062246.54804.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 06 Jul 2009 22:46:54 +0200", "In-reply-to": "b900f7fd-bab6-48c4-922c-a051f933da58" } e5248100-ea02-4205-a4c1-ac7a577c6362/000077500000000000000000000000001205171247600357315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000033021205171247600366070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/e5248100-ea02-4205-a4c1-ac7a577c6362On Thursday 25 June 2009 16:23:04 Steve Losh wrote: > On Jun 25, 2009, at 10:02 AM, Chris Ball wrote: > >> Oh, and obviously there must still be bugs in BE. Please submit > >> more ;). > > > > Perhaps it's a good time to merge Steve Losh's CherryPy web interface? > > > > http://void.printf.net/pipermail/be-devel/2009-February/000095.html > > http://bitbucket.org/sjl/cherryflavoredbugseverywhere/ > > Hey, I haven't touched the web interface in a while, but I should have > some time to fix some stuff up tonight and tomorrow. Hold off on > merging it in until then. > > I'm still curious as to what people think the role of a web interface > like this should be. When I wrote it I meant it as a single-user > interface like the command line one. It could definitely work as a > public, read-only interface too. I'd really like to have some sort of web interface for BE, also in read-only mode. I am thinking to write (actually I wrote some test code) a tool to parse a BE repository to output a set of static html pages to put online, like the "ditz html" command, but this was before I start to play with BE sourcecode, so now I ma thinking to implement it as a BE command. > If the goal is to allow more than one person to add issues, how should > commits go? One commit per change? Commit every X minutes if necessary? I think that a simple web interface should be read-only. Eventually, to allow to add issues also from the web interface, it should be done to a specific branch, one commit per change. just my 2 cents... bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000003331205171247600371520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/e5248100-ea02-4205-a4c1-ac7a577c6362{ "Alt-id": "<200906252203.08535.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Thu, 25 Jun 2009 22:03:08 +0200" } fd7ab206-5937-4ede-9e78-97aff098b677/000077500000000000000000000000001205171247600362505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/commentsbody000066400000000000000000000033361205171247600371350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/fd7ab206-5937-4ede-9e78-97aff098b677On Monday 06 July 2009 12:48:39 W. Trevor King wrote: > On Mon, Jul 06, 2009 at 08:26:24AM +1000, Ben Finney wrote: > > "W. Trevor King" writes: > > > On Sat, Jul 04, 2009 at 10:19:35AM +1000, Ben Finney wrote: > > > > Instead of a separate command for each output format, could we have > > > > a single "produce a static report of the bug database" command, and > > > > specify output format as an option? > > > > > > Do people like this architecture better than my be-xml-to-mbox > > > approach? > > > > I think this question is illuminated by the related question: Is mbox > > output a static report, or another read-write data store? > > Gianluca is clearly thinking about a static report: You are right, static, but not exactly a report as I think Ben is thinking > > On Fri, Jul 03, 2009 at 10:50:17PM +0200, Gianluca Montecchi wrote: > > The goal is to be able to do something like "be html /web/page" to have > > in the /web/page directory some static html pages that basically are the > > dump of the be repository, much like ditz have > > I think truly interactive frontends like Steve's working on need to be > build on top of libbe directly, since they'll need to make lots of > small changes to the database, and it's to slow to be reloading the > database for every change. Static dumps like my mbox or Gianluca's > html could just parse the xml output of `be list' and other be > commands. Ok, but if I want to have an html dump that is browseable, I need to parse the xml. Am I correct ? If yes, should not be easiear to use directly the libbe ? bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600374740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/fd7ab206-5937-4ede-9e78-97aff098b677{ "Alt-id": "<200907062238.56930.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Mon, 06 Jul 2009 22:38:56 +0200", "In-reply-to": "55263144-9775-4b18-ab83-29d66ed91a53" } values000066400000000000000000000005511205171247600307340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2{ "assigned": "Gianluca Montecchi ", "creator": "W. Trevor King ", "reporter": "Gianluca Montecchi ", "severity": "wishlist", "status": "fixed", "summary": "Static html report generation", "time": "Tue, 21 Jul 2009 18:43:06 +0000" } 301724b1-3853-4aff-8f23-44373df7cf1c/000077500000000000000000000000001205171247600276355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314625ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/301724b1-3853-4aff-8f23-44373df7cf1c0d8af004-8352-4254-b747-d96a40a5d457/000077500000000000000000000000001205171247600360235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/commentsbody000066400000000000000000000000141205171247600366760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/comments/0d8af004-8352-4254-b747-d96a40a5d457Implemented values000066400000000000000000000002411205171247600372420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/comments/0d8af004-8352-4254-b747-d96a40a5d457{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 17:40:08 +0000" } values000066400000000000000000000003171205171247600310600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/301724b1-3853-4aff-8f23-44373df7cf1c{ "assigned": "abentley", "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Per-tree configuration: default-assigneed?" } 312fb152-0155-45c1-9d4d-f49dd5816fbb/000077500000000000000000000000001205171247600277135ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006501205171247600311360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/312fb152-0155-45c1-9d4d-f49dd5816fbb{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "serious", "status": "fixed", "summary": "Revamp the layout/design.", "time": "Thu, 25 Jun 2009 21:38:38 +0000" } 31cd490d-a1c2-4ab3-8284-d80395e34dd2/000077500000000000000000000000001205171247600277055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2b2a333f7-eda6-42b9-8940-177f61ca7f48/000077500000000000000000000000001205171247600363275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/commentsbody000066400000000000000000000042221205171247600372070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48$ python test.py ********************************************************************** File "/home/wking/src/fun/be/libbe/plugin.py", line 31, in libbe.plugin.iter_plugins Failed example: "plugin" in [n for n,m in iter_plugins("libbe")] Exception raised: Traceback (most recent call last): File "/usr/lib/python2.5/doctest.py", line 1228, in __run compileflags, 1) in test.globs File "", line 1, in "plugin" in [n for n,m in iter_plugins("libbe")] File "/home/wking/src/fun/be/libbe/plugin.py", line 38, in iter_plugins yield modfile[:-3], my_import(prefix+"."+modfile[:-3]) File "/home/wking/src/fun/be/libbe/plugin.py", line 21, in my_import module = __import__(mod_name) File "/home/wking/src/fun/be/libbe/restconvert.py", line 27, in from elementtree import ElementTree ImportError: No module named elementtree ********************************************************************** 1 items had failures: 1 of 2 in libbe.plugin.iter_plugins ***Test Failed*** 1 failures. Traceback (most recent call last): File "test.py", line 32, in for module in plugin.iter_plugins("libbe"): File "/home/wking/src/fun/be/libbe/plugin.py", line 38, in iter_plugins yield modfile[:-3], my_import(prefix+"."+modfile[:-3]) File "/home/wking/src/fun/be/libbe/plugin.py", line 21, in my_import module = __import__(mod_name) File "/home/wking/src/fun/be/libbe/restconvert.py", line 27, in from elementtree import ElementTree ImportError: No module named elementtree Looking into ElementTree, I found their webpage: http://effbot.org/zone/element-index.htm It’s common practice to import ElementTree under an alias, both to minimize typing, and to make it easier to switch between different implementations: $ python >>> import elementtree.ElementTree as ET >>> import cElementTree as ET >>> import lxml.etree as ET >>> import xml.etree.ElementTree as ET # Python 2.5 Using new import style, fall back to old if that fails. Affected files: libbe/restconvert.py Bugs-Everywhere-Web/beweb/formatting.py values000066400000000000000000000002411205171247600375460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 13 Nov 2008 17:27:17 +0000" } values000066400000000000000000000003331205171247600311260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2{ "creator": "wking", "severity": "minor", "status": "fixed", "summary": "elementtree module moved in Python 2.5", "time": "Thu, 13 Nov 2008 16:45:24 +0000" } 3438b72c-6244-4f1d-8722-8c8d41484e35/000077500000000000000000000000001205171247600274325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600312575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46/000077500000000000000000000000001205171247600363275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/commentsbody000066400000000000000000000004001205171247600372010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46It would be nice if we could store tests. .be/BUGDIR/tests/... and link them from bugs. Then running test.py BUGDIR/BUG would run the tests for that particular bug. This would provide regression testing via test.py $(be list --ids --status fixed) values000066400000000000000000000002411205171247600375460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 03 Jan 2010 16:32:13 +0000" } e7d8343a-bd85-4359-bcda-bf0dc1e8177a/000077500000000000000000000000001205171247600363445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/commentsbody000066400000000000000000000026511205171247600372300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/e7d8343a-bd85-4359-bcda-bf0dc1e8177a> It would be nice if we could store tests. > .be/BUGDIR/tests/... > and link them from bugs. Better: have them be comments with a TEST tag. The mime type could hint at the execution mechanism: text/x-python application/x-sh ... > Then running > test.py BUGDIR/BUG > would run the tests for that particular bug. > > This would provide regression testing via > test.py $(be list --ids --status fixed) This should be a 'test' command (libbe.command.test.Test), since people will want to test bugs for their own projects, and out current test.py is for testing BE specifically. It should be be test BUGDIR/BUG be test $(be list --ids --status fixed) We _should_ add be test $(be list --ids --status fixed) to test.py for regression testing. This whole thing would make the fixed/closed distinction more clear, since fixed bugs would get tests run and expect success, while closed bugs' tests would be skipped. Finally, if users are submitting tests on their own, it would be a good idea to sandbox them, but a portable way for sandboxing scripts sounds very complicated. It would probably be easier to sandbox python scripts, but I don't know what that would look like... A work around would be to allow users to post tests, but not allow them to set the TEST flag. Then the bugdir maintainer could set the flag themselves once they'd vetted the test. Much uglier than sandboxing, but also much more easily implemented. values000066400000000000000000000003431205171247600375660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/e7d8343a-bd85-4359-bcda-bf0dc1e8177a{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 31 Jan 2010 17:36:52 +0000", "In-reply-to": "ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46" } values000066400000000000000000000003441205171247600306550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35{ "creator": "W. Trevor King ", "severity": "minor", "status": "open", "summary": "Attach tests to bugs", "time": "Sun, 03 Jan 2010 16:23:42 +0000" } 35a50658-c13c-4f29-9bd0-032c411e4a6b/000077500000000000000000000000001205171247600276165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b1f3a2868-5308-42fd-b46c-68d8dfc851b2/000077500000000000000000000000001205171247600362415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/commentsbody000066400000000000000000000016671205171247600371330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/comments/1f3a2868-5308-42fd-b46c-68d8dfc851b2From 80ce5b9707750edba08842cd267843fa035d7b0a Mon Sep 17 00:00:00 2001 From: Valtteri Kokkoniemi Date: Thu, 17 Feb 2011 12:03:56 +0200 Subject: [PATCH] fixed created tag handling in import-xml --- libbe/bug.py | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/libbe/bug.py b/libbe/bug.py index 6d3d836..122c81a 100644 --- a/libbe/bug.py +++ b/libbe/bug.py @@ -395,6 +395,10 @@ class Bug (settings_object.SavedSettingsObject): if child.tag == 'uuid': uuid = text continue # don't set the bug's uuid tag. + elif child.tag == 'created': + self.time = utility.str_to_time(text) + self.explicit_attrs.append('time') + continue elif child.tag == 'extra-string': estrs.append(text) continue # don't set the bug's extra_string yet. -- 1.7.1 values000066400000000000000000000003231205171247600374610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/comments/1f3a2868-5308-42fd-b46c-68d8dfc851b2{ "Alt-id": "6ca8e92a-52b2-4909-a088-6bae5d7511a6", "Author": "kokval ", "Content-type": "text/plain", "Date": "Thu, 17 Feb 2011 10:40:51 +0000" } e9c40503-84a0-47eb-b923-ac7b2f1b8de9/000077500000000000000000000000001205171247600363645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/commentsbody000066400000000000000000000001671205171247600372500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/comments/e9c40503-84a0-47eb-b923-ac7b2f1b8de9show --xml generates tags for bug creation timestamp, but these break in import for fix, see attached patch values000066400000000000000000000003231205171247600376040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b/comments/e9c40503-84a0-47eb-b923-ac7b2f1b8de9{ "Alt-id": "3193f33d-ed57-4c32-9f6e-598bdc4ea67e", "Author": "kokval ", "Content-type": "text/plain", "Date": "Thu, 17 Feb 2011 10:40:21 +0000" } values000066400000000000000000000004471205171247600310450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35a50658-c13c-4f29-9bd0-032c411e4a6b{ "creator": "Valtteri Kokkoniemi ", "severity": "minor", "status": "fixed", "summary": "created-tags break import-xml", "time": "Thu, 17 Feb 2011 10:38:22 +0000" } 35b962a0-a64a-4b5c-82c5-ea740e8a6322/000077500000000000000000000000001205171247600277035ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006661205171247600311350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35b962a0-a64a-4b5c-82c5-ea740e8a6322{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Document the code for the alpha release.", "time": "Sat, 31 Jan 2009 05:17:34 +0000" } 3613e6e9-db9e-4775-8914-f31f0b4b81ac/000077500000000000000000000000001205171247600277335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002441205171247600311550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3613e6e9-db9e-4775-8914-f31f0b4b81ac{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "auto-add files to revision control" } 372f8a5c-a1ce-4b07-a7b1-f409033a7eec/000077500000000000000000000000001205171247600301225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002441205171247600313440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/372f8a5c-a1ce-4b07-a7b1-f409033a7eec{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "implement severity on bug creation" } 381555eb-f2e3-4ef0-8303-d759c00b390a/000077500000000000000000000000001205171247600276315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a9aa88bbd-71d0-44fa-804d-3562171f9539/000077500000000000000000000000001205171247600361705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/commentsbody000066400000000000000000000000641205171247600370500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9aa88bbd-71d0-44fa-804d-3562171f9539Merged from bug 4f7a4c3b-31e3-4023-8c9d-e67f627a34f0values000066400000000000000000000002411205171247600374070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9aa88bbd-71d0-44fa-804d-3562171f9539{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 13:44:33 +0000" } 9e33512e-e3cb-42ec-bc99-8e77587d0d3f/000077500000000000000000000000001205171247600364245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/commentsbody000066400000000000000000000002601205171247600373020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9e33512e-e3cb-42ec-bc99-8e77587d0d3fTrees created with tla make dotfiles precious by default, so add "source ^\.be$" to the root .arch-inventory. Optionally, only do this if inventory --source doesn't list .be values000066400000000000000000000002101205171247600376370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9e33512e-e3cb-42ec-bc99-8e77587d0d3f{ "Author": "abentley", "Content-type": "text/plain", "Date": "Tue, 17 May 2005 13:42:52 +0000" } b76434a3-5cf9-4d2c-820b-64444289c09f/000077500000000000000000000000001205171247600361125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/commentsbody000066400000000000000000000001101205171247600367620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/b76434a3-5cf9-4d2c-820b-64444289c09fFixed with Arch._adjust_naming_conventions on a per-tree basis instead. values000066400000000000000000000003431205171247600373340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/b76434a3-5cf9-4d2c-820b-64444289c09f{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 13:46:32 +0000", "In-reply-to": "9e33512e-e3cb-42ec-bc99-8e77587d0d3f" } values000066400000000000000000000003241205171247600310520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Ensure .be is source in Arch", "time": "Tue, 17 May 2005 13:39:02 +0000" } 3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/000077500000000000000000000000001205171247600301225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e287d3cc1-1cd0-449a-b280-87c529e33951/000077500000000000000000000000001205171247600363735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000007341205171247600372570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/287d3cc1-1cd0-449a-b280-87c529e33951Hmm, perhaps my thinking has been too revision-centric. I'm not really sure what other level of granularity is appropriate though. Both notifications and commits should be generated on a "per-session" level, so maybe I'll just ignore Arch and Mercurial (for whom revising history is difficult, so per-session commits can be more work) for the time being ;). In that case, _every_ commit will be a notify-since sort of change, so I'll just use libbe.diff :). values000066400000000000000000000002411205171247600376120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/287d3cc1-1cd0-449a-b280-87c529e33951{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Wed, 22 Jul 2009 19:07:28 +0000" } 303986f2-0b17-4589-bf76-ed1461699c3e/000077500000000000000000000000001205171247600363405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000011031205171247600372130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/303986f2-0b17-4589-bf76-ed1461699c3ePerhaps something like be-handle-mail --notify-since to tell subscribers about changes since the specified revision. This would duplicate mail to P in our first example above, but that's not too annoying, and P might _want_ to know what R had merged from Q. On the other hand it would be annoying if 10 other repos merged Q and ran the notification. We could make the subscription something like subscribe BUG-ID HOST-LIST e.g. subscribe 1234 bugseverywhere.org,fancy_branch.com subscribe abcd * To allow users to whitelist hosts they want updates from. values000066400000000000000000000003431205171247600375620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/303986f2-0b17-4589-bf76-ed1461699c3e{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 21 Jul 2009 19:52:25 +0000", "In-reply-to": "950ac308-f3e1-4956-885a-e79ce3025fd5" } 478443b3-dd69-4719-b79a-b1279f75b8e4/000077500000000000000000000000001205171247600364265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000002211205171247600373010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/478443b3-dd69-4719-b79a-b1279f75b8e4"all" and "new" might be valid shortnames? Nope, UUID string representations are restricted to hex (0-9a-f) and "-" as per RFC 4122 section 3. values000066400000000000000000000003431205171247600376500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/478443b3-dd69-4719-b79a-b1279f75b8e4{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 21 Jul 2009 19:53:02 +0000", "In-reply-to": "85a2d1ac-200a-4ae7-841f-9f4e87795dbf" } 85a2d1ac-200a-4ae7-841f-9f4e87795dbf/000077500000000000000000000000001205171247600367025ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000003311205171247600375570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/85a2d1ac-200a-4ae7-841f-9f4e87795dbfObviously via the control interface: subscribe #BUG-ID subscribe new subscribe all unsubscribe #BUG-ID ... Implemented via .extra_strings, although we'll need BugDir.extra_strings for the repo-wide new/all. values000066400000000000000000000002411205171247600401210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/85a2d1ac-200a-4ae7-841f-9f4e87795dbf{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 21 Jul 2009 19:34:20 +0000" } 950ac308-f3e1-4956-885a-e79ce3025fd5/000077500000000000000000000000001205171247600364725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000004651205171247600373570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/950ac308-f3e1-4956-885a-e79ce3025fd5This creates an interesting situation: Person P subscribes to bug B in repo R. Repo S merges repo R. Person Q comments on B in S. S notifies P :). which is nice. However Person P subscribes to bug B in repo R. Person Q comments on B in repo S. R merges S. P never notified about Q's comment. values000066400000000000000000000003431205171247600377140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/950ac308-f3e1-4956-885a-e79ce3025fd5{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 21 Jul 2009 19:34:32 +0000", "In-reply-to": "85a2d1ac-200a-4ae7-841f-9f4e87795dbf" } f72f8640-2e50-471e-aebe-0ddb8cdd5a2a/000077500000000000000000000000001205171247600371015ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/commentsbody000066400000000000000000000001301205171247600377530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/f72f8640-2e50-471e-aebe-0ddb8cdd5a2aThe intereface changed a bit as I implemented it. See "be help subscribe" for details. values000066400000000000000000000003431205171247600403230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/f72f8640-2e50-471e-aebe-0ddb8cdd5a2a{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Wed, 22 Jul 2009 18:54:06 +0000", "In-reply-to": "85a2d1ac-200a-4ae7-841f-9f4e87795dbf" } values000066400000000000000000000006061205171247600313460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e{ "assigned": "W. Trevor King ", "creator": "W. Trevor King ", "reporter": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "subscribe/unsubscribe (bug #..., \"new bugs\", \"all\", etc.)", "time": "Tue, 21 Jul 2009 19:27:04 +0000" } 40dac9af-951e-4b98-8779-9ba02c37f8a1/000077500000000000000000000000001205171247600300205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1e1ff6c81-37d8-43ee-9dcf-17a89e07556a/000077500000000000000000000000001205171247600366205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/commentsbody000066400000000000000000000002641205171247600375020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556aCalls to Popen() while running `test.py` raised OSError because of missing binaries (tla was not installed). Added catches to produce more useful error messages in the backtrace. values000066400000000000000000000002411205171247600400370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 13 Nov 2008 15:58:18 +0000" } values000066400000000000000000000003161205171247600312420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1{ "creator": "wking", "severity": "minor", "status": "fixed", "summary": "Popen OSErrors not caught", "time": "Thu, 13 Nov 2008 15:54:45 +0000" } 42716dc2-6201-4537-b5fd-e1280812a53d/000077500000000000000000000000001205171247600274615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006611205171247600307060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/42716dc2-6201-4537-b5fd-e1280812a53d{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Document the packaging and install.", "time": "Sat, 31 Jan 2009 05:17:45 +0000" } 427e0ca7-17f5-4a5a-8c68-98cc111a2495/000077500000000000000000000000001205171247600276425ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a249529ad0d9e-c05b-4793-bb8b-e8bf237f51b3/000077500000000000000000000000001205171247600364755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/commentsbody000066400000000000000000000020111205171247600373470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/29ad0d9e-c05b-4793-bb8b-e8bf237f51b3> Currently, the code and interface of Bugs Everywhere speaks loosely > about the term “RCS”. Sometimes it means “revision control system” > referring in general to these types of system, and sometimes it talks > about GNU RCS, a specific system. I don't think we ever rever to GNU RCS. Our current libbe.rcs.RCS default implementation is a "don't version" backend for BE, but perhaps this is what you're refereing to. > I propose that “Version Control System” (“VCS”) has emerged as a > consensus term to refer to such systems in general, with no specific > reference to any particular system. Fair enough. > This will change some interface (e.g. the ‘rcs_name’ configuration > setting, and some of the methods on objects), but making this change > while Bugs Everywhere is small will be much less painful than making it > later. Hmm, we really need a method for upgrading the on-disk BugDir version. It's hard when you need to maintain backwards compatibilty with earlier versions in the VCS history.... values000066400000000000000000000003431205171247600377170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/29ad0d9e-c05b-4793-bb8b-e8bf237f51b3{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 03 Aug 2009 23:26:22 +0000", "In-reply-to": "a92f97a4-e9fe-43f7-bf56-5862b03a2641" } a92f97a4-e9fe-43f7-bf56-5862b03a2641/000077500000000000000000000000001205171247600362715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/commentsbody000066400000000000000000000024331205171247600371530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/a92f97a4-e9fe-43f7-bf56-5862b03a2641Howdy all, Currently, the code and interface of Bugs Everywhere speaks loosely about the term “RCS”. Sometimes it means “revision control system” referring in general to these types of system, and sometimes it talks about GNU RCS, a specific system. I propose that “Version Control System” (“VCS”) has emerged as a consensus term to refer to such systems in general, with no specific reference to any particular system. So I'd like to modify the Bugs Everywhere code to disambiguate: the term “VCS” will be used consistently to refer to version control systems in general, and “RCS” will only ever refer to GNU RCS. This will change some interface (e.g. the ‘rcs_name’ configuration setting, and some of the methods on objects), but making this change while Bugs Everywhere is small will be much less painful than making it later. Any objections? Any alternative suggestions? -- \ “I watched the Indy 500, and I was thinking that if they left | `\ earlier they wouldn't have to go so fast.” —Steven Wright | _o__) | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000003311205171247600375100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/a92f97a4-e9fe-43f7-bf56-5862b03a2641{ "Alt-id": "<87d49879v7.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Sat, 13 Jun 2009 19:37:16 +1000" } values000066400000000000000000000006431205171247600310670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKED-BY:51930348-9ccc-4165-af41-6c7450de050e" ], "reporter": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "Terminology: Version control system vs. RCS", "time": "Mon, 03 Aug 2009 23:10:02 +0000" } 4286c0f8-5703-4bc1-b256-414dc408f067/000077500000000000000000000000001205171247600274735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006521205171247600307200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4286c0f8-5703-4bc1-b256-414dc408f067{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Get the layout rhythm right.", "time": "Sat, 31 Jan 2009 00:14:34 +0000" } 47c8fd5f-1f5a-4048-bef7-bb4c9a37c411/000077500000000000000000000000001205171247600301435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006741205171247600313740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/47c8fd5f-1f5a-4048-bef7-bb4c9a37c411{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKED-BY:f51dc5a7-37b7-4ce1-859a-b7cb58be6494", "BLOCKS:4fc71206-4285-417f-8a3c-ed6fb31bbbda", "BLOCKS:bd0ebb56-fb46-45bc-af08-1e4a94e8ef3c" ], "severity": "target", "status": "fixed", "summary": "0.1", "time": "Sun, 06 Dec 2009 00:37:15 +0000" } 496edad5-1484-413a-bc68-4b01274a65eb/000077500000000000000000000000001205171247600277115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/496edad5-1484-413a-bc68-4b01274a65eb8d927822-eff9-42c4-9541-8b784b3f7db2/000077500000000000000000000000001205171247600362745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/496edad5-1484-413a-bc68-4b01274a65eb/commentsbody000066400000000000000000000026131205171247600371560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/496edad5-1484-413a-bc68-4b01274a65eb/comments/8d927822-eff9-42c4-9541-8b784b3f7db2I was having problems with `python test.py bugdir` with the Arch backend. Commits were failing with `archive not registered'. Adding some trace information to arch.Arch._rcs_init() and ._rcs_cleanup() (the traceback module is great :p), I found that the problem was coming from bugdir.BugDir.guess_rcs(). The Arch backend deletes any auto-created archives when it is cleaned up (RCS.__del__ -> RCS.cleanup -> Arch._rcs_cleanup). This means that whatever instance is used to init the archive in guess_rcs() must be kept around. I had been doing: * installed_rcs() -> Arch-instance-A * Arch-instance-A.init() * store Arch-instnance-A.name as bugdir.rcs_name * future calls to bugdir.rcs get new instance Arch-instance-B * eventually Arch-instance-A cleaned up * archive dissapears & tests crash I switched things around so .rcs is the `master attribute' and .rcs_name follows it. Now just save whichever rcs you used to init your archive as .rcs. In order to implement the fix, I had to tweak the memory/file-system interaction a bit. Instead of saving the settings *every*time* a setting_property changed, we now save only if the .be file exists. This file serves as a 'file-system-bugdir-active' flag. Before it is created (e.g., by a .save()), the BugDir lives purely in memory, and can freely go about configuring .rcs, .rcs_name, etc until it get's to the point where it's ready to go to disk. values000066400000000000000000000002411205171247600375130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/496edad5-1484-413a-bc68-4b01274a65eb/comments/8d927822-eff9-42c4-9541-8b784b3f7db2{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 22 Nov 2008 18:53:20 +0000" } values000066400000000000000000000003641205171247600311360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/496edad5-1484-413a-bc68-4b01274a65eb{ "creator": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "Early del-cleanup with Arch backend", "time": "Sat, 22 Nov 2008 18:38:32 +0000" } 4a4609c8-1882-47de-9d30-fee410b8a802/000077500000000000000000000000001205171247600276435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a8020ac3c4cb-90e3-4b67-b6cb-1186d5d66240/000077500000000000000000000000001205171247600363165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/commentsbody000066400000000000000000000000641205171247600371760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/0ac3c4cb-90e3-4b67-b6cb-1186d5d66240Merged into bug ae998b27-a11b-4243-abf6-11841e5b8242values000066400000000000000000000002411205171247600375350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/0ac3c4cb-90e3-4b67-b6cb-1186d5d66240{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 17:05:50 +0000" } 942cd941-583d-4020-99e4-80de7e836129/000077500000000000000000000000001205171247600357765ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/commentsbody000066400000000000000000000000151205171247600366520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/942cd941-583d-4020-99e4-80de7e836129Implemented. values000066400000000000000000000002411205171247600372150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/942cd941-583d-4020-99e4-80de7e836129{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 15:42:07 +0000" } values000066400000000000000000000003721205171247600310670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4a4609c8-1882-47de-9d30-fee410b8a802{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Do we need a severity between serious and minor? EG \"Moderate\"?", "time": "Wed, 25 Jan 2006 23:14:07 +0000" } 4bc91110-1240-4733-af00-1df1712a7abb/000077500000000000000000000000001205171247600275665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314135ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb3bdf1af4-7d61-4b2d-8e25-e54a1ab7e37b/000077500000000000000000000000001205171247600364665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/commentsbody000066400000000000000000000014561205171247600373540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/comments/3bdf1af4-7d61-4b2d-8e25-e54a1ab7e37bFrom 1a6ce70b03a8e7df3e21189cd552d95d28535c1d Mon Sep 17 00:00:00 2001 From: Valtteri Kokkoniemi Date: Thu, 17 Feb 2011 10:11:09 +0200 Subject: [PATCH] fixed importing new bugs --- libbe/command/import_xml.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/libbe/command/import_xml.py b/libbe/command/import_xml.py index bd25372..b4da2fd 100644 --- a/libbe/command/import_xml.py +++ b/libbe/command/import_xml.py @@ -184,7 +184,7 @@ class Import_XML (libbe.command.Command): except KeyError: old = None if old == None: - bd.append(new) + bugdir.append(new) else: old.load_comments(load_full=True) old.merge(new, accept_changes=accept_changes, -- 1.7.1 values000066400000000000000000000003351205171247600377110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/comments/3bdf1af4-7d61-4b2d-8e25-e54a1ab7e37b{ "Alt-id": "1bb12bbd-27b8-4638-abdb-c69384707b60", "Author": "Valtteri Kokkoniemi ", "Content-type": "text/plain", "Date": "Thu, 17 Feb 2011 08:25:02 +0000" } 90dd557c-b6ec-402a-bbae-0ccd31448f07/000077500000000000000000000000001205171247600364575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/commentsbody000066400000000000000000000001261205171247600373360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/comments/90dd557c-b6ec-402a-bbae-0ccd31448f07probably due to refactoring at some point in history for fix, see the attached patch values000066400000000000000000000003231205171247600376770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb/comments/90dd557c-b6ec-402a-bbae-0ccd31448f07{ "Alt-id": "c50ada21-1ce1-4d1b-bcc0-834746ba176c", "Author": "kokval ", "Content-type": "text/plain", "Date": "Thu, 17 Feb 2011 08:21:33 +0000" } values000066400000000000000000000004531205171247600310120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4bc91110-1240-4733-af00-1df1712a7abb{ "creator": "Valtteri Kokkoniemi ", "reporter": "Valtteri Kokkoniemi ", "severity": "minor", "status": "fixed", "summary": "xml import of new bugs is broken", "time": "Thu, 17 Feb 2011 08:19:41 +0000" } 4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/000077500000000000000000000000001205171247600277175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0a8f35fca-8a15-4833-b568-326f0cc89bfa/000077500000000000000000000000001205171247600364775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/commentsbody000066400000000000000000000000641205171247600373570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/comments/a8f35fca-8a15-4833-b568-326f0cc89bfaMerged into bug 381555eb-f2e3-4ef0-8303-d759c00b390avalues000066400000000000000000000002411205171247600377160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/comments/a8f35fca-8a15-4833-b568-326f0cc89bfa{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 13:44:33 +0000" } values000066400000000000000000000003401205171247600311360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Automatically set .be as source for arch", "time": "Thu, 07 Apr 2005 16:07:51 +0000" } 4fc71206-4285-417f-8a3c-ed6fb31bbbda/000077500000000000000000000000001205171247600301265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007061205171247600313530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4fc71206-4285-417f-8a3c-ed6fb31bbbda{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKED-BY:47c8fd5f-1f5a-4048-bef7-bb4c9a37c411", "BLOCKED-BY:ee681951-f254-43d3-a53a-1b36ae415d5c", "BLOCKS:bd0ebb56-fb46-45bc-af08-1e4a94e8ef3c" ], "severity": "target", "status": "closed", "summary": "patch-52", "time": "Sun, 06 Dec 2009 00:37:16 +0000" } 508ea95e-7bc6-4b9b-9e36-a3a87014423d/000077500000000000000000000000001205171247600277255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d1ba36272-7ae1-4f95-8002-7b45e62e6790/000077500000000000000000000000001205171247600361175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/commentsbody000066400000000000000000000002161205171247600367760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/1ba36272-7ae1-4f95-8002-7b45e62e6790Note that VISUAL means interactive editors like vi, emacs. It compares with EDITOR, which originally meant line editors like ex (or edlin?). values000066400000000000000000000003121205171247600373350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/1ba36272-7ae1-4f95-8002-7b45e62e6790{ "Author": "abentley", "Content-type": "text/plain", "Date": "Mon, 16 Jul 2007 15:23:47 +0000", "In-reply-to": "e173c09a-1b3e-4d8a-a86a-6b8c94a76247" } e173c09a-1b3e-4d8a-a86a-6b8c94a76247/000077500000000000000000000000001205171247600364215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/commentsbody000066400000000000000000000002051205171247600372760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/e173c09a-1b3e-4d8a-a86a-6b8c94a76247the $VISUAL environment variable is common for setting a users preferred editor. It would be nice if this would be supported by be. values000066400000000000000000000002061205171247600376410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/e173c09a-1b3e-4d8a-a86a-6b8c94a76247{ "Author": "jelmer", "Content-type": "text/plain", "Date": "Sun, 15 Jul 2007 13:34:52 +0000" } values000066400000000000000000000003431205171247600311470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d{ "creator": "jelmer", "severity": "minor", "status": "fixed", "summary": "should check not just EDITOR but also VISUAL.", "time": "Sun, 15 Jul 2007 13:33:03 +0000" } 51930348-9ccc-4165-af41-6c7450de050e/000077500000000000000000000000001205171247600275525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050ed304f93b-faf2-477e-9ff8-c77e301fd9f9/000077500000000000000000000000001205171247600364405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/commentsbody000066400000000000000000000021301205171247600373140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/d304f93b-faf2-477e-9ff8-c77e301fd9f9Added libbe/upgrade.py to handle upgrading on-disk bugdirs. When upgrade.BUGDIR_DISK_VERSION changes, a series of Updater classes handle the upgrade. For example, if BUGDIR_DISK_VERSIONS = ["v1", "v2", "v3"] and the on-disk version is "v1", you should have defined classes class Upgrade_1_to_2 (Upgrader): initial_version = "v1" final_version = "v2" def _upgrade(): .... class Upgrade_2_to_3 (Upgrader): initial_version = "v2" final_version = "v3" def _upgrade(): .... and added them to upgraders: upgraders = [Upgrade_1_to_2, Upgrade_2_to_3] If the on-disk version is v2, then only Upgrade_2_to_3.upgrade() is run. If the on-disk version is v1, then Upgrade_1_to_2.upgrade() is run, followed by Upgrade_2_to_3.upgrade(). You can optionally define shortcut upgrades (e.g. Upgrade_1_to_3) for efficiency or to avoid data loss. This upgrade occurs during BugDir.load(), which is called by BugDir.__init__(from_disk=True), before any processing of the on-disk data except for the access of .be/version to determine if an upgrade was necessary. values000066400000000000000000000003431205171247600376620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/d304f93b-faf2-477e-9ff8-c77e301fd9f9{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 31 Aug 2009 16:29:50 +0000", "In-reply-to": "f1479ecf-4154-4cd4-bbd6-0ed6275b9f98" } f1479ecf-4154-4cd4-bbd6-0ed6275b9f98/000077500000000000000000000000001205171247600363455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/commentsbody000066400000000000000000000016321205171247600372270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/f1479ecf-4154-4cd4-bbd6-0ed6275b9f98There is no obvious means of using ".be/version"/"libbe.bugdir.TREE_VERSION_STRING". In the past I've worked around this by keeping all the disk-reading backwards compatible (e.g. homemade mapfile -> YAML, the "From" hack in libbe.comment.Comment.load_settings, possibly others). However, this is not the road to easily maintainable code. Most projects only need to maintain backwards compatibility with the last few versions of their disk cache, to allow users an easy upgrade path. The difficulties come with "be diff", which must be able to read _every_ disk-image of the bugdir ever committed into something comparible with the current cutting edge. This makes sweeping changes very difficult. VCSs themselves avoid this by never showing their disk-cache to another program, but we've shown ours to the VCS, and it's difficult (or impossible, depending on the VCS) to change history to match the current format. values000066400000000000000000000002411205171247600375640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/f1479ecf-4154-4cd4-bbd6-0ed6275b9f98{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 16 Aug 2009 19:07:06 +0000" } values000066400000000000000000000007311205171247600307750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/51930348-9ccc-4165-af41-6c7450de050e{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKS:22b6f620-d2f7-42a5-a02e-145733a4e366", "BLOCKS:427e0ca7-17f5-4a5a-8c68-98cc111a2495" ], "reporter": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "Upgrade path for on-disk representation", "time": "Sun, 16 Aug 2009 19:05:59 +0000" } 52034fd0-ec50-424d-b25d-2beaf2d2c317/000077500000000000000000000000001205171247600300255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c3174c50ca0b-a08f-4723-b00d-4bf342cf86b6/000077500000000000000000000000001205171247600365505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/commentsbody000066400000000000000000000014651205171247600374360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/4c50ca0b-a08f-4723-b00d-4bf342cf86b6I'm all for flexibility, so long as it doesn't require too much hackery to implement it. You'll have two problems: * Determining what to commit. You'd have to have RCS keep a log of all versioned files it touched, and extend .commit() to accept the keyword list "files" and commit only those files. This is doable, but maybe not worth the trouble. * Generating meaningful commit messages. You'd have to add this functionality to each command (and future commands). This would probably not be a good idea for the Arch and Mercurial backends, since they have a limited ability to rewrite history when you screw up your commit message (as far as I can tell). Mercurial does have "hg rollback", but it only works once, and lots of typo-correction commits would just make the logs awkward. values000066400000000000000000000003431205171247600377720ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/4c50ca0b-a08f-4723-b00d-4bf342cf86b6{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 24 Jul 2009 12:33:58 +0000", "In-reply-to": "b17a561a-6100-490e-84eb-d1ae4b617940" } 79fb6ef2-176c-45c0-b898-59c3c3e0aafe/000077500000000000000000000000001205171247600366745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/commentsbody000066400000000000000000000010061205171247600375510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/79fb6ef2-176c-45c0-b898-59c3c3e0aafe> * Determining what to commit. > > You'd have to have RCS keep a log of all versioned files it > touched, and extend .commit() to accept the keyword list "files" > and commit only those files. This is doable, but maybe not worth > the trouble. On the other hand, just attemting to commit everything after each command would make it nice and easy to commit bug fixes: be --auto-commit status XYZ fixed which would commit whatever changes you had outstanding with an appropriate commit message. values000066400000000000000000000003431205171247600401160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/79fb6ef2-176c-45c0-b898-59c3c3e0aafe{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 06 Dec 2009 21:45:15 +0000", "In-reply-to": "4c50ca0b-a08f-4723-b00d-4bf342cf86b6" } b17a561a-6100-490e-84eb-d1ae4b617940/000077500000000000000000000000001205171247600363355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/commentsbody000066400000000000000000000003721205171247600372170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/b17a561a-6100-490e-84eb-d1ae4b617940... Also, why doesn't be commit after it takes an action? I think it's kinda weird that I have to commit after creating a new bug. ... as posted in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477125 on Fri, 12 Jun 2009 17:03:02 +0200 values000066400000000000000000000002441205171247600375570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/b17a561a-6100-490e-84eb-d1ae4b617940{ "Author": "Martin F Krafft ", "Content-type": "text/plain", "Date": "Fri, 24 Jul 2009 12:09:02 +0000" } values000066400000000000000000000006601205171247600312510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKED-BY:5fb11e65-68a0-4015-b404-737238299cdc" ], "reporter": "Martin F Krafft ", "severity": "wishlist", "status": "open", "summary": "Allow autocommit option for command line interface?", "time": "Fri, 24 Jul 2009 12:04:08 +0000" } 528b2e84-a944-4628-a18f-cc1def1c7e16/000077500000000000000000000000001205171247600300065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007001205171247600312250ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/528b2e84-a944-4628-a18f-cc1def1c7e16{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Implement viewing of a single bug (with comments).", "time": "Sat, 31 Jan 2009 02:59:28 +0000" } 529c290e-b1cf-4800-be7e-68f1ecb9565c/000077500000000000000000000000001205171247600300705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c0c40c13a-3515-4b45-a8c3-142cceab9254/000077500000000000000000000000001205171247600364445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000030651205171247600373300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/0c40c13a-3515-4b45-a8c3-142cceab9254* W. Trevor King (wking@drexel.edu) wrote: > One problem is that we don't actually have "releases". People just > clone a branch, install, and go. This is actually the main reason I've manually mirrored the tree in the past, so that users of our projects can get BE. If tarballs were available I probably wouldn't even bother, but bzr really isn't a nice dependency for just submitting/commenting on bugs. Isn't there a bzr web interface that at least supports creating tarballs/zips? It is pretty standard functionality for most other VCS' web interfaces so I'm guessing there must be, but loggerhead seems not to support it. If it is a case of not having the hardware to host a more featureful web UI I may be able to offer some assistance. > If you're worried about stability, just clone from a more stable branch > (i.e., Chris' trunk). I think > this is good for distributed development, > but maybe makes it hard to package into a conventional release-based system. > With the bzr patch number in setup.py as the patch release number, I would be > releasing my 0.1.363 while Chris releases his 0.1.314, even though they're at > about the same point. I would rather be releasing my > 0.1.20090714121347 > while Chris releases his > 0.1.20090713154540 > Since then the similarity is clearer. Both approaches seem pretty odd to me, as a user you would have no idea if 0.1.200910302359 has the fixes you required in a release you were using that was numbered 0.1.200907141554. Surely you'd at least be {pre,suf}fixing a branch name to the version. Thanks, James values000066400000000000000000000004311205171247600376640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/0c40c13a-3515-4b45-a8c3-142cceab9254{ "Alt-id": "<20090714142942.GA5717@ukfsn.org>", "Author": "James Rowe ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 15:29:42 +0100", "In-reply-to": "ea01c122-e629-4d5c-afa7-b180f4a8748b" } 1847f1f8-525a-42c4-ae2b-e9377459d2a6/000077500000000000000000000000001205171247600364335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000021611205171247600373130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1847f1f8-525a-42c4-ae2b-e9377459d2a6"W. Trevor King" writes: > On Tue, Nov 17, 2009 at 01:41:26PM -0300, Nicolas Alvarez wrote: > > I'm using the latest version available on Debian > > (0.0.193+bzr.r217-2). I should ask for an updated package... > […] > There is also an outstanding Debian bug for updating the Debian package > http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544515 > so there may be a more current package on the way, but I don't know > about timeframes for that sort of thing. It would make it much easier on the Debian package maintainer if the Bugs Everywhere project would make conventional tarball releases, with conventional version numbers, with a changelog describing what has changed between versions. Trying to maintain a package of a project that is only made available by undifferentiated VCS revision numbers is a lot more effort, and so doesn't happen very often. -- \ “Roll dice!” “Why?” “Shut up! I don't need your fucking | `\ *input*, I need you to roll dice!” —Luke Crane, demonstrating | _o__) his refined approach to play testing, 2009 | Ben Finney values000066400000000000000000000003531205171247600376560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1847f1f8-525a-42c4-ae2b-e9377459d2a6{ "Alt-id": "<87d43gn8ju.fsf_-_@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Wed, 18 Nov 2009 13:30:29 +0000" } 1f40efc1-6efc-4dd8-bdd2-97907e5aa624/000077500000000000000000000000001205171247600370065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000124261205171247600376730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1f40efc1-6efc-4dd8-bdd2-97907e5aa624On Tue, Jul 14, 2009 at 03:29:42PM +0100, James Rowe wrote: > * W. Trevor King (wking@drexel.edu) wrote: > > One problem is that we don't actually have "releases". People just > > clone a branch, install, and go. > > This is actually the main reason I've manually mirrored the tree in > the past, so that users of our projects can get BE. If tarballs were > available I probably wouldn't even bother, but bzr really isn't a nice > dependency for just submitting/commenting on bugs. Fair enough. It will be good when we get a commit-able web interface and/or email interface going. > Isn't there a bzr web interface that at least supports creating > tarballs/zips? It is pretty standard functionality for most other VCS' > web interfaces so I'm guessing there must be, but loggerhead seems not > to support it. Unfortunately, people would still need bzr to install the versioned source: libbe/_version.py: bzr version-info --format python > $@ So you'll need a "release" target in the makefile to build a bzr-less install. While you're at it, you should probably compile the manpage too to remove the docbook-to-man dependency. Do people want a HEAD tarball too? There must be a bzr equivalent of .git/hooks/post-update but I don't know what it is. > > If you're worried about stability, just clone from a more stable branch > > (i.e., Chris' trunk). I think > this is good for distributed development, > > but maybe makes it hard to package into a conventional release-based system. > > With the bzr patch number in setup.py as the patch release number, I would be > > releasing my 0.1.363 while Chris releases his 0.1.314, even though they're at > > about the same point. I would rather be releasing my > > 0.1.20090714121347 > > while Chris releases his > > 0.1.20090713154540 > > Since then the similarity is clearer. > > Both approaches seem pretty odd to me, as a user you would have no > idea if 0.1.200910302359 has the fixes you required in a release you > were using that was numbered 0.1.200907141554. Surely you'd at least be > {pre,suf}fixing a branch name to the version. "be --version" currently gives you the revision id: wking@drexel.edu-20090714121347-c6rloikst1t3m5yl which tells you exactly which commit your installed version is based on. If we want stick with revision numbers, how about: major.minor.revno-branch_nick But then we'd have to pick "unique" branch nicknames... I'd sliced out the timestamp portion of the revision id so that the "patch-number" would be an integer and the branch name wasn't references, so that "upgrading" from one branch to another could be transparent to the users (who just see an increading timestamp), but still available to the developers (who know when commits were made to the branches they track, and the likelyhood of to-the-second commit collisions in official packages is small). On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > "W. Trevor King" writes: > > > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > > Please, no. Timestamps aren't version strings, that's conflating two > > > pieces of information with very different meanings. Correlating the > > > two is the job of a changelog. > > > > Which we don't bother keeping (also NEWS), since "bzr log" works so > > nicely. > > That's not a changelog, that's a commit log of every source-level commit > made. Far too much detail for a changelog of *user-visible* changes > associated with a release. I need a user around to help me determine "user-visable" changes ;). My labmates loose interest after be init/new/comment :p. None of which has ever changed, other than set-root -> init ;). > > The timestamp should at least replace the patch release number, which > > you agree is-desirable-to increase motonically ;). > > I still disagree that a timestamp is the right thing to use there. If > you want a monotonically-increasing indicator of which revision we're up > to, that's immediately available with the revision number from VCS on > the main branch. That also has the advantage of producing consecutive > numbers for each revision, by definition. But not during branch-switches, while my method skips large regions, but probably increases during any reasonable branch-switch. For example, when I upgraded to rich root to pull Ben's patch, I'm not sure if Chris upgraded the trunk and merged my branch, or just ditched the trunk and cloned my branch. Using actual bzr revision numbers would make switching branches that either wrong (in the case of rev-id decreases) or confusing (in the case of a single non-consecutive increase). On Tue, Jul 14, 2009 at 11:11:31AM -0400, Chris Ball wrote: > > I agree that's a problem. I think the solution is to start making > > releases, with specific version strings, as source tarballs. > > I'm happy to do this if people think it would be useful, and I don't > yet have a strong opinion on whether the releases should come with > version numbers or timestamps. I imagine the news from 2006 to now will be somewhat abridged ;). -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600402330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1f40efc1-6efc-4dd8-bdd2-97907e5aa624{ "Alt-id": "<20090714171725.GB10445@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 13:17:25 -0400", "In-reply-to": "0c40c13a-3515-4b45-a8c3-142cceab9254" } 2bb7b4d0-6290-4771-9fff-4aa2e8086b1a/000077500000000000000000000000001205171247600365555ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000047321205171247600374430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2bb7b4d0-6290-4771-9fff-4aa2e8086b1aChris Ball writes: > Hi, > > > That's not a changelog, that's a commit log of every source-level > > commit made. Far too much detail for a changelog of > > *user-visible* changes associated with a release. > > I think I agree with both of you. :) It seems like it's both true that > there's no point in keeping a GNU-style ChangeLog these days I think I have a better understanding of why this apparent disagreement occurred, and it was due to my sloppy use of terms. Looking into it further, it seems there is a certain expectation (set, in part, by the long-standing GNU coding conventions) that a “GNU-style ChangeLog” contains not only a particular *format*, but information at a particular level of *detail*. That is, a GNU ChangeLog is intended for the style of work where one logs all the changes made to every file in the tree each working day, and then makes a new day's entry above that, and so on. This is, of course, entirely redundant with a VCS revision history, which makes all the commit messages available on request. So to disambiguate, that's not what I meant. I'm more familiar with a less-frequently-updated and less-fine-detail change log; perhaps more akin to the GNU-style “NEWS” file. > and that if we make a release we should write an announce mail that > directly mentions new user-visible changes as well as attaching the > commit log. That smaller list of highly user-visible changes could > live in NEWS, or in the announce mail, or both. Yes, that's mostly what I meant. I actually don't think the commit log needs to be part of the release at all. It's of interest only to those who want fine-level detail about changes to every file, and for that purpose I think read access to the VCS is much better. Packaging a static copy of the commit log as plain text seems pointless. Rather, we should treat a user-changes level “NEWS” file (or whatever name we choose for it) as part of the documentation, and set the expectation among the team that it will be updated for each user-visible change being worked on, like any other documentation. -- \ “… Nature … is seen to do all things Herself and through | `\ herself of own accord, rid of all gods.” —Titus Lucretius | _o__) Carus, c. 40 BCE | Ben Finney _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004521205171247600400000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2bb7b4d0-6290-4771-9fff-4aa2e8086b1a{ "Alt-id": "<87hbxdhtkp.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Thu, 16 Jul 2009 19:21:10 +1000", "In-reply-to": "cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c" } 2c95ee07-462d-42cf-8dc3-8f5389a392cb/000077500000000000000000000000001205171247600366005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000064421205171247600374660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2c95ee07-462d-42cf-8dc3-8f5389a392cb-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 W. Trevor King wrote: > Thinking about this some more, I think that the role of the > main-branch is to officially sanction the current state of the code as > "released". If a series of commits will leave a branch in a > known-unusable form, they should be carried out in some appropriately > named development branch. Then the log of commits to the main branch > ("bzr log -n 1" for bzr > ) should produce a fairly respectable > changelog. This is how we develop bzr itself. The mainline is controlled by PQM, which is a tool that merges feature branches, runs the tests, and commits only if the tests pass. $ bzr log --short --limit 10 4534 Canonical.com Patch Queue Manager 2009-07-14 [merge] (abentley) Implement merge --interactive 4533 Canonical.com Patch Queue Manager 2009-07-14 [merge] (jml) Merge in changes from 1.17 branch. 4532 Canonical.com Patch Queue Manager 2009-07-14 [merge] (igc) zc.buildout Windows build support (Sidnei da Silva) 4531 Canonical.com Patch Queue Manager 2009-07-13 [merge] (vila) Delete forgotten debug print 4530 Canonical.com Patch Queue Manager 2009-07-13 [merge] (vila) Isolate some tests from TZ 4529 Canonical.com Patch Queue Manager 2009-07-13 [merge] (igc) Bazaar 2.0 Upgrade Guide 4528 Canonical.com Patch Queue Manager 2009-07-13 [merge] (mbp) correction to news 4527 Canonical.com Patch Queue Manager 2009-07-13 [merge] (jml) Merge in 1.17 branch, updating version numbers and NEWS file. 4526 Canonical.com Patch Queue Manager 2009-07-10 [merge] (mbp, vila) Finish the *_implementation to per_* test renaming 4525 Canonical.com Patch Queue Manager 2009-07-10 [merge] (vila) Quicker check for changes in mutable trees You can also see all the merges as they come into the mainline: $ bzr log --short --limit 10 --include-merges 4534 Canonical.com Patch Queue Manager 2009-07-14 [merge] (abentley) Implement merge --interactive 4526.6.15 Aaron Bentley 2009-07-14 Update command help 4526.6.14 Aaron Bentley 2009-07-14 Use default DiffWriter. 4526.6.13 Aaron Bentley 2009-07-14 Add docstring to do_interactive. 4526.6.12 Aaron Bentley 2009-07-14 Updates from review. 4526.6.11 Aaron Bentley 2009-07-13 Update NEWS. 4526.6.10 Aaron Bentley 2009-07-13 [merge] Merged apply-vocab into merge-interactive. 4526.7.4 Aaron Bentley 2009-07-13 [merge] Merged bzr.dev into apply-vocab. 4526.6.9 Aaron Bentley 2009-07-13 [merge] Merged apply-vocab into merge-interactive. 4526.7.3 Aaron Bentley 2009-07-13 Test shelve_change. > This also means that _every_commit_ to a main branch would > be an official release. We don't do that. We have official releases every 4 weeks, but we do believe that running bzr.dev is pretty safe, because it's always tested and our test suite is quite thorough. Aaron -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkpcznIACgkQ0F+nu1YWqI0yhACePTFUUp6u+Dw+8IRwWOWBQRtb TgsAniJq4lqnDfjNACMr7IEt7xYJhx7m =BbGG -----END PGP SIGNATURE----- values000066400000000000000000000004441205171247600400240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2c95ee07-462d-42cf-8dc3-8f5389a392cb{ "Alt-id": "<4A5CCE76.9040106@aaronbentley.com>", "Author": "Aaron Bentley ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 14:29:10 -0400", "In-reply-to": "ae4f8f1e-6f86-4f81-ba9f-4042deb2ee68" } 31beb504-c72b-4304-95ba-a66d2bcbc46a/000077500000000000000000000000001205171247600366705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000047751205171247600375650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/31beb504-c72b-4304-95ba-a66d2bcbc46aOn Tue, Jul 14, 2009 at 07:34:04PM +0100, jnrowe@gmail.com wrote: > [This time to the list] > > * W. Trevor King (wking@drexel.edu) wrote: > > On Tue, Jul 14, 2009 at 03:29:42PM +0100, James Rowe wrote: > > > Isn't there a bzr web interface that at least supports creating > > > tarballs/zips? It is pretty standard functionality for most other VCS' > > > web interfaces so I'm guessing there must be, but loggerhead seems not > > > to support it. > > > > Unfortunately, people would still need bzr to install the versioned source: > > > > libbe/_version.py: > > bzr version-info --format python > $@ > > I hadn't even seen that change go in. The last upstream change in the > version I have installed locally was by you on 2008-11-24. It's only been in Chris' http://bzr.bugseverywhere.org/be/ branch since revno: 321, 2009-06-25. Obviously we may have to adjust the --verison output once we settle on a versioning scheme, but whatever we pick, I think having the auto-generated libbe/_version.py around for pinpointing bugs is worth the trouble of requiring bzr when building distribution tarballs. > > So you'll need a "release" target in the makefile to build a bzr-less > > install. While you're at it, you should probably compile the manpage > > too to remove the docbook-to-man dependency. > > Maybe for others. Our packages just don't have the manpage as it is only > the "be help" text reformatted, the easy option is sometimes the right > one :) Also, I've just noticed that it has even less documentation in > the bzr tree[1] making its installation much less compelling unless your > packaging rules require a man page like Debians. > > Out of curiosity why is the Makefile being used for this stuff anyway? > It is going to make it difficult to build locally when we finally get > around to merging. Examples: If distutils was being used exclusively it > would fix the #! lines in xml/*. We'd be able to point Python > $version_of_the_day at setup.py instead of having to sed the Makefile or > run setup and manually install other files. I speak Makefile better than I speak distutils ;). I'm not sure how to translate the be.1 generation/installation or the libbe/_version.py generation into distutils. Anyone else? -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600401150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/31beb504-c72b-4304-95ba-a66d2bcbc46a{ "Alt-id": "<20090714191145.GB10606@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 15:11:45 -0400", "In-reply-to": "6e315abe-a080-4369-8729-4aea2dee8494" } 49e0425b-3332-4d0e-b371-300eccd55370/000077500000000000000000000000001205171247600363125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000035411205171247600371750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/49e0425b-3332-4d0e-b371-300eccd55370"W. Trevor King" writes: > ** NEWS file Speaking as the package maintainer, I would like a ‘ChangeLog’ file separate from a ‘NEWS’ file. The ‘NEWS’ file would continue to be hand-edited, and would be a high-level view of user-visible changes in the project each version. Users could reasonably expect to be interested in this file when installing a new version. It would also make sense to retire old news From this file once it becomes sufficiently old, to keep it relevant to users to read. The ‘ChangeLog’ would be an automatically-generated changelog of low-level changes, not for general human consumption but for letting recipients have a fighting chance at knowing the historical context of a particular change without access to the VCS. It would probably be best done as Trevor says: > Depending on our level of masochism, either something starting out > along the lines of [2] > bzr log --gnu-changelog -n1 -r 200.. That makes it necessary to add the changelog file to the tarball, since it won't be a file tracked by VCS and therefore won't be exported. Not a problem:: $ release_version="1.0.0" $ release_name="be-$release_version" $ tarball_file=../$release_name.tar.gz $ work_dir=$(mktemp -t -d) $ export_dir=$work_dir/$release_name $ changelog_file=$export_dir/ChangeLog $ bzr export $export_dir $ bzr log --gnu-changelog -n1 -r ..tag:"$release_version" > $changelog_file $ tar -czf $tarball_file $export_dir $ rm -r $work_dir/ $ ls $tarball_file ../be-1.0.0.tar.gz $ tar -tzf $tarball_file | grep ChangeLog be-1.0.0/ChangeLog -- \ “I bought a dog the other day. I named him Stay. It's fun to | `\ call him. ‘Come here, Stay! Come here, Stay!’ He went insane. | _o__) Now he just ignores me and keeps typing.” —Steven Wright | Ben Finney values000066400000000000000000000004521205171247600375350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/49e0425b-3332-4d0e-b371-300eccd55370{ "Alt-id": "<873a4cmjw5.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Wed, 18 Nov 2009 22:23:06 +0000", "In-reply-to": "a4720227-43cf-49aa-8f9f-f49f46e3e809" } 6e315abe-a080-4369-8729-4aea2dee8494/000077500000000000000000000000001205171247600365115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000032131205171247600373700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/6e315abe-a080-4369-8729-4aea2dee8494[This time to the list] * W. Trevor King (wking@drexel.edu) wrote: > On Tue, Jul 14, 2009 at 03:29:42PM +0100, James Rowe wrote: > > Isn't there a bzr web interface that at least supports creating > > tarballs/zips? It is pretty standard functionality for most other VCS' > > web interfaces so I'm guessing there must be, but loggerhead seems not > > to support it. > > Unfortunately, people would still need bzr to install the versioned source: > > libbe/_version.py: > bzr version-info --format python > $@ I hadn't even seen that change go in. The last upstream change in the version I have installed locally was by you on 2008-11-24. > So you'll need a "release" target in the makefile to build a bzr-less > install. While you're at it, you should probably compile the manpage > too to remove the docbook-to-man dependency. Maybe for others. Our packages just don't have the manpage as it is only the "be help" text reformatted, the easy option is sometimes the right one :) Also, I've just noticed that it has even less documentation in the bzr tree[1] making its installation much less compelling unless your packaging rules require a man page like Debians. Out of curiosity why is the Makefile being used for this stuff anyway? It is going to make it difficult to build locally when we finally get around to merging. Examples: If distutils was being used exclusively it would fix the #! lines in xml/*. We'd be able to point Python $version_of_the_day at setup.py instead of having to sed the Makefile or run setup and manually install other files. Thanks, James 1. http://pullcord.laptop.org:4000/revision/314.1.15/doc/be.1.sgml values000066400000000000000000000004151205171247600377330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/6e315abe-a080-4369-8729-4aea2dee8494{ "Alt-id": "<20090714183404.GB26032@ukfsn.org>", "Author": "jnrowe@gmail.com", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 19:34:04 +0100", "In-reply-to": "1f40efc1-6efc-4dd8-bdd2-97907e5aa624" } 72a519e3-3d6b-4f0f-b412-1310efd255eb/000077500000000000000000000000001205171247600365405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000012131205171247600374150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/72a519e3-3d6b-4f0f-b412-1310efd255ebHi, > It would make it much easier on the Debian package maintainer if > the Bugs Everywhere project would make conventional tarball > releases, with conventional version numbers, with a changelog > describing what has changed between versions. Fair point. How do people feel about pushing for a 1.0 release, with Trevor's tree plus a finished cfbe merge? Or would we rather wait until afterwards to try for cfbe? - Chris. -- Chris Ball One Laptop Per Child _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004321205171247600377610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/72a519e3-3d6b-4f0f-b412-1310efd255eb{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Tue, 17 Nov 2009 22:53:31 +0000", "In-reply-to": "1847f1f8-525a-42c4-ae2b-e9377459d2a6" } 744435b7-1521-4059-a55d-f0c403d7b4d8/000077500000000000000000000000001205171247600362535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000044131205171247600371350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/744435b7-1521-4059-a55d-f0c403d7b4d8"W. Trevor King" writes: > Currently setup.py sets the version number for BE to 0.0.193 and the > url to http://panoramicfeedback.com/opensource/. These are both a bit > outdated ;). Right, that should change. > I've switched my branch over to the current url, and moved to > last-commit-timestamp version numbers. Please, no. Timestamps aren't version strings, that's conflating two pieces of information with very different meanings. Correlating the two is the job of a changelog. > This removes the "prefered branch" issues with the old scheme, and > version numbers should increase monotonically The English word “should” is ambiguous in this context. Are you saying this is desirable, or are you predicting that it will likely be the case? I don't see how it's either, so am doubly confused :-) > but it looses any stability information suggested by the preceding > 0.0. The convention for three-part version strings is often: * Major release number (big changes in how the program works, increasing monotonically per major release, with “0”indicating no major release yet) * Minor release number (smaller impact on how the program works, increasing monotonically per minor release, with “0” indicating no minor release yet since the previous major) * Patch release number (bug-fix and other changes that don't affect the documented interface, increasing monotonically per patch release, with “0” indicating no patch release since the previous major or minor) Obviously there's no standard or enforcement for this, but that's the interpretation I usually give to dotted version strings in the absence of more formal declaration specific to the project. > We can add those back in if people want. Does the first 0 mean > "interfaces in flux" and the second 0 mean "lots of bugs"? If so, I > think we're up to 0.1, since the major features are pretty calm. I disagree with your interpretation and prefer mine, above; on that basis, I agree that we're at least up to version 0.1 by now :-) -- \ “A lot of water has been passed under the bridge since this | `\ variation has been played.” chess book, Russia | _o__) | Ben Finney values000066400000000000000000000004521205171247600374760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/744435b7-1521-4059-a55d-f0c403d7b4d8{ "Alt-id": "<87ocrnjvat.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 22:36:26 +1000", "In-reply-to": "cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c" } 96abea83-9867-4c21-8eb8-9e1b1093cba4/000077500000000000000000000000001205171247600365725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000027071205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/96abea83-9867-4c21-8eb8-9e1b1093cba4I've written up a little release script that bundles all the steps we've mentioned so far into a single command. Of course, we'll still have to keep NEWS up to date on our own. The output prints a trace of what's going on: $ ./release.py 1.0.0 set libbe.version._VERSION = '1.0.0' updating AUTHORS updating ./becommands/assign.py updating ./becommands/html.py ... commit current status: Bumped to version 1.0.0 tag current revision 1.0.0 export current revision to be-1.0.0 generate libbe/_version.py copy libbe/_version.py to be-1.0.0/libbe/_version.py generate ChangeLog file be-1.0.0/ChangeLog up to tag 1.0.0 set vcs_name in be-1.0.0/.be/settings to None create tarball be-1.0.0.tar.gz remove be-1.0.0 Since we'll be distributing a non-bzr-repo version, it would be nice to adapt our 'submit bug' procedure (outlined on the main page) to one that works with this setup. Without guaranteed versioning, that would probably be something along the lines of be email-bugs [--to be-devel@bugseverywhere.org] BUG-ID ... With interfaces/email/interactive listening on the recieving end to grab new-bug emails and import them into an incoming bug repository. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600400170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/96abea83-9867-4c21-8eb8-9e1b1093cba4{ "Alt-id": "<20091120132219.GA17577@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 20 Nov 2009 13:22:19 +0000", "In-reply-to": "49e0425b-3332-4d0e-b371-300eccd55370" } a4720227-43cf-49aa-8f9f-f49f46e3e809/000077500000000000000000000000001205171247600365265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000075021205171247600374120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a4720227-43cf-49aa-8f9f-f49f46e3e809On Tue, Nov 17, 2009 at 05:53:31PM -0500, Chris Ball wrote: > > It would make it much easier on the Debian package maintainer if > > the Bugs Everywhere project would make conventional tarball > > releases, with conventional version numbers, with a changelog > > describing what has changed between versions. > How do people feel about pushing for a 1.0 release, with Trevor's tree > plus a finished cfbe merge? Or would we rather wait until afterwards > to try for cfbe? Sounds good to me. Not that my tree is much ahead of the trunk at the moment. We've talked over most of these issues a few times, so I'll just summarize where I think we stand on the steps needed to make a release. ** cfbe integration Postpone until we work out bzr/hg versioning [1]? ** Conventional version number Set to "1.0.0" using libbe.version._VERSION. ** NEWS file Depending on our level of masochism, either something starting out along the lines of [2] bzr log --gnu-changelog -n1 -r 200.. (commit 200, or aaron.bentley@utoronto.ca-20060411035623-9b8d222282a26ce1 was the last time anyone touched the NEWS file), or a much abbreviated entry [3,4], along the lines of my current NEWS file (changed just a few minutes ago). ** Tag bzr commit bzr tag 1.0.0 ** Create tarball From Ben[5]: bzr export /tmp/be-1.0.0.tar.gz References: [1] On Thu, Jul 23, 2009 at 05:38:03PM -0400, Steve Losh wrote: > On Jul 21, 2009, at 9:59 AM, W. Trevor King wrote: > > Steve's also versioning it with Mercurial. Will he mind changing to > > Bazaar? > > Yeah, I've tried bazaar but really don't like the interface at all. If > everyone else really wants me to move it over I guess I can though. [2] On Tue, Jul 14, 2009 at 11:05:38AM -0400, Chris Ball wrote: > Actually, there's a `bzr log --gnu-changelog` now, and `bzr help > log-formats` offers some more styles. (None of them seem to match > my preferred style for release announcements exactly, which would > be `git shortlog`-style.) [3] On Thu, Jul 16, 2009 at 07:21:10PM +1000, Ben Finney wrote: > I actually don't think the commit log needs to be part of the release at > all. It's of interest only to those who want fine-level detail about > changes to every file, and for that purpose I think read access to the > VCS is much better. Packaging a static copy of the commit log as plain > text seems pointless. > > Rather, we should treat a user-changes level “NEWS” file (or whatever > name we choose for it) as part of the documentation, and set the > expectation among the team that it will be updated for each user-visible > change being worked on, like any other documentation. [4] On Tue, Jul 14, 2009 at 11:11:31AM -0400, Chris Ball wrote: > Hi, > > > That's not a changelog, that's a commit log of every source-level > > commit made. Far too much detail for a changelog of > > *user-visible* changes associated with a release. > > I think I agree with both of you. :) It seems like it's both true that > there's no point in keeping a GNU-style ChangeLog these days, and that > if we make a release we should write an announce mail that directly > mentions new user-visible changes as well as attaching the commit log. > That smaller list of highly user-visible changes could live in NEWS, > or in the announce mail, or both. [5] On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > Even better: ‘bzr export /tmp/foo.tar.gz’ will create a source tarball > of all the files in the branch's VCS inventory. All we need to do is > start the practice of tagging a release in the VCS, and export the > tarball at that time. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004441205171247600377520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a4720227-43cf-49aa-8f9f-f49f46e3e809{ "Alt-id": "<20091118011403.GB9503@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Wed, 18 Nov 2009 01:14:03 +0000", "In-reply-to": "72a519e3-3d6b-4f0f-b412-1310efd255eb" } a536cee5-cc8d-4b18-b491-657e0c7998b4/000077500000000000000000000000001205171247600366035ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000007531205171247600374700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a536cee5-cc8d-4b18-b491-657e0c7998b4Hi, > Which we don't bother keeping (also NEWS), since "bzr log" works > so nicely. If you really want an standard changelog, see > http://mail.gnome.org/archives/desktop-devel-list/2007-September/msg00186.html Actually, there's a `bzr log --gnu-changelog` now, and `bzr help log-formats` offers some more styles. (None of them seem to match my preferred style for release announcements exactly, which would be `git shortlog`-style.) - Chris. -- Chris Ball values000066400000000000000000000004321205171247600400240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a536cee5-cc8d-4b18-b491-657e0c7998b4{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 11:05:38 -0400", "In-reply-to": "ea01c122-e629-4d5c-afa7-b180f4a8748b" } a845096e-3cdf-41ed-a0e3-283439665b92/000077500000000000000000000000001205171247600364305ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000042001205171247600373040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a845096e-3cdf-41ed-a0e3-283439665b92I don't think anyone's changing their mind ;), so tallying the comments so far: On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > I still disagree that a timestamp is the right thing to use there. If > you want a monotonically-increasing indicator of which revision we're up > to, that's immediately available with the revision number from VCS on > the main branch. That also has the advantage of producing consecutive > numbers for each revision, by definition. +1 for trunk version number. On Tue, Jul 14, 2009 at 05:27:52PM +0200, Elena of Valhalla wrote: > I also have a weak preference for version numbers, as long as they > give useful informations on the state the release. +1 for trunk version number. On Tue, Jul 14, 2009 at 02:29:10PM -0400, Aaron Bentley wrote: > We don't do that. We have official releases every 4 weeks, but we do > believe that running bzr.dev is pretty safe, because it's always tested > and our test suite is quite thorough. +1 for by hand version bumps. On Fri, Jul 17, 2009 at 11:37:49PM +0200, Gianluca Montecchi wrote: > The version number of trunk _is_ should be the official version number of the > Bugs Everywhere releases. > The version number in branch does not means nothing outside the branch. > At least we can have a mechanism to build a version number scheme that is > consistent for us to be able to merge branch easily. +1 for trunk version number. And me with my timestamps ;). Sounds like we should go with trunk version number, but that it should be set by hand whenever Chris decides to release something, since the rest of us don't know what version the trunk is on. Unless we do something like: bzr log -n 0 | grep -B2 'nick: be$' | head -n1 | sed 's/ *revno: \([0-9]*\).*/\1/' to extract the last trunk commit referenced from our branch. Implementation preferences? (i.e. Chris vs. regexp matching :p) -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600376550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a845096e-3cdf-41ed-a0e3-283439665b92{ "Alt-id": "<20090718105008.GA31639@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 18 Jul 2009 06:50:08 -0400", "In-reply-to": "c35835c0-8f9f-4090-ba92-1f616867e486" } aad59898-8949-44fb-ad0b-2acea6eb2ef8/000077500000000000000000000000001205171247600371005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000021001205171247600377510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/aad59898-8949-44fb-ad0b-2acea6eb2ef8Hi, > That's not a changelog, that's a commit log of every source-level > commit made. Far too much detail for a changelog of > *user-visible* changes associated with a release. I think I agree with both of you. :) It seems like it's both true that there's no point in keeping a GNU-style ChangeLog these days, and that if we make a release we should write an announce mail that directly mentions new user-visible changes as well as attaching the commit log. That smaller list of highly user-visible changes could live in NEWS, or in the announce mail, or both. > I agree that's a problem. I think the solution is to start making > releases, with specific version strings, as source tarballs. I'm happy to do this if people think it would be useful, and I don't yet have a strong opinion on whether the releases should come with version numbers or timestamps. Thanks, - Chris. -- Chris Ball _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004321205171247600403210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/aad59898-8949-44fb-ad0b-2acea6eb2ef8{ "Alt-id": "", "Author": "Chris Ball ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 11:11:31 -0400", "In-reply-to": "ffbf5ac9-e2f5-47ab-9c3c-33989c81ad42" } ae4f8f1e-6f86-4f81-ba9f-4042deb2ee68/000077500000000000000000000000001205171247600370225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000034451205171247600377100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ae4f8f1e-6f86-4f81-ba9f-4042deb2ee68On Tue, Jul 14, 2009 at 01:17:25PM -0400, W. Trevor King wrote: > On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > > "W. Trevor King" writes: > > > > > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > > > Please, no. Timestamps aren't version strings, that's conflating two > > > > pieces of information with very different meanings. Correlating the > > > > two is the job of a changelog. > > > > > > Which we don't bother keeping (also NEWS), since "bzr log" works so > > > nicely. > > > > That's not a changelog, that's a commit log of every source-level commit > > made. Far too much detail for a changelog of *user-visible* changes > > associated with a release. > > I need a user around to help me determine "user-visable" changes ;). > My labmates loose interest after be init/new/comment :p. None of > which has ever changed, other than set-root -> init ;). Thinking about this some more, I think that the role of the main-branch is to officially sanction the current state of the code as "released". If a series of commits will leave a branch in a known-unusable form, they should be carried out in some appropriately named development branch. Then the log of commits to the main branch ("bzr log -n 1" for bzr > ) should produce a fairly respectable changelog. Obviously we are all quite guilty of doing most of our development in single branches, but it may be a useful model going forward. This also means that _every_commit_ to a main branch would be an official release. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004451205171247600402470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ae4f8f1e-6f86-4f81-ba9f-4042deb2ee68{ "Alt-id": "<20090714182034.GA10606@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 14:20:34 -0400", "In-reply-to": "1f40efc1-6efc-4dd8-bdd2-97907e5aa624" } b19a8f6a-1d7b-4887-a9df-123d59b0cd9b/000077500000000000000000000000001205171247600367335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000016561205171247600376230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/b19a8f6a-1d7b-4887-a9df-123d59b0cd9bOn Tue, Jul 14, 2009 at 5:11 PM, Chris Ball wrote: >   > I agree that's a problem. I think the solution is to start making >   > releases, with specific version strings, as source tarballs. > > I'm happy to do this if people think it would be useful, and I don't > yet have a strong opinion on whether the releases should come with > version numbers or timestamps. as an user of be that plans to try and "package" it for openembedded, a release would be very useful: writing a recipe that downloads a specific commit from bzr and builds it is probably feasible, but definitely not ideal. I also have a weak preference for version numbers, as long as they give useful informations on the state the release. -- Elena ``of Valhalla'' email: elena.valhalla@gmail.com _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000005041205171247600401540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/b19a8f6a-1d7b-4887-a9df-123d59b0cd9b{ "Alt-id": "<5c5e5c350907140827u218553e8rc5773325d43c2bf2@mail.gmail.com>", "Author": "Elena of Valhalla ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 17:27:52 +0200", "In-reply-to": "aad59898-8949-44fb-ad0b-2acea6eb2ef8" } c35835c0-8f9f-4090-ba92-1f616867e486/000077500000000000000000000000001205171247600363065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000106451205171247600371740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/c35835c0-8f9f-4090-ba92-1f616867e486On Thursday 16 July 2009 12:38:55 W. Trevor King wrote: > On Thu, Jul 16, 2009 at 07:32:31PM +1000, Ben Finney wrote: > > "W. Trevor King" writes: > > > On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > > > > "W. Trevor King" writes: > > > > > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > > > > > Please, no. Timestamps aren't version strings, that's conflating > > > > > > two pieces of information with very different meanings. > > > > > > Correlating the two is the job of a [NEWS file]. > > > > > > > > If you want a monotonically-increasing indicator of which revision > > > > we're up to, that's immediately available with the revision number > > > > from VCS on the main branch. That also has the advantage of > > > > producing consecutive numbers for each revision, by definition. > > > > > > But not during branch-switches, while my method skips large regions, > > > but probably increases during any reasonable branch-switch. > > > > I've read this several times now, and I don't see what it's saying. > > > > The assumption I'm making is that there is a single canonical “main > > branch”, from which releases will be made. > > I don't think you need to assume this. See my "virtual branch" > argument below. But if we have a canonical "main branch" that we release, and the packager get, we can refer to it as the stable branch, that it is not a bad idea. > > The version number set in that branch is the one which determines > > the version of Bugs Everywhere as a whole. > > If you are suggesting that the dev branches adjust their release > number _by_hand_ to match the current trunk release number, that > allows switching, but sounds like a lot of work and isn't correct > anyway, since they are not in the same state as the trunk. The version number of trunk _is_ should be the official version number of the Bugs Everywhere releases. The version number in branch does not means nothing outside the branch. At least we can have a mechanism to build a version number scheme that is consistent for us to be able to merge branch easily. > > The revision number is only useful in the context of the branch, so it > > only matters when comparing versions within a branch. When you switch > > between branches, if you're interested in the revision number you'll > > still need to know which branch you're talking about. > > I think this is our main disagreement. I see all the branches as part > of the same codebase, with monotonically increasing timestamp patch > numbers. If you were to collapse all the commit snapshots down into a > single chronological "virtual branch", it would still make sense, it > would just be a bit unorganized. We do all try to move in the same > general direction ;). I don't think that, outside the developers, a version number like cjb@laptop.org-20090713154540-ve4pmydqzb1ghgvc is a good choice, not for the user of BE, not for the packager of BE > > This, then, is an argument for not having the revision number in the > > version string at all. The version then becomes a more traditional > > “major.minor.patch” tuple, and is only ever updated when some release > > manager of the canonical branch decides it's correct to do so. > > It is an argument for not using the revision number. You can avoid > revision numbers by using hand-coded patch numbers, or by using > timestamps, which is what we're trying to decide on :p. We can use both. During the development we can use version number like x.y.z.timestamp As we decide to release a stable version, the release manager set the version number to a more traditional x.y.z format, and create a branch (stable branch) This way we have these advantages: 1) an user have a simple version number to use for bug report/feature request/help request 2) a packager have an easy life to choose to package a stable or a trunk version, knowing what are they doing bonus) we can maintain a stable and a developmente source tree/branch, where in the development tree we can make also backward incompatible modification to the source without making any damage to the users/packagers, while in the stable branch we can make only bugfix/security fix or port from the devel branch some interesting features as long as they don't break compatibility. bye Gianluca _______________________________________________ Be-devel mailing list Be-devel@bugseverywhere.org http://void.printf.net/cgi-bin/mailman/listinfo/be-devel values000066400000000000000000000004351205171247600375320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/c35835c0-8f9f-4090-ba92-1f616867e486{ "Alt-id": "<200907172337.49779.gian@grys.it>", "Author": "Gianluca Montecchi ", "Content-type": "text/plain", "Date": "Fri, 17 Jul 2009 23:37:49 +0200", "In-reply-to": "f925e56f-26f9-4620-82fb-a0f160f27921" } cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c/000077500000000000000000000000001205171247600370625ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000016411205171247600377440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/cdf15bdd-d3fe-4251-9d0b-f1b687e9a26cCurrently setup.py sets the version number for BE to 0.0.193 and the url to http://panoramicfeedback.com/opensource/. These are both a bit outdated ;). I've switched my branch over to the current url, and moved to last-commit-timestamp version numbers. This removes the "prefered branch" issues with the old scheme, and version numbers should increase monotonically, but it looses any stability information suggested by the preceding 0.0. We can add those back in if people want. Does the first 0 mean "interfaces in flux" and the second 0 mean "lots of bugs"? If so, I think we're up to 0.1, since the major features are pretty calm. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000003421205171247600403030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c{ "Alt-id": "<20090714110543.GB4855@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 07:05:43 -0400" } ea01c122-e629-4d5c-afa7-b180f4a8748b/000077500000000000000000000000001205171247600366275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000063461205171247600375200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ea01c122-e629-4d5c-afa7-b180f4a8748bOn Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > "W. Trevor King" writes: > > I've switched my branch over to the current url, and moved to > > last-commit-timestamp version numbers. > > Please, no. Timestamps aren't version strings, that's conflating two > pieces of information with very different meanings. Correlating the two > is the job of a changelog. Which we don't bother keeping (also NEWS), since "bzr log" works so nicely. If you really want an standard changelog, see http://mail.gnome.org/archives/desktop-devel-list/2007-September/msg00186.html > > This removes the "prefered branch" issues with the old scheme, and > > version numbers should increase monotonically > > The English word “should” is ambiguous in this context. Are you saying > this is desirable, or are you predicting that it will likely be the > case? Both. > I don't see how it's either, so am doubly confused :-) The timestamp should at least replace the patch release number, which you agree is-desirable-to increase motonically ;). I also predict that it will increase monotonically for any given branch, since the branch HEAD will have both the most recent commit and the highest version number. The only problem I can think of is having your clock _way_ off, and that is unlikely enough to ignore. If you hop between branches, the timestamp is much more likely to increase going to the more modern branch than the bzr revision number, which desynchronize between branches fairly quickly. > The convention for three-part version strings is often: > > * Major release number (big changes in how the program works, > increasing monotonically per major release, with “0”indicating no > major release yet) > > * Minor release number (smaller impact on how the program works, > increasing monotonically per minor release, with “0” indicating no > minor release yet since the previous major) > > * Patch release number (bug-fix and other changes that don't affect > the documented interface, increasing monotonically per patch > release, with “0” indicating no patch release since the previous > major or minor) One problem is that we don't actually have "releases". People just clone a branch, install, and go. If you're worried about stability, just clone from a more stable branch (i.e., Chris' trunk). I think this is good for distributed development, but maybe makes it hard to package into a conventional release-based system. With the bzr patch number in setup.py as the patch release number, I would be releasing my 0.1.363 while Chris releases his 0.1.314, even though they're at about the same point. I would rather be releasing my 0.1.20090714121347 while Chris releases his 0.1.20090713154540 Since then the similarity is clearer. At any rate, I think the two approaches are close enough that an auto-updating timestamp beats a manually bumped patch number, since no-one ever actually bumps the patch number ;). -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004441205171247600400530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ea01c122-e629-4d5c-afa7-b180f4a8748b{ "Alt-id": "<20090714133732.GB6160@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Tue, 14 Jul 2009 09:37:32 -0400", "In-reply-to": "744435b7-1521-4059-a55d-f0c403d7b4d8" } f925e56f-26f9-4620-82fb-a0f160f27921/000077500000000000000000000000001205171247600363525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000102301205171247600372260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/f925e56f-26f9-4620-82fb-a0f160f27921On Thu, Jul 16, 2009 at 07:32:31PM +1000, Ben Finney wrote: > "W. Trevor King" writes: > > > On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > > > "W. Trevor King" writes: > > > > > > > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > > > > Please, no. Timestamps aren't version strings, that's conflating > > > > > two pieces of information with very different meanings. > > > > > Correlating the two is the job of a [NEWS file]. > > > > > If you want a monotonically-increasing indicator of which revision > > > we're up to, that's immediately available with the revision number > > > from VCS on the main branch. That also has the advantage of > > > producing consecutive numbers for each revision, by definition. > > > > But not during branch-switches, while my method skips large regions, > > but probably increases during any reasonable branch-switch. > > I've read this several times now, and I don't see what it's saying. > > The assumption I'm making is that there is a single canonical “main > branch”, from which releases will be made. I don't think you need to assume this. See my "virtual branch" argument below. > The version number set in that branch is the one which determines > the version of Bugs Everywhere as a whole. If you are suggesting that the dev branches adjust their release number _by_hand_ to match the current trunk release number, that allows switching, but sounds like a lot of work and isn't correct anyway, since they are not in the same state as the trunk. > The revision number is only useful in the context of the branch, so it > only matters when comparing versions within a branch. When you switch > between branches, if you're interested in the revision number you'll > still need to know which branch you're talking about. I think this is our main disagreement. I see all the branches as part of the same codebase, with monotonically increasing timestamp patch numbers. If you were to collapse all the commit snapshots down into a single chronological "virtual branch", it would still make sense, it would just be a bit unorganized. We do all try to move in the same general direction ;). > Switching between branches doesn't change the canonical version string. Different released code should have different version numbers. > > For example, when I upgraded to rich root to pull Ben's patch, I'm not > > sure if Chris upgraded the trunk and merged my branch, or just ditched > > the trunk and cloned my branch. Using actual bzr revision numbers > > would make switching branches that either wrong (in the case of rev-id > > decreases) or confusing (in the case of a single non-consecutive > > increase). > > This, then, is an argument for not having the revision number in the > version string at all. The version then becomes a more traditional > “major.minor.patch” tuple, and is only ever updated when some release > manager of the canonical branch decides it's correct to do so. It is an argument for not using the revision number. You can avoid revision numbers by using hand-coded patch numbers, or by using timestamps, which is what we're trying to decide on :p. > If we use the ‘bzr version-info --format=python > foo_version.py’ > command in some build routine, the branch's revision number will be > available directly within Python by importing that module. That would > allow it to be output in some UI, if that's what you're interested in > seeing. True. Which means that whichever version string wins out, the other side will still be able to access the info we both want included ;). We can certainly suggest that bug reporters submit their be --verbose-version when they submit bugs. The only role of the official "version string" is to make life easy for packagers. If they woln't be switching branches, then either of our proposals are fine. If they will, then I think timestamps work better. -- This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt values000066400000000000000000000004441205171247600375760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/f925e56f-26f9-4620-82fb-a0f160f27921{ "Alt-id": "<20090716103855.GA8579@mjolnir.home.net>", "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 16 Jul 2009 06:38:55 -0400", "In-reply-to": "fdb615a4-168a-467b-8090-875c998455e5" } f92c6180-0ed8-4acc-8ced-22995a0c016b/000077500000000000000000000000001205171247600366335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000001111205171247600375040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/f92c6180-0ed8-4acc-8ced-22995a0c016bVerdict: run releases.py periodically, and post the tarballs on the web. values000066400000000000000000000002411205171247600400520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/f92c6180-0ed8-4acc-8ced-22995a0c016b{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 20 Nov 2009 21:45:50 +0000" } fdb615a4-168a-467b-8090-875c998455e5/000077500000000000000000000000001205171247600363125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000051121205171247600371710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/fdb615a4-168a-467b-8090-875c998455e5"W. Trevor King" writes: > On Wed, Jul 15, 2009 at 12:54:05AM +1000, Ben Finney wrote: > > "W. Trevor King" writes: > > > > > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > > > Please, no. Timestamps aren't version strings, that's conflating > > > > two pieces of information with very different meanings. > > > > Correlating the two is the job of a [NEWS file]. > > > If you want a monotonically-increasing indicator of which revision > > we're up to, that's immediately available with the revision number > > from VCS on the main branch. That also has the advantage of > > producing consecutive numbers for each revision, by definition. > > But not during branch-switches, while my method skips large regions, > but probably increases during any reasonable branch-switch. I've read this several times now, and I don't see what it's saying. The assumption I'm making is that there is a single canonical “main branch”, from which releases will be made. The version number set in that branch is the one which determines the version of Bugs Everywhere as a whole. The revision number is only useful in the context of the branch, so it only matters when comparing versions within a branch. When you switch between branches, if you're interested in the revision number you'll still need to know which branch you're talking about. Switching between branches doesn't change the canonical version string. > For example, when I upgraded to rich root to pull Ben's patch, I'm not > sure if Chris upgraded the trunk and merged my branch, or just ditched > the trunk and cloned my branch. Using actual bzr revision numbers > would make switching branches that either wrong (in the case of rev-id > decreases) or confusing (in the case of a single non-consecutive > increase). This, then, is an argument for not having the revision number in the version string at all. The version then becomes a more traditional “major.minor.patch” tuple, and is only ever updated when some release manager of the canonical branch decides it's correct to do so. If we use the ‘bzr version-info --format=python > foo_version.py’ command in some build routine, the branch's revision number will be available directly within Python by importing that module. That would allow it to be output in some UI, if that's what you're interested in seeing. -- \ “Never do anything against conscience even if the state demands | `\ it.” —Albert Einstein | _o__) | Ben Finney values000066400000000000000000000004521205171247600375350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/fdb615a4-168a-467b-8090-875c998455e5{ "Alt-id": "<87d481ht1s.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Thu, 16 Jul 2009 19:32:31 +1000", "In-reply-to": "cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c" } ffbf5ac9-e2f5-47ab-9c3c-33989c81ad42/000077500000000000000000000000001205171247600370175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/commentsbody000066400000000000000000000034441205171247600377040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ffbf5ac9-e2f5-47ab-9c3c-33989c81ad42"W. Trevor King" writes: > On Tue, Jul 14, 2009 at 10:36:26PM +1000, Ben Finney wrote: > > Please, no. Timestamps aren't version strings, that's conflating two > > pieces of information with very different meanings. Correlating the > > two is the job of a changelog. > > Which we don't bother keeping (also NEWS), since "bzr log" works so > nicely. That's not a changelog, that's a commit log of every source-level commit made. Far too much detail for a changelog of *user-visible* changes associated with a release. > The timestamp should at least replace the patch release number, which > you agree is-desirable-to increase motonically ;). I still disagree that a timestamp is the right thing to use there. If you want a monotonically-increasing indicator of which revision we're up to, that's immediately available with the revision number from VCS on the main branch. That also has the advantage of producing consecutive numbers for each revision, by definition. > One problem is that we don't actually have "releases". People just > clone a branch, install, and go. I agree that's a problem. I think the solution is to start making releases, with specific version strings, as source tarballs. James Rowe writes: > Isn't there a bzr web interface that at least supports creating > tarballs/zips? Even better: ‘bzr export /tmp/foo.tar.gz’ will create a source tarball of all the files in the branch's VCS inventory. All we need to do is start the practice of tagging a release in the VCS, and export the tarball at that time. -- \ “Pinky, are you pondering what I'm pondering?” “Well, I think | `\ so (hiccup), but Kevin Costner with an English accent?” —_Pinky | _o__) and The Brain_ | Ben Finney values000066400000000000000000000004551205171247600402450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/ffbf5ac9-e2f5-47ab-9c3c-33989c81ad42{ "Alt-id": "<87k52bjoxe.fsf_-_@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Wed, 15 Jul 2009 00:54:05 +1000", "In-reply-to": "cdf15bdd-d3fe-4251-9d0b-f1b687e9a26c" } values000066400000000000000000000004511205171247600313120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c{ "creator": "W. Trevor King ", "reporter": "W. Trevor King ", "severity": "wishlist", "status": "fixed", "summary": "How should we version BE?", "time": "Tue, 21 Jul 2009 17:19:22 +0000" } 52a15454-196c-4990-b55d-be2e37d575c3/000077500000000000000000000000001205171247600275665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006651205171247600310170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52a15454-196c-4990-b55d-be2e37d575c3{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "open", "summary": "Fix the overflow problem in the comments.", "time": "Sat, 07 Feb 2009 21:32:51 +0000" } 545311df-8c88-4504-9f83-11d7c5d8aa50/000077500000000000000000000000001205171247600275665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314135ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa5088d54d29-7312-4bb3-bc50-1970bdb2bb0e/000077500000000000000000000000001205171247600362405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/commentsbody000066400000000000000000000001341205171247600371160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/comments/88d54d29-7312-4bb3-bc50-1970bdb2bb0eApparently the summary can only be one line. That makes the whitespace issue less relevant.values000066400000000000000000000002401205171247600374560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/comments/88d54d29-7312-4bb3-bc50-1970bdb2bb0e{ "Author": "Steve Losh ", "Content-type": "text/plain", "Date": "Sun, 01 Feb 2009 22:49:29 +0000" } values000066400000000000000000000007661205171247600310210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Implement bug updating (not comments). Check on the whitespace of the summary field while you're at it.", "time": "Sat, 31 Jan 2009 02:59:54 +0000" } 55e76f74-37fb-4254-8498-54b703ba54f6/000077500000000000000000000000001205171247600275275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006431205171247600307540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/55e76f74-37fb-4254-8498-54b703ba54f6{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", "TAG:CFBE" ], "severity": "minor", "status": "closed", "summary": "Fix the footer width.", "time": "Sat, 31 Jan 2009 03:01:09 +0000" } 56506b73-36cc-4e32-a578-258a219edba8/000077500000000000000000000000001205171247600276435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba80a995544-20dc-42a6-8d3f-348ebbc8921e/000077500000000000000000000000001205171247600362575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/commentsbody000066400000000000000000000013311205171247600371350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/comments/0a995544-20dc-42a6-8d3f-348ebbc8921eSince we'll be distributing a non-bzr-repo version, it would be nice to adapt our 'submit bug' procedure $ be new "The demuxulizer is broken" Created bug with ID 48f $ be comment 48f $ bzr commit --message "Reported bug in demuxulizer" $ bzr send --mail-to "be-devel@bugseverywhere.org" to one that works with this setup. Without guaranteed versioning, that would probably be something along the lines of $ be new "The demuxulizer is broken" Created bug with ID 48f $ be comment 48f $ be email-bugs [--to be-devel@bugseverywhere.org] 48f With interfaces/email/interactive listening on the recieving end to grab new-bug emails and import them into an incoming bug repository. values000066400000000000000000000002411205171247600374760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/comments/0a995544-20dc-42a6-8d3f-348ebbc8921e{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 20 Nov 2009 13:31:25 +0000" } 4068c833-0c06-475e-8b7e-6701bc416dee/000077500000000000000000000000001205171247600361765ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/commentsbody000066400000000000000000000026461205171247600370660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/comments/4068c833-0c06-475e-8b7e-6701bc416dee> With interfaces/email/interactive listening on the recieving end to > grab new-bug emails and import them into an incoming bug repository. The email-bugs -> be-handle-mail import is based on `be import-xml`. The current import-xml implementation allows good control over what gets overwritten during a merge by overriding only those fields defined in the incoming XML. For clients without the versioned bugdir (e.g. they installed via a release tarball or their distro's packaging system), `be email-bugs` will not know what fields have been changed/added/etc., so it sets _all_ the fields in the outgoing XML. Importing that XML file will override any changes that may have been made to the listed bugs/comments between the release and your current source version, so you may have to do some manual tweaking of the post-merge bugdir. One possible workaround would be to change the merge algorithm in import-xml to take advantage of version information given in the XML file. import-xml could checkout the shared root version of any modified bugs, and compute the changes made by the remote user and those made in the local tree. It could then merge these changes more intelligently, by prompting the user, keeping the local changes, keeping the remote changes, etc. While the more automated approach might be better, it's also more complicated, so for now we'll stick with the simple "override all fields defined in the XML" approach. values000066400000000000000000000003431205171247600374200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8/comments/4068c833-0c06-475e-8b7e-6701bc416dee{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 29 Nov 2009 01:19:05 +0000", "In-reply-to": "0a995544-20dc-42a6-8d3f-348ebbc8921e" } values000066400000000000000000000005011205171247600310610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/56506b73-36cc-4e32-a578-258a219edba8{ "creator": "W. Trevor King ", "reporter": "W. Trevor King ", "severity": "minor", "status": "fixed", "summary": "be email-bugs for bug submission from bzr-less users", "time": "Fri, 20 Nov 2009 13:26:59 +0000" } 576e804a-8b76-4876-8e9d-d7a72b0aef10/000077500000000000000000000000001205171247600277415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef1072dab0c4-f04d-4ff0-9319-f55aafaea627/000077500000000000000000000000001205171247600366425ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/commentsbody000066400000000000000000000000631205171247600375210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/72dab0c4-f04d-4ff0-9319-f55aafaea627Hello world values000066400000000000000000000003421205171247600400630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/72dab0c4-f04d-4ff0-9319-f55aafaea627{ "Author": "W. Trevor King ", "Content-type": "text/html", "Date": "Mon, 22 Jun 2009 20:05:00 +0000", "In-reply-to": "c454aa67-ca30-43e8-9be4-58cbddd01b63" } c454aa67-ca30-43e8-9be4-58cbddd01b63/000077500000000000000000000000001205171247600365615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/commentsbody000066400000000000000000000023651205171247600374470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/c454aa67-ca30-43e8-9be4-58cbddd01b63Excerpt from my mail to the list on Sat, 20 Jun 2009 21:55:54 -0400: On Mon, Nov 24, 2008 at 07:15:08PM -0500, Aaron Bentley wrote: > 576:om: Allow attachments > Sensible. I'm not as convinced they are a good idea as I once was. I've just added comments-from-stdin, e.g. some-invalid-command | be comment - Which is mostly what I'd be using attachments for anyway. If you really want to support the attachments/mime-types etc. like we had maybe been leaning towards before, you'd need to look at the output of `be show ...' with an email client, which seems a bit excessive. Do we even want mime types at all? With the xml output a la Thomas, you should be able to pipe into whatever sort of `viewer' you want, and it doesn't end up being hardcoded into the main repo. Notes since my email: be->xml->mutt has since been implemented, and it preserves comment mime-type. This allows those that want to go crazy to attach whatever they want to their comments: $ echo "Hello world" | be comment --content-type text/html 576:2 - I think non-text attachments without a browser/mail-viewer don't make sense, so I'm closing this bug. Feel free to keep it open in your own repo, or argue with me on the list ;). values000066400000000000000000000003431205171247600400030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/c454aa67-ca30-43e8-9be4-58cbddd01b63{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Mon, 22 Jun 2009 20:03:27 +0000", "In-reply-to": "d83a5436-85e3-42c7-9a89-a6d50df9d279" } d83a5436-85e3-42c7-9a89-a6d50df9d279/000077500000000000000000000000001205171247600363245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/commentsbody000066400000000000000000000001731205171247600372050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/d83a5436-85e3-42c7-9a89-a6d50df9d279I've added comments-from-stdin, so we can add tracebacks, e.g. with $ be list --invalid-option | be comment - values000066400000000000000000000002411205171247600375430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10/comments/d83a5436-85e3-42c7-9a89-a6d50df9d279{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 19 Jun 2009 20:22:19 +0000" } values000066400000000000000000000003121205171247600311570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/576e804a-8b76-4876-8e9d-d7a72b0aef10{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Allow attachments", "time": "Wed, 25 Jan 2006 15:43:46 +0000" } 5920ef40-ce56-44e0-9e2d-e9b888ab2880/000077500000000000000000000000001205171247600277375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab28801b21dabc-a90c-4687-bea0-7e9e69956e23/000077500000000000000000000000001205171247600365145ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/commentsbody000066400000000000000000000001751205171247600373770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/comments/1b21dabc-a90c-4687-bea0-7e9e69956e23> libbe.mapfile.IllegalValue: Illegal value "Foo Bar \n" The trailing endline was the problem. Fixed now. values000066400000000000000000000003431205171247600377360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/comments/1b21dabc-a90c-4687-bea0-7e9e69956e23{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Wed, 19 May 2010 11:16:23 +0000", "In-reply-to": "285006ba-16fc-4d09-86f1-893ff515e487" } 285006ba-16fc-4d09-86f1-893ff515e487/000077500000000000000000000000001205171247600362305ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/commentsbody000066400000000000000000000003451205171247600371120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/comments/285006ba-16fc-4d09-86f1-893ff515e487If I have just "foo@example.com" in _darcs/prefs/author, be is perfectly happy. But having instead "Foo Bar " causes this error on be new: libbe.mapfile.IllegalValue: Illegal value "Foo Bar \n" values000066400000000000000000000002351205171247600374520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880/comments/285006ba-16fc-4d09-86f1-893ff515e487{ "Author": "Eric Kow ", "Content-type": "text/plain", "Date": "Mon, 29 Mar 2010 15:52:53 +0000" } values000066400000000000000000000004621205171247600311630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5920ef40-ce56-44e0-9e2d-e9b888ab2880{ "creator": "Eric Kow ", "reporter": "Eric Kow ", "severity": "minor", "status": "fixed", "summary": "Fancy _darcs/prefs/author contents confuse be", "time": "Mon, 29 Mar 2010 15:50:39 +0000" } 597a7386-643f-4559-8dc4-6871924229b6/000077500000000000000000000000001205171247600273245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600311515ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b68015d736-f3ea-4085-940c-552c01a287ef/000077500000000000000000000000001205171247600355735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/commentsbody000066400000000000000000000000641205171247600364530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/comments/8015d736-f3ea-4085-940c-552c01a287efMerged into bug 09f84059-fc8e-4954-b24d-a2b33ef21bf4values000066400000000000000000000002411205171247600370120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/comments/8015d736-f3ea-4085-940c-552c01a287ef{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Thu, 04 Dec 2008 13:35:42 +0000" } eff20807-07f0-444d-8992-f69ab3f526c5/000077500000000000000000000000001205171247600356755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/commentsbody000066400000000000000000000001671205171247600365610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/comments/eff20807-07f0-444d-8992-f69ab3f526c5This is an *rst* comment. Which means newlines don't matter, except when they gang up. lala - Bullet - Bulletvalues000066400000000000000000000002171205171247600371170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6/comments/eff20807-07f0-444d-8992-f69ab3f526c5{ "Author": "abentley", "Content-type": "text/restructured", "Date": "Thu, 06 Apr 2006 16:54:57 +0000" } values000066400000000000000000000003011205171247600305400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597a7386-643f-4559-8dc4-6871924229b6{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "RST test", "time": "Thu, 06 Apr 2006 16:52:46 +0000" } 597b03f5-76cb-4951-b370-a01573ad2f75/000077500000000000000000000000001205171247600275575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314045ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f750922b8f7-b5ce-4572-8e55-c4b34dafe6cf/000077500000000000000000000000001205171247600364225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/commentsbody000066400000000000000000000002651205171247600373050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/0922b8f7-b5ce-4572-8e55-c4b34dafe6cfHello! --- 8< --- $ be comment b35 ERROR: No comment supplied, and EDITOR not specified. --- >8 --- When EDITOR enviroment variable not set try to use vi editor as default editor values000066400000000000000000000003521205171247600376440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/0922b8f7-b5ce-4572-8e55-c4b34dafe6cf{ "Alt-id": "<201003161610.10674.antonbatenev@yandex.ru>", "Author": "Anton Batenev ", "Content-type": "text/plain", "Date": "Tue, 16 Mar 2010 20:10:10 +0000" } 212570d2-8116-462e-9664-9ea8d3976b99/000077500000000000000000000000001205171247600356405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/commentsbody000066400000000000000000000000601205171247600365140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/212570d2-8116-462e-9664-9ea8d3976b99I agree with Ben. Setting status to "wontfix". values000066400000000000000000000003431205171247600370620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/212570d2-8116-462e-9664-9ea8d3976b99{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Fri, 19 Mar 2010 06:17:38 +0000", "In-reply-to": "5e8d490e-ee06-4403-96dd-ad8eac66b21c" } 5e8d490e-ee06-4403-96dd-ad8eac66b21c/000077500000000000000000000000001205171247600364135ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/commentsbody000066400000000000000000000011151205171247600372710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/5e8d490e-ee06-4403-96dd-ad8eac66b21cAnton Batenev writes: > --- 8< --- > $ be comment b35 > ERROR: > No comment supplied, and EDITOR not specified. > --- >8 --- > > When EDITOR enviroment variable not set try to use vi editor as > default editor -1. It's up to the local operating system configuration to set a default EDITOR value, and up to the user to over-ride that if they want to. An application shouldn't be guessing in the absence of those conventions. The behaviour is clear and the message provides a way for the user to rectify the problem in a standard way. It doesn't need to change. values000066400000000000000000000004611205171247600376360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75/comments/5e8d490e-ee06-4403-96dd-ad8eac66b21c{ "Alt-id": "<877hp9w0zy.fsf@benfinney.id.au>", "Author": "Ben Finney ", "Content-type": "text/plain", "Date": "Fri, 19 Mar 2010 16:31:29 +0000", "In-reply-to": "<201003161610.10674.antonbatenev@yandex.ru>" } values000066400000000000000000000004651205171247600310060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/597b03f5-76cb-4951-b370-a01573ad2f75{ "creator": "W. Trevor King ", "reporter": "Anton Batenev ", "severity": "minor", "status": "wontfix", "summary": "Set a default EDITOR incase the user has not", "time": "Fri, 19 Mar 2010 06:11:12 +0000" } 5fb11e65-68a0-4015-b404-737238299cdc/000077500000000000000000000000001205171247600274755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc628a050a-f969-4290-8468-f5e991528f40/000077500000000000000000000000001205171247600355575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/commentsbody000066400000000000000000000006311205171247600364370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/628a050a-f969-4290-8468-f5e991528f40Either of these could be added at the libbe.command.base.Command.run level. The Git hooks would be 'pre-' and 'post-'. Oh, and the hooks are therefore command-level hooks, not storage-level hooks. We still want storage-level hooks for notification emails, etc, and they would definately have to follow the Git directory approach. Hmm. Storage level hooks will be awkward... values000066400000000000000000000003431205171247600370010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/628a050a-f969-4290-8468-f5e991528f40{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sun, 31 Jan 2010 18:04:49 +0000", "In-reply-to": "f3e90a7e-b8c4-4a7c-8609-6a783ae59762" } 89d53fa4-635d-4562-adaa-cd04b6c80fcf/000077500000000000000000000000001205171247600364045ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/commentsbody000066400000000000000000000004511205171247600372640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/89d53fa4-635d-4562-adaa-cd04b6c80fcf> We still want storage-level hooks for notification emails, etc, The new `be serve --notify ...` is effectively a command-specific storage-level hook (for storage actions that change the repository). If it seems to be working out well, we can move the logic down into the base storage classes. values000066400000000000000000000003471205171247600376320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/89d53fa4-635d-4562-adaa-cd04b6c80fcf{ "Author": "\"W. Trevor King\" ", "Content-type": "text/plain", "Date": "Sun, 17 Apr 2011 02:05:09 +0000", "In-reply-to": "628a050a-f969-4290-8468-f5e991528f40" } f3e90a7e-b8c4-4a7c-8609-6a783ae59762/000077500000000000000000000000001205171247600361345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/commentsbody000066400000000000000000000010561205171247600370160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/f3e90a7e-b8c4-4a7c-8609-6a783ae59762Provide hooks so users can easily setup auto-commits, subscriber notification, etc. Probably either Darcs-style options: $ be COMMAND --help ... --posthook=COMMAND Specify command to run after this command. --no-posthook Do not run posthook command. --prompt-posthook Prompt before running posthook. [DEFAULT] --run-posthook Run posthook command without prompting. ... or a Git-style hooks directory: $ tree .be .be/ |-- version |-- hooks . |-- post-commit.sh . |-- pre-commit.sh `-- update.sh values000066400000000000000000000002411205171247600373530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc/comments/f3e90a7e-b8c4-4a7c-8609-6a783ae59762{ "Author": "W. Trevor King ", "Content-type": "text/plain", "Date": "Sat, 23 Jan 2010 19:17:10 +0000" } values000066400000000000000000000006241205171247600307210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/5fb11e65-68a0-4015-b404-737238299cdc{ "creator": "W. Trevor King ", "extra_strings": [ "BLOCKS:52034fd0-ec50-424d-b25d-2beaf2d2c317" ], "reporter": "W. Trevor King ", "severity": "minor", "status": "open", "summary": "Add change hooks to Storage class", "time": "Sat, 23 Jan 2010 19:08:40 +0000" } 615ad650-9fb9-4026-9779-58d42b4e528e/000077500000000000000000000000001205171247600275275ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006711205171247600307550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/615ad650-9fb9-4026-9779-58d42b4e528e{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "open", "summary": "Figure out how to best fix the column widths.", "time": "Sat, 31 Jan 2009 03:07:32 +0000" } 62a74b85-0d4b-49f5-8794-74bafd871cd4/000077500000000000000000000000001205171247600277435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003261205171247600311660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/62a74b85-0d4b-49f5-8794-74bafd871cd4{ "creator": "abentley", "severity": "minor", "status": "closed", "summary": "Indicate presence of Comments", "time": "Wed, 25 Jan 2006 15:18:58 +0000" } 63619cf7-89eb-4e64-91e9-b8a73d2a6c72/000077500000000000000000000000001205171247600277515ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006361205171247600312000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/63619cf7-89eb-4e64-91e9-b8a73d2a6c72{ "assigned": "Steve Losh ", "creator": "Steve Losh ", "extra_strings": [ "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", "TAG:CFBE" ], "severity": "minor", "status": "open", "summary": "Implement sorting.", "time": "Sat, 31 Jan 2009 02:59:11 +0000" } 64ccf451-b61c-491f-aa68-0ac1b5dbfa6d/000077500000000000000000000000001205171247600302625ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600321075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/64ccf451-b61c-491f-aa68-0ac1b5dbfa6d232cc363-ba55-4557-9840-3451d74e7b6d/000077500000000000000000000000001205171247600364565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/64ccf451-b61c-491f-aa68-0ac1b5dbfa6d/commentsbody000066400000000000000000000005771205171247600373470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/64ccf451-b61c-491f-aa68-0ac1b5dbfa6d/comments/232cc363-ba55-4557-9840-3451d74e7b6dThe make install will curently install the bin files in ~/bin and the lib files in ~/lib. Unfortunately this will lead to the lib files not being recognised by python by default. http://www.python.org/dev/peps/pep-0370/ defines that the paths should be set to '~/.local/bin' and '~/.local/lib'. Here they will also be automatically discoverable by python. (At least on Ubuntu 10.10) values000066400000000000000000000003241205171247600376770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/64ccf451-b61c-491f-aa68-0ac1b5dbfa6d/comments/232cc363-ba55-4557-9840-3451d74e7b6d{ "Alt-id": "e9ef9fdd-4d0e-4438-a23d-6658eae9b349", "Author": "dietmarw ", "Content-type": "text/plain", "Date": "Tue, 01 Feb 2011 21:52:29 +0000" } values000066400000000000000000000004431205171247600315050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/64ccf451-b61c-491f-aa68-0ac1b5dbfa6d{ "creator": "dietmarw ", "reporter": "dietmarw ", "severity": "minor", "status": "fixed", "summary": "Set default user paths according to PEP370", "time": "Tue, 01 Feb 2011 21:41:27 +0000" } 65776f00-34d8-4b58-874d-333196a5e245/000077500000000000000000000000001205171247600273605ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003161205171247600306020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/65776f00-34d8-4b58-874d-333196a5e245{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Select severity filter", "time": "Wed, 04 Jan 2006 21:07:08 +0000" } 6622c06a-ed84-4d45-8011-a082fca219b6/000077500000000000000000000000001205171247600276225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003501205171247600310420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6622c06a-ed84-4d45-8011-a082fca219b6{ "creator": "abentley", "severity": "minor", "status": "fixed", "summary": "Better word wrapping in comments. (kill
.)", 






    "time": "Mon, 30 Jan 2006 20:03:25 +0000"






}
68ba7f0c-ca5f-4f49-a508-e39150c07e13/000077500000000000000000000000001205171247600277765ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/68ba7f0c-ca5f-4f49-a508-e39150c07e13be64734c-d9a8-4f6d-83eb-e9b6c9adc0bf/000077500000000000000000000000001205171247600370665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/68ba7f0c-ca5f-4f49-a508-e39150c07e13/commentsbody000066400000000000000000000001341205171247600377440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/68ba7f0c-ca5f-4f49-a508-e39150c07e13/comments/be64734c-d9a8-4f6d-83eb-e9b6c9adc0bfPer-tree severity and target are now supported.

I'm not sure what Aaron meant be "BE ids".
values000066400000000000000000000002411205171247600403050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/68ba7f0c-ca5f-4f49-a508-e39150c07e13/comments/be64734c-d9a8-4f6d-83eb-e9b6c9adc0bf{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 17:29:30 +0000"






}
values000066400000000000000000000002741205171247600312230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/68ba7f0c-ca5f-4f49-a508-e39150c07e13{






    "creator": "abentley", 






    "severity": "wishlist", 






    "status": "closed", 






    "summary": "Support per-tree settings for severity, target, BE ids"






}
6d1f1d5b-793e-4410-9ca4-b242ab82fa61/000077500000000000000000000000001205171247600277635ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004371205171247600312110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6d1f1d5b-793e-4410-9ca4-b242ab82fa61{






    "creator": "Mat\u011bj Cepl ", 






    "reporter": "Mat\u011bj Cepl ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Wrong .gitignore", 






    "time": "Mon, 02 Jan 2012 14:42:57 +0000"






}
6eb8141f-b0b1-4d5b-b4e6-d0860d844ada/000077500000000000000000000000001205171247600301215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317465ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6eb8141f-b0b1-4d5b-b4e6-d0860d844adaf2011471-56cb-46e2-813b-1ac336ee7bbc/000077500000000000000000000000001205171247600365675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6eb8141f-b0b1-4d5b-b4e6-d0860d844ada/commentsbody000066400000000000000000000001211205171247600374410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6eb8141f-b0b1-4d5b-b4e6-d0860d844ada/comments/f2011471-56cb-46e2-813b-1ac336ee7bbc    On a new bug, if I add comment then click "Update", the Summary goes missing!values000066400000000000000000000002101205171247600400020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6eb8141f-b0b1-4d5b-b4e6-d0860d844ada/comments/f2011471-56cb-46e2-813b-1ac336ee7bbc{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Fri, 27 Jan 2006 14:30:26 +0000"






}
values000066400000000000000000000004251205171247600313440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/6eb8141f-b0b1-4d5b-b4e6-d0860d844ada{






    "creator": "abentley", 






    "severity": "serious", 






    "status": "closed", 






    "summary": "On a new bug, if I add or edit a comment, then click \"Update\", the Summary goes missing.", 






    "time": "Fri, 27 Jan 2006 14:29:51 +0000"






}
700cd3f1-70b6-4887-89a2-c1d039732add/000077500000000000000000000000001205171247600276365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006411205171247600310610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/700cd3f1-70b6-4887-89a2-c1d039732add{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "Implement pagination.", 






    "time": "Sat, 31 Jan 2009 03:00:35 +0000"






}
73a767f4-75e7-4cde-9e24-91bff99ab428/000077500000000000000000000000001205171247600300375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002261205171247600312610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/73a767f4-75e7-4cde-9e24-91bff99ab428{






    "creator": "abentley", 






    "severity": "serious", 






    "status": "fixed", 






    "summary": "implement comments"






}
74cccfbf-069d-4e99-8cab-adaa35f9a2eb/000077500000000000000000000000001205171247600305255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002221205171247600317430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/74cccfbf-069d-4e99-8cab-adaa35f9a2eb{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Can't close bugs"






}
764b812f-a0bb-4f4d-8e2f-c255c9474a0e/000077500000000000000000000000001205171247600300575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000005041205171247600313000ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/764b812f-a0bb-4f4d-8e2f-c255c9474a0e{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Add docstrings explaining role of the libbe submodules.", 






    "time": "Mon, 31 Aug 2009 13:57:54 +0000"






}
76a6140e-0800-453c-9720-29cc161663d1/000077500000000000000000000000001205171247600273235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000023671205171247600305550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/76a6140e-0800-453c-9720-29cc161663d1{






    "creator": "W. Trevor King ", 






    "extra_strings": [






        "BLOCKED-BY:04edb940-06dd-4ded-8697-156d54a1d875", 






        "BLOCKED-BY:0a234f51-2fdf-4001-a04f-b7e02c2fa47b", 






        "BLOCKED-BY:0be47243-c172-4de9-b71b-d5dea60f91d5", 






        "BLOCKED-BY:24555ea1-76b5-40a8-918f-115a28f5f36a", 






        "BLOCKED-BY:312fb152-0155-45c1-9d4d-f49dd5816fbb", 






        "BLOCKED-BY:52a15454-196c-4990-b55d-be2e37d575c3", 






        "BLOCKED-BY:615ad650-9fb9-4026-9779-58d42b4e528e", 






        "BLOCKED-BY:63619cf7-89eb-4e64-91e9-b8a73d2a6c72", 






        "BLOCKED-BY:700cd3f1-70b6-4887-89a2-c1d039732add", 






        "BLOCKED-BY:81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9", 






        "BLOCKED-BY:866cba32-4347-4f51-9b1d-69454638ca78", 






        "BLOCKED-BY:9bc14860-b2bb-4442-85ea-0b8e7083457b", 






        "BLOCKED-BY:cfb52b6c-d1a6-4018-a255-27cc1c878193", 






        "BLOCKED-BY:dd7aa57c-f184-495a-8520-2676c1066fb4", 






        "BLOCKED-BY:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "target", 






    "status": "open", 






    "summary": "beta", 






    "time": "Sun, 06 Dec 2009 07:14:32 +0000"






}
77399855-6300-41a8-91a3-decbb915a3ff/000077500000000000000000000000001205171247600276505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004051205171247600310710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/77399855-6300-41a8-91a3-decbb915a3ff{






    "extra_strings": [






        "BLOCKED-BY:27549110-e491-4651-81ab-84de2ed8e14a"






    ], 






    "severity": "target", 






    "status": "fixed", 






    "summary": "1.0", 






    "time": "Thu, 24 Jun 2010 22:19:20 +0000"






}
7ba4bc51-b251-483a-a67a-f1b89c83f6af/000077500000000000000000000000001205171247600301345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6afdb2c18d9-9573-4d68-88a5-ee47ed24b813/000077500000000000000000000000001205171247600365735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/commentsbody000066400000000000000000000000741205171247600374540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/comments/db2c18d9-9573-4d68-88a5-ee47ed24b813The commands that can easily be tested are now being tested
values000066400000000000000000000002101205171247600400060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/comments/db2c18d9-9573-4d68-88a5-ee47ed24b813{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Thu, 24 Mar 2005 17:04:47 +0000"






}
ec16300f-529a-4492-8327-f9a72e4447c2/000077500000000000000000000000001205171247600363325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/commentsbody000066400000000000000000000002511205171247600372100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/comments/ec16300f-529a-4492-8327-f9a72e4447c2We've got coverage of set_root and new.  This leaves
close, comment, list, open, severity, show, target, upgrade

It's quite nice, though, that doctest captures stdout.
values000066400000000000000000000002101205171247600375450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af/comments/ec16300f-529a-4492-8327-f9a72e4447c2{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Thu, 24 Mar 2005 13:05:13 +0000"






}
values000066400000000000000000000002221205171247600313520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ba4bc51-b251-483a-a67a-f1b89c83f6af{






    "creator": "abentley", 






    "severity": "serious", 






    "status": "fixed", 






    "summary": "Add test cases"






}
7bfc591e-584a-476e-8e11-b548f1afcaa6/000077500000000000000000000000001205171247600301505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa62f6b71c5-45b3-473f-bd14-a1fe41bafcee/000077500000000000000000000000001205171247600371255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/commentsbody000066400000000000000000000000631205171247600400040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/comments/2f6b71c5-45b3-473f-bd14-a1fe41bafceeFixed at least by commit 273, probably way before.
values000066400000000000000000000002411205171247600403440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/comments/2f6b71c5-45b3-473f-bd14-a1fe41bafcee{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 24 Nov 2008 13:08:07 +0000"






}
5a6b44f5-9d1d-4e2e-a42c-f5423c43a1dc/000077500000000000000000000000001205171247600367645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/commentsbody000066400000000000000000000000721205171247600376430ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/comments/5a6b44f5-9d1d-4e2e-a42c-f5423c43a1dcIt's hard to report bugs if you can't even get it working.values000066400000000000000000000002101205171247600401770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6/comments/5a6b44f5-9d1d-4e2e-a42c-f5423c43a1dc{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Wed, 21 Dec 2005 21:53:47 +0000"






}
values000066400000000000000000000003331205171247600313710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7bfc591e-584a-476e-8e11-b548f1afcaa6{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "no tests for --help, -h, help, etc.", 






    "time": "Tue, 17 May 2005 13:27:18 +0000"






}
7cb42a60-c977-40db-b2a1-19917c10cace/000077500000000000000000000000001205171247600300355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316625ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cacea555d577-7f8c-49f2-96f6-263ce5fdff8e/000077500000000000000000000000001205171247600366575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/commentsbody000066400000000000000000000014611205171247600375410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/comments/a555d577-7f8c-49f2-96f6-263ce5fdff8eUsage case:
  * User A installs version 1.0 which contains bug /abc.
  * Development continues, fixing bug /abc.
  * User A wants to see which bugs affect their version, and query the
    main bug repository.
      $ be --repo http://bugseverywhere.org/bugs list --this-version
      bea/abc:om: Whatsit not implemented.
      $ be --repo http://bugseverywhere.org/bugs show bea/abc
                ID : abc...
        Short name : bea/abc
          Severity : minor
            Status : fixed
	    ...
      Whatsit not implemented.
      --------- Comment ---------
      Name: bea/abc/def
      From: ...
      Date: Sat, 23 Jan 2010 14:00 ...
      
      Whatsit implemented.
    "Aha!", says the user, "I need to upgrade to a version of BE
    that's more recent than 2010/01/23 to get Whatsit functionality."

values000066400000000000000000000002411205171247600400760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/comments/a555d577-7f8c-49f2-96f6-263ce5fdff8e{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 23 Jan 2010 18:59:03 +0000"






}
d533d72f-2365-4309-a2bb-6bae269235fe/000077500000000000000000000000001205171247600364425ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/commentsbody000066400000000000000000000004371205171247600373260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/comments/d533d72f-2365-4309-a2bb-6bae269235feThis would require snapshotting the current BE bugdir on
packaging/installation.  Easy enough to do, but usage should probably be
  be --repo INSTALLED
or
  be --installed
to load the snapshot bugdir.

I'm not sure if we actually want to do this, so I'm demoting the issue
to wishlist.

values000066400000000000000000000003471205171247600376700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace/comments/d533d72f-2365-4309-a2bb-6bae269235fe{






    "Author": "\"W. Trevor King\" ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 15 Jul 2010 12:08:54 +0000", 






    "In-reply-to": "a555d577-7f8c-49f2-96f6-263ce5fdff8e"






}
values000066400000000000000000000005211205171247600312550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7cb42a60-c977-40db-b2a1-19917c10cace{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "wishlist", 






    "status": "open", 






    "summary": "`be list --this-version` listing bugs affecting your version of BE", 






    "time": "Sat, 23 Jan 2010 18:49:03 +0000"






}
7d182ab9-9c0c-4b4f-885e-c5762d7a2437/000077500000000000000000000000001205171247600277355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002471205171247600311620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7d182ab9-9c0c-4b4f-885e-c5762d7a2437{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "BEweb fails to set bug creation date"






}
7ec2c071-9630-42b0-b08a-9854616f9144/000077500000000000000000000000001205171247600274175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600312445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144401950a0-a5ff-46f3-afac-a9cfb300f94b/000077500000000000000000000000001205171247600363105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000026661205171247600372020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/401950a0-a5ff-46f3-afac-a9cfb300f94bIn my Tue, 25 Nov 2008 08:30:19 -0500 email: 

Implemented as a free-form value field similar to target?  A
comma-seperated list of tags?  Perhaps once we have per-bug/comment
attribute searching it would be easier to have a 'create-attribute'
becommand, e.g.
  be create-attribute [-valid=X,Y,Z] [bugdir|bug|comment] [NAME] [DEFAULT]

We could ship some suggested configuration scripts to set people up,
and keep the core code more general/flexible.


Plan:

Extend and make more consitent the settings_property() attributes.
Create becommand/(create/remove)-attribute for logic-less attributes.
Create a few mix-ins for logic-ed attributes

Usage example:
  Goal:
    set up for `be depends BUGA BUGB`, `be depends --tree BUGA`, etc
  Procedure:
    be set --apend mixins bug:dependency
  Where we've defined
    becommands/depends.py, but it is hidden until the mixin is activated
    libbe/mixins/bug/dependency.Mixin (inheriting from BugMixin)
      to
        parse/generate comma seperated dependency uuids for saving/loading
        pretty-print the dependency list (e.g. uuid->shortname)
        walk the dependency tree and check target bug status.

With more complicated mixins, there could be inter-mixin dependencies,
e.g. a dependency tracker that searches depends based on bug.status
might depend on the base dependency mixin.  This way people who need
it could make rich interfaces without confusing the people who don't.

How does that sound?


values000066400000000000000000000002411205171247600375270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/401950a0-a5ff-46f3-afac-a9cfb300f94b{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:39:39 +0000"






}
6010e186-0260-44e5-8442-8df2269910ce/000077500000000000000000000000001205171247600354455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000003111205171247600363200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/6010e186-0260-44e5-8442-8df2269910ceIt's tricky to say whether we should have dependencies or reverse dependencies
or both.

In the case where a bug is removed, normal dependencies mean that its
dependencies are erased from this system.
values000066400000000000000000000003121205171247600366630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/6010e186-0260-44e5-8442-8df2269910ce{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Mon, 17 Apr 2006 20:59:15 +0000", 






    "In-reply-to": "f87fd684-6af1-498d-98d5-f915bcee76a9"






}
80780fa9-69f8-438c-8fbf-5a702b3badc1/000077500000000000000000000000001205171247600362025ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000001261205171247600370610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/80780fa9-69f8-438c-8fbf-5a702b3badc1Arbitrary tagging now supported via `be tag'.
Dependencies supported via `be depend'.
values000066400000000000000000000002411205171247600374210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/80780fa9-69f8-438c-8fbf-5a702b3badc1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 25 Jun 2009 12:39:26 +0000"






}
bb988ed4-d3d5-4e49-b67e-c7ccb8ae44d3/000077500000000000000000000000001205171247600364325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000036511205171247600373170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/bb988ed4-d3d5-4e49-b67e-c7ccb8ae44d3From my Tue, 25 Nov 2008 13:27:12 -0500 email:

> >> 7ec:om: Arbitrary tags
> >> Sensible
> >
> > Implemented as a free-form value field similar to target?  A
> > comma-seperated list of tags?
>

That is a much better format than my unmergable one ;).

> "append" usually has two "p"s.  Is the omission deliberate?

Nope, sorry :p

> It sounds pretty complicated.  I would probably use a type system rather
> than "mixins", and define types as "scalar", "set" and maybe "list" and
> "map".  Dependencies would be a set, and their special behaviour would
> be hardcoded according to their name, not a property of their type.

Ok.  I'm just worried about bloat.  It's pretty easy to move things
around at the moment, but I'm worried that adding lots of attributes
with special code will start a slippery slope of trying to satisfy
everybody internally.  Then things start looking more like Arch, with
newbies scared off by the confusion.  I know the Arch people like the
power, but it took me several hours to figure out how to create a
repository ;).  Some people like bug dependencies, and some do not
  e.g.
    https://bugs.launchpad.net/malone/+bug/95419
    http://trac.edgewall.org/ticket/31

From the *long* Trac post, you can see that this is divisive issue.

I would be in favor of emulating TracCrossReferences
(http://trac.edgewall.org/wiki/TracCrossReferences) in our core.  We
could have references and backlinks fields for bugs (and comments?).
But I'd rather not add blocking, etc.  However, having a seperate
plugin obviously doesn't work for some people ;).  We'd like to bundle
lots of functionality, but keep the core fairly clean and flexible.

Therefore, I'd like a way to put non-core implememtation code in a
seperate submod.  We already call our libbe code "plugins", and we're
extending the builtin BugDir, Bug, etc code, so I thought we'd call
the non-core submods mixins (see http://en.wikipedia.org/wiki/Mixin).

Anyhow, just my 2c.

values000066400000000000000000000003431205171247600376540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/bb988ed4-d3d5-4e49-b67e-c7ccb8ae44d3{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:42:12 +0000", 






    "In-reply-to": "ec133a4e-c9ff-4499-b469-cb0a2ca9a685"






}
c2b78df3-641a-4d4d-ba94-33b26eda6364/000077500000000000000000000000001205171247600361635ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000001441205171247600370420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/c2b78df3-641a-4d4d-ba94-33b26eda6364This could be implemented with an external frontend storing the
dependency data in arbitrary tags.

values000066400000000000000000000003431205171247600374050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/c2b78df3-641a-4d4d-ba94-33b26eda6364{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 21:29:13 +0000", 






    "In-reply-to": "f87fd684-6af1-498d-98d5-f915bcee76a9"






}
ec133a4e-c9ff-4499-b469-cb0a2ca9a685/000077500000000000000000000000001205171247600362605ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000042201205171247600371360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/ec133a4e-c9ff-4499-b469-cb0a2ca9a685In Aaron's Tue, 25 Nov 2008 09:32:29 -0500 email:

>> 7ec:om: Arbitrary tags
>> Sensible
>
> Implemented as a free-form value field similar to target?  A
> comma-seperated list of tags?

I believe I planned to store it as an alpha-sorted, one-entry-per-line
list, so it would support merging easily.

>  Perhaps once we have per-bug/comment
> attribute searching it would be easier to have a 'create-attribute'
> becommand, e.g.
>   be create-attribute [-valid=X,Y,Z] [bugdir|bug|comment] [NAME] [DEFAULT]

Well, it really depends how much semantics you want to embed in the data
format.  Some values are scalars, some may be sets (i.e. tags), some may
be ordered lists or even mappings.  How much you want to reflect that in
the data format is up to you.

> Extend and make more consitent the settings_property() attributes.
> Create becommand/(create/remove)-attribute for logic-less attributes.
> Create a few mix-ins for logic-ed attributes

I don't find the term mix-in very intuitive here.

> Usage example:
>   Goal:
>     set up for `be depends BUGA BUGB`, `be depends --tree BUGA`, etc
>   Procedure:
>     be set --apend mixins bug:dependency

"append" usually has two "p"s.  Is the omission deliberate?

>   Where we've defined
>     becommands/depends.py, but it is hidden until the mixin is activated
>     libbe/mixins/bug/dependency.Mixin (inheriting from BugMixin)
>       to
>       parse/generate comma seperated dependency uuids for saving/loading
>       pretty-print the dependency list (e.g. uuid->shortname)
>       walk the dependency tree and check target bug status.
>
> With more complicated mixins, there could be inter-mixin dependencies,
> e.g. a dependency tracker that searches depends based on bug.status
> might depend on the base dependency mixin.  This way people who need
> it could make rich interfaces without confusing the people who don't.
>
> How does that sound?

It sounds pretty complicated.  I would probably use a type system rather
than "mixins", and define types as "scalar", "set" and maybe "list" and
"map".  Dependencies would be a set, and their special behaviour would
be hardcoded according to their name, not a property of their type.

values000066400000000000000000000003431205171247600375020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/ec133a4e-c9ff-4499-b469-cb0a2ca9a685{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:40:54 +0000", 






    "In-reply-to": "401950a0-a5ff-46f3-afac-a9cfb300f94b"






}
f87fd684-6af1-498d-98d5-f915bcee76a9/000077500000000000000000000000001205171247600362445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/commentsbody000066400000000000000000000000641205171247600371240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/f87fd684-6af1-498d-98d5-f915bcee76a9Merged from bug 17921fbc-e7f0-4f31-8cdd-598e5ba7237bvalues000066400000000000000000000002411205171247600374630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144/comments/f87fd684-6af1-498d-98d5-f915bcee76a9{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 21:29:32 +0000"






}
values000066400000000000000000000003071205171247600306410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/7ec2c071-9630-42b0-b08a-9854616f9144{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Arbitrary tags", 






    "time": "Wed, 04 Jan 2006 21:06:38 +0000"






}
814e39c0-68ee-4165-9166-19e2aee9c07d/000077500000000000000000000000001205171247600276615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d17d045d1-3b21-4d3d-8f81-29a5bbc5e6c1/000077500000000000000000000000001205171247600363355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/commentsbody000066400000000000000000000016051205171247600372170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/comments/17d045d1-3b21-4d3d-8f81-29a5bbc5e6c1> Roundup's great strength is the flexibility of its data model and
> range of generic support.  It's very easy to extend...
> ...
> As far as postponed customization goes, it would be easy enough to
> duplicate Roundup's schema.py and provide a default schema.py for
> bugtracking.  This would improve our current system by keeping all the
> configurable bits under version control from the start (equivalent to
> setting _versioned_property(require_save=True) for all properties).

How will we handle diffs between with revisions with different
schema.py?  This re-raises #bea86499-824e-4e77-b085-2d581fa9ccab/ed5eac05-80ed-411d-88a4-d2261b879713/c664b7be-ded5-42dd-a16a-82b2bdb52e36# (#bea86499-824e-4e77-b085-2d581fa9ccab/1100c966-9671-4bc6-8b68-6d408a910da1/bd1207ef-f97e-4078-8c5d-046072012082#), but we
_expect_ schema.py to evolve, while before we had expected on-disk
versions to stabilize.

values000066400000000000000000000003431205171247600375570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/comments/17d045d1-3b21-4d3d-8f81-29a5bbc5e6c1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 03 Jan 2010 16:02:57 +0000", 






    "In-reply-to": "d463e2d9-6dcc-41a4-a6b2-647fb3bddf88"






}
d463e2d9-6dcc-41a4-a6b2-647fb3bddf88/000077500000000000000000000000001205171247600365775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/commentsbody000066400000000000000000000061131205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/comments/d463e2d9-6dcc-41a4-a6b2-647fb3bddf88The Roundup issue tracker
  http://roundup.sourceforge.net/
has been around for a while, and provides a nice, flexible design
  http://roundup.sourceforge.net/docs/design.html
What ideas from Roundup are worth incorperating in our setup?

Roundup's great strength is the flexibility of its data model and
range of generic support.  It's very easy to extend.  However, there
is only so far you can go with generic support.  Roundup lacks analogs
to the following Command subclasses (as far as I know):
  Diff
    Has per-issue logs, but no repository-wide summary
  Merge
  Commit
    No VCS backends, see http://issues.roundup-tracker.org/issue2550547
  Import_xml
  Serve
    Has HTML server, but no remote command-line access
Of course, none of these would be particularly hard to add to Roundup,
with the possible exception of VCS backends, which appears to be
in-progress anyway.  However, I really like the simplicity of
  `be init`
and the ability to postpone repository customization until you need
it.  So, can we trim down the BE internals to make BE more extensible
without sacrificing our nice default setup and its tools?  The problem
is, how to the commands do their thing if they don't know what they're
working with?

Say, for example, I want to run `be depend bugA bugB`, but my bugs
don't have blocks or blocked_by link properties.  That could be easily
handled by having each command would have to keep track of which
properties it needed and raise appropriate exceptions.

List, Show, Import_xml, etc. would presumably use templates to define
their output/input formats.

As far as postponed customization goes, it would be easy enough to
duplicate Roundup's schema.py and provide a default schema.py for
bugtracking.  This would improve our current system by keeping all the
configurable bits under version control from the start (equivalent to
setting _versioned_property(require_save=True) for all properties).

Another part of the difference between BE and Roundup seems to be due
to the initial backend selection.  Roundup is built on databases,
which encourages their keyed-Class approach with (property, value)
pairs of predefined types.  They use Classes for everything, down to
status values, etc., while we've built those sorts of things into
_versioned_property()s.
Benefits of Roundup approach:
  * easy to configure/alter/retrieve list of allowed values
  * no need to hard-code properties or resort to extra_strings
  * assigned values are actually links to centralized definitions
    - easy updates
Benefits of BE approach:
  * single file for all properties
    - one read and you're done
    - many file systems don't handle 'lots of tiny files' well
  * assigned values are actual values, not links to centralized defs.
    - easy to merge by hand, no need to look up references.
Since it would be fairly simple to add a merging tool that handled the
reference lookup transparently, we can move to a Roundup-like Class
structure by using our current mapfile implementation to store small
Classes.

Finally, would it be easier to merge these Roundup features into BE,
or merge the BE features into Roundup...

values000066400000000000000000000002411205171247600400160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d/comments/d463e2d9-6dcc-41a4-a6b2-647fb3bddf88{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 03 Jan 2010 14:16:55 +0000"






}
values000066400000000000000000000003541205171247600311050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/814e39c0-68ee-4165-9166-19e2aee9c07d{






    "creator": "W. Trevor King ", 






    "severity": "minor", 






    "status": "open", 






    "summary": "Add Roundup-like flexibility", 






    "time": "Sun, 03 Jan 2010 13:12:38 +0000"






}
81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9/000077500000000000000000000000001205171247600302465ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007031205171247600314700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "The CherryPy server seems to drop connections randomly.", 






    "time": "Mon, 02 Feb 2009 01:12:37 +0000"






}
8385a1fb-63df-4ca6-81cd-28ede83bb0c2/000077500000000000000000000000001205171247600302165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004751205171247600314460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8385a1fb-63df-4ca6-81cd-28ede83bb0c2{






    "creator": "gianluca ", 






    "reporter": "gianluca ", 






    "severity": "minor", 






    "status": "wontfix", 






    "summary": "Add the html files for the status detail to \"be html\" output", 






    "time": "Fri, 03 Jul 2009 22:56:09 +0000"






}
866cba32-4347-4f51-9b1d-69454638ca78/000077500000000000000000000000001205171247600275205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600313455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78738f9826-57b6-43d6-a0cb-0dfeeb185b96/000077500000000000000000000000001205171247600362315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/commentsbody000066400000000000000000000002451205171247600371120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/comments/738f9826-57b6-43d6-a0cb-0dfeeb185b96Right now you can only select assignees or targets that have already been specified in another bug.  There should be a way to add new ones from the bug edit screen.
values000066400000000000000000000002401205171247600374470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/comments/738f9826-57b6-43d6-a0cb-0dfeeb185b96{






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 21:32:19 +0000"






}
values000066400000000000000000000006651205171247600307510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "serious", 






    "status": "open", 






    "summary": "Implement adding new assignees/targets.", 






    "time": "Sat, 07 Feb 2009 21:31:26 +0000"






}
870d5dbe-6449-4ec4-ae6f-e84bebadbce0/000077500000000000000000000000001205171247600304445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006721205171247600316730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/870d5dbe-6449-4ec4-ae6f-e84bebadbce0{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Refine graphic design for the alpha version.", 






    "time": "Sat, 31 Jan 2009 05:17:08 +0000"






}
8cb9045c-7266-4c40-9a76-65f3c5d5bb60/000077500000000000000000000000001205171247600276475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006731205171247600310770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8cb9045c-7266-4c40-9a76-65f3c5d5bb60{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Refactor the web interface into its own file.", 






    "time": "Sat, 07 Feb 2009 17:27:48 +0000"






}
8e1bbda4-35b6-4579-849d-117b1596ee99/000077500000000000000000000000001205171247600276705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee994d642e39-a8f3-41d8-93da-bea7e05ef9a6/000077500000000000000000000000001205171247600365355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/commentsbody000066400000000000000000000000771205171247600374210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6A rough implemention is now sketched out in becommands/list.py
values000066400000000000000000000002411205171247600377540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 27 Nov 2008 14:26:18 +0000"






}
bf0c3752-6338-4919-93ba-4c9252945fb1/000077500000000000000000000000001205171247600360725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/commentsbody000066400000000000000000000014341205171247600367540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1For example:
  $ be list --status --options
    File "/home/wking/bin/be", line 35, in 
      sys.exit(cmdutil.execute(sys.argv[1], sys.argv[2:]))
    File "/home/wking/lib/python2.5/site-packages/libbe/cmdutil.py", line 67, in execute
      get_command(cmd).execute([a.decode(enc) for a in args])
    File "/home/wking/lib/python2.5/site-packages/becommands/list.py", line 36, in execute
      raise Exception, "parsed options"
  Exception: parsed options

The reason for this is that --status takes an argument, so 'be list'
thinks it should list all the bugs with status == "--options".
Ideally what should happen is that an argument-taking option would
check for argument --options, and if so, would raise an exception
returning a list of appropriate completions *for that argument*.
values000066400000000000000000000002411205171247600373110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 27 Nov 2008 13:43:47 +0000"






}
values000066400000000000000000000004101205171247600311050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99{






    "creator": "W. Trevor King ", 






    "severity": "serious", 






    "status": "fixed", 






    "summary": "be   --options doesn't raise GetOptions", 






    "time": "Thu, 27 Nov 2008 13:39:25 +0000"






}
8e83da06-26f1-4763-a972-dae7e7062233/000077500000000000000000000000001205171247600275655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e706223313e88b64-117b-4f8b-8cba-8f4a9bc394f5/000077500000000000000000000000001205171247600363535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/commentsbody000066400000000000000000000040451205171247600372360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/13e88b64-117b-4f8b-8cba-8f4a9bc394f5File "/home/wking/src/fun/be-bugfix/becommands/status.py", line 25, in becommands.status.execute
Failed example:
    bd = bugdir.simple_bug_dir()
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        bd = bugdir.simple_bug_dir()
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 293, in simple_bug_dir
        bugdir = BugDir(dir.path, sink_to_existing_root=False, allow_rcs_init=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 99, in __init__
        rcs = self.guess_rcs(allow_rcs_init)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 165, in guess_rcs
        rcs = installed_rcs()
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 53, in installed_rcs
        return _get_matching_rcs(lambda rcs: rcs.installed())
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 37, in _get_matching_rcs
        if matchfn(rcs) == True:
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 53, in 
        return _get_matching_rcs(lambda rcs: rcs.installed())
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 180, in installed
        self._rcs_help()
      File "/home/wking/src/fun/be-bugfix/libbe/bzr.py", line 32, in _rcs_help
        status,output,error = self._u_invoke_client("--help")
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 362, in _u_invoke_client
        return self._u_invoke(cl_args, expect, cwd=directory)
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 355, in _u_invoke
        raise CommandError(error, status)
    CommandError: Command failed (1): 'import site' failed; use -v for traceback
    bzr: ERROR: Couldn't import bzrlib and dependencies.
    Please check bzrlib is on your PYTHONPATH.

    Traceback (most recent call last):
      File "/usr/bin/bzr", line 64, in 
        import bzrlib
    ImportError: No module named bzrlib

values000066400000000000000000000002411205171247600375720ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/13e88b64-117b-4f8b-8cba-8f4a9bc394f5{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 21 Nov 2008 18:41:47 +0000"






}
2ae039de-5b0d-4a4f-aa80-6c81d1345367/000077500000000000000000000000001205171247600362415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/commentsbody000066400000000000000000000001271205171247600371210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/2ae039de-5b0d-4a4f-aa80-6c81d1345367Aha, a final os.chdir('/') line is required to clean up after the
set_root.py doctest.
values000066400000000000000000000002411205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/2ae039de-5b0d-4a4f-aa80-6c81d1345367{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 21 Nov 2008 19:12:42 +0000"






}
a492508e-0be7-4403-bbd0-9cdc0a46b06b/000077500000000000000000000000001205171247600363105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/commentsbody000066400000000000000000000173331205171247600371770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/a492508e-0be7-4403-bbd0-9cdc0a46b06bHysteretic!  test.py severity passes, then fails.

Problem caused somewhere in set_root?  Doctest?  Bzr?

libbe/plugin.py adds the BE-path to sys.path, but it is done by the
time the TestRunner fires up...  Wierd.

$ python test.py severity set_root severity
Doctest: becommands.severity.execute ... ok
Doctest: becommands.set_root.execute ... FAIL
Doctest: becommands.severity.execute ... FAIL

======================================================================
FAIL: Doctest: becommands.set_root.execute
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.5/doctest.py", line 2128, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for becommands.set_root.execute
  File "/home/wking/src/fun/be-bugfix/becommands/set_root.py", line 22, in execute

----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/set_root.py", line 41, in becommands.set_root.execute
Failed example:
    print rcs.name
Expected:
    Arch
Got:
    bzr
----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/set_root.py", line 43, in becommands.set_root.execute
Failed example:
    execute([])
Expected:
    Using Arch for revision control.
    Directory initialized.
Got:
    Using bzr for revision control.
    Directory initialized.


======================================================================
FAIL: Doctest: becommands.severity.execute
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python2.5/doctest.py", line 2128, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for becommands.severity.execute
  File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 22, in execute

----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 25, in becommands.severity.execute
Failed example:
    bd = bugdir.simple_bug_dir()
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        bd = bugdir.simple_bug_dir()
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 293, in simple_bug_dir
        bugdir = BugDir(dir.path, sink_to_existing_root=False, allow_rcs_init=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 99, in __init__
        rcs = self.guess_rcs(allow_rcs_init)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 165, in guess_rcs
        rcs = installed_rcs()
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 53, in installed_rcs
        return _get_matching_rcs(lambda rcs: rcs.installed())
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 37, in _get_matching_rcs
        if matchfn(rcs) == True:
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 53, in 
        return _get_matching_rcs(lambda rcs: rcs.installed())
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 180, in installed
        self._rcs_help()
      File "/home/wking/src/fun/be-bugfix/libbe/bzr.py", line 32, in _rcs_help
        status,output,error = self._u_invoke_client("--help")
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 362, in _u_invoke_client
        return self._u_invoke(cl_args, expect, cwd=directory)
      File "/home/wking/src/fun/be-bugfix/libbe/rcs.py", line 355, in _u_invoke
        raise CommandError(error, status)
    CommandError: Command failed (1): 'import site' failed; use -v for traceback
    bzr: ERROR: Couldn't import bzrlib and dependencies.
    Please check bzrlib is on your PYTHONPATH.

    Traceback (most recent call last):
      File "/usr/bin/bzr", line 64, in 
        import bzrlib
    ImportError: No module named bzrlib

----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 26, in becommands.severity.execute
Failed example:
    os.chdir(bd.root)
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        os.chdir(bd.root)
    NameError: name 'bd' is not defined
----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 27, in becommands.severity.execute
Failed example:
    execute(["a"])
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        execute(["a"])
      File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 40, in execute
        bd = bugdir.BugDir(loadNow=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 85, in __init__
        root = os.getcwd()
    OSError: [Errno 2] No such file or directory
----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 29, in becommands.severity.execute
Failed example:
    execute(["a", "wishlist"])
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        execute(["a", "wishlist"])
      File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 40, in execute
        bd = bugdir.BugDir(loadNow=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 85, in __init__
        root = os.getcwd()
    OSError: [Errno 2] No such file or directory
----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 30, in becommands.severity.execute
Failed example:
    execute(["a"])
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        execute(["a"])
      File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 40, in execute
        bd = bugdir.BugDir(loadNow=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 85, in __init__
        root = os.getcwd()
    OSError: [Errno 2] No such file or directory
----------------------------------------------------------------------
File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 32, in becommands.severity.execute
Failed example:
    execute(["a", "none"])
Expected:
    Traceback (most recent call last):
    UserError: Invalid severity level: none
Got:
    Traceback (most recent call last):
      File "/usr/lib/python2.5/doctest.py", line 1228, in __run
        compileflags, 1) in test.globs
      File "", line 1, in 
        execute(["a", "none"])
      File "/home/wking/src/fun/be-bugfix/becommands/severity.py", line 40, in execute
        bd = bugdir.BugDir(loadNow=True)
      File "/home/wking/src/fun/be-bugfix/libbe/bugdir.py", line 85, in __init__
        root = os.getcwd()
    OSError: [Errno 2] No such file or directory


----------------------------------------------------------------------
Ran 3 tests in 8.719s

FAILED (failures=2)

values000066400000000000000000000002411205171247600375270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233/comments/a492508e-0be7-4403-bbd0-9cdc0a46b06b{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 21 Nov 2008 19:01:19 +0000"






}
values000066400000000000000000000003571205171247600310140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e83da06-26f1-4763-a972-dae7e7062233{






    "creator": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "test.py removes path to bzrlib", 






    "time": "Fri, 21 Nov 2008 18:41:03 +0000"






}
8e948522-c6a1-4c97-af93-2cf4090f44b5/000077500000000000000000000000001205171247600276545ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315015ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b53e7144eb-c934-4b62-94b7-7dbfa90ed6ee/000077500000000000000000000000001205171247600365205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/commentsbody000066400000000000000000000002221205171247600373740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/comments/3e7144eb-c934-4b62-94b7-7dbfa90ed6eeFrom Aaron's Mon, 24 Nov 2008 19:15:09 -0500 email:

8e9:om: list X most recent entries
Closeable.  (And yes, I would do it instead of 'be diff')
values000066400000000000000000000002411205171247600377370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/comments/3e7144eb-c934-4b62-94b7-7dbfa90ed6ee{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 19:46:45 +0000"






}
7d7e703f-22f2-4c47-86a3-fcc3c8ead576/000077500000000000000000000000001205171247600364415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/commentsbody000066400000000000000000000000501205171247600373140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/comments/7d7e703f-22f2-4c47-86a3-fcc3c8ead576Would you do this instead of `be diff`?
values000066400000000000000000000002411205171247600376600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5/comments/7d7e703f-22f2-4c47-86a3-fcc3c8ead576{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 24 Nov 2008 13:10:38 +0000"






}
values000066400000000000000000000003231205171247600310740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8e948522-c6a1-4c97-af93-2cf4090f44b5{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "list X most recent entries", 






    "time": "Wed, 25 Jan 2006 15:44:18 +0000"






}
8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/000077500000000000000000000000001205171247600302725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600321175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1432e994f-3759-42bf-a80d-7cd626c7ce7c/000077500000000000000000000000001205171247600370075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/commentsbody000066400000000000000000000037051205171247600376740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/comments/432e994f-3759-42bf-a80d-7cd626c7ce7cFor example, after merging in a branch with new bugs, the id-cache is
incomplete.  An example traceback (from `be list`) is

Traceback (most recent call last):
  File "./be", line 21, in 
    sys.exit(libbe.ui.command_line.main())
  File ".../be.wtk/libbe/ui/command_line.py", line 327, in main
    ret = dispatch(ui, command, args)
  File ".../be.wtk/libbe/ui/command_line.py", line 267, in dispatch
    ret = ui.run(command, options, args)
  File ".../be.wtk/libbe/command/base.py", line 504, in run
    return command.run(options, args)
  File ".../be.wtk/libbe/command/base.py", line 233, in run
    self.status = self._run(**params)
  File ".../be.wtk/libbe/command/list.py", line 168, in _run
    bugs = self._sort_bugs(bugs, cmp_list)
  File ".../be.wtk/libbe/command/list.py", line 229, in _sort_bugs
    bugs.sort(cmp_fn)
  File ".../be.wtk/libbe/bug.py", line 818, in __call__
    val = comparison(bug_1, bug_2)
  File ".../be.wtk/libbe/bug.py", line 798, in cmp_comments
    comms_1 = sorted(bug_1.comments(), key = lambda comm : comm.uuid)
  File ".../be.wtk/libbe/bug.py", line 687, in comments
    for comment in self.comment_root.traverse():
  File ".../be.wtk/libbe/storage/util/properties.py", line 297, in _fget
    value = generator(self)
  File ".../be.wtk/libbe/bug.py", line 225, in _get_comment_root
    return comment.load_comments(self, load_full=load_full)
  File ".../be.wtk/libbe/comment.py", line 85, in load_comments
    bug.id.storage())):
  File ".../be.wtk/libbe/storage/base.py", line 314, in children
    return self._children(*args, **kwargs)
  File ".../be.wtk/libbe/storage/vcs/base.py", line 804, in _children
    path = self.path(id, revision, relpath=False)
  File ".../be.wtk/libbe/storage/vcs/base.py", line 705, in path
    path = self._cached_path_id.path(id)
  File ".../be.wtk/libbe/storage/vcs/base.py", line 242, in path
    raise InvalidID(uuid)
libbe.storage.base.InvalidID: cf56e648-3b09-4131-8847-02dff12b4db2 in revision None

values000066400000000000000000000002411205171247600402260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/comments/432e994f-3759-42bf-a80d-7cd626c7ce7c{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 24 Jan 2010 16:29:46 +0000"






}
e3d802cf-1fff-4a48-a61c-a07578969333/000077500000000000000000000000001205171247600367155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/commentsbody000066400000000000000000000002221205171247600375710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/comments/e3d802cf-1fff-4a48-a61c-a07578969333Work around by removing id-cache (forcing recreation).

A better solution would be detecting the problem and recreating the
cache automatically.

values000066400000000000000000000002411205171247600401340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/comments/e3d802cf-1fff-4a48-a61c-a07578969333{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 25 Jan 2010 00:50:17 +0000"






}
values000066400000000000000000000004541205171247600315170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "be crashes on outdated id-cache", 






    "time": "Sun, 24 Jan 2010 16:28:06 +0000"






}
984472f6-98f5-48fc-b521-70a1e5f60614/000077500000000000000000000000001205171247600275225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006531205171247600307500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/984472f6-98f5-48fc-b521-70a1e5f60614{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Implement the status filters.", 






    "time": "Sat, 31 Jan 2009 00:22:40 +0000"






}
9a942b1d-a3b5-441d-8aef-b844700e1efa/000077500000000000000000000000001205171247600301265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa209e2a60-ddd0-4a71-90ef-e57547ed6d76/000077500000000000000000000000001205171247600366255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/commentsbody000066400000000000000000000001521205171247600375030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/comments/209e2a60-ddd0-4a71-90ef-e57547ed6d76From the command line,
  $ be show `be list --status all --uuids` | grep -A5 -B5 XYZ
works pretty well...
values000066400000000000000000000002411205171247600400440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/comments/209e2a60-ddd0-4a71-90ef-e57547ed6d76{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 18:05:38 +0000"






}
37650981-1908-4c39-bae2-48e69c771120/000077500000000000000000000000001205171247600361715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/commentsbody000066400000000000000000000000361205171247600370500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/comments/37650981-1908-4c39-bae2-48e69c771120Hmm.  This is already done...
values000066400000000000000000000002101205171247600374040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa/comments/37650981-1908-4c39-bae2-48e69c771120{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Fri, 31 Mar 2006 22:15:09 +0000"






}
values000066400000000000000000000003071205171247600313500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9a942b1d-a3b5-441d-8aef-b844700e1efa{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Provide search", 






    "time": "Wed, 25 Jan 2006 15:43:59 +0000"






}
9b1a0e71-4f7d-40b1-ab32-18496bf19a3f/000077500000000000000000000000001205171247600277655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004771205171247600312170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9b1a0e71-4f7d-40b1-ab32-18496bf19a3f{






    "creator": "gianluca ", 






    "reporter": "gianluca ", 






    "severity": "minor", 






    "status": "wontfix", 






    "summary": "Add the html files for the severity detail to \"be html\" output", 






    "time": "Fri, 03 Jul 2009 22:56:19 +0000"






}
9bc14860-b2bb-4442-85ea-0b8e7083457b/000077500000000000000000000000001205171247600276345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006421205171247600310600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9bc14860-b2bb-4442-85ea-0b8e7083457b{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "Create a project page.", 






    "time": "Sat, 31 Jan 2009 05:18:56 +0000"






}
9c25fd46-5e2b-478f-8beb-01b89e27c1f2/000077500000000000000000000000001205171247600300745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9c25fd46-5e2b-478f-8beb-01b89e27c1f27cd2d475-676f-4d60-b431-c7635468e9bd/000077500000000000000000000000001205171247600364475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9c25fd46-5e2b-478f-8beb-01b89e27c1f2/commentsbody000066400000000000000000000006271205171247600373340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9c25fd46-5e2b-478f-8beb-01b89e27c1f2/comments/7cd2d475-676f-4d60-b431-c7635468e9bdThe comment class could be streamlined and standardized by making it
subclass (Tree, email.Message).  This should make the per-bug, mini
mailing list more expressive, and add support for fancy email
features.  On the other hand, it could make the Comment/xml interface,
HTML production, etc. more awkward.

Time for another look at Debian's tracker, or do they only allow
text/plain, single-part messages?

values000066400000000000000000000002411205171247600376660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9c25fd46-5e2b-478f-8beb-01b89e27c1f2/comments/7cd2d475-676f-4d60-b431-c7635468e9bd{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 28 Jan 2010 15:41:07 +0000"






}
values000066400000000000000000000004771205171247600313260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9c25fd46-5e2b-478f-8beb-01b89e27c1f2{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "wishlist", 






    "status": "open", 






    "summary": "Can comment punt functionality to email.Message?", 






    "time": "Thu, 28 Jan 2010 15:36:16 +0000"






}
9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/000077500000000000000000000000001205171247600301225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe095ade7c-9378-41bd-8137-f2731c6afcac/000077500000000000000000000000001205171247600366775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/commentsbody000066400000000000000000000016521205171247600375630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/095ade7c-9378-41bd-8137-f2731c6afcacPresumably this would be to allow sorting of bugs by last-modified
date instead of by creation date.  With the xml output, this is no
longer needed.  For example, I view bugs in mutt with
  $ be list | xml/be-xml-to-mbox | xml/catmutt
and use mutt to sort the threads by last-modified, e.g. by adding
  set sort=threads
  set sort_aux=last-date
to my ~/.muttrc.

That being said, I could go for a user-specified sort command in
becommands/list.py, rather than the current bug.cmp_full, since other
mail readers may suck more than mutt ;), and even mutt might not have
that perfect sort you desire coded into it :p.  The problem is that
while the cmp_* functions in bug are short, they are not really the
sort of thing you'd want to type in on the command line.  Perhaps we
can just slowly accumulate a rich array of bug.cmp_* functions as
they are requested, and allow the user to prepend their favorites to
the default cmp_full list...

values000066400000000000000000000002411205171247600401160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/095ade7c-9378-41bd-8137-f2731c6afcac{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 18:40:43 +0000"






}
4be35966-373b-438c-a35a-824f5c7a940a/000077500000000000000000000000001205171247600364575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/commentsbody000066400000000000000000000013171205171247600373410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/4be35966-373b-438c-a35a-824f5c7a940aNo need for RCS-expansion for the history.  If the user is versioning
their code with some RCS, they presumably know how to use the RCS to
investigate the history already.  The .be/ directory structure is not
so complicated that it's worth much work to avoid their having to peer
inside it by hand.

In rare cases where people really do want to peer into history using
only BE or sort by e.g. bug closing time, they could add those
comments by hand, e.g.
  $ echo 'bug closed' | be comment  -
  $ be close 
So the already-implemented cmp_last_modified would handle it.

If you want, you could add (optional) comment-generation to the
becommands themselves.  For example becommand/merge.py already does
this.

values000066400000000000000000000003431205171247600377010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/4be35966-373b-438c-a35a-824f5c7a940a{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 21:12:00 +0000", 






    "In-reply-to": "d81d0df9-e6d9-4fe8-8dbe-989ef2c81f00"






}
d81d0df9-e6d9-4fe8-8dbe-989ef2c81f00/000077500000000000000000000000001205171247600370715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/commentsbody000066400000000000000000000006421205171247600377530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/d81d0df9-e6d9-4fe8-8dbe-989ef2c81f00User specfied sort added, along with bug.cmp_last_modified.

Hmm, perhaps you don't want the last comment date, but e.g. the last
time one of the bug attributes are changed.  In that case, I suggest
  bzr log .be/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/

Maybe log(file) functionality should be incorperated into libbe/rcs...
Perhaps accessed through a --history.  I'm not sure I remember enough
Arch to do that ;).
values000066400000000000000000000002411205171247600403100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe/comments/d81d0df9-e6d9-4fe8-8dbe-989ef2c81f00{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 19:43:21 +0000"






}
values000066400000000000000000000003301205171247600313400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9ce2f015-8ea0-43a5-a03d-fc36f6d202fe{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Add last-modified field to bugs", 






    "time": "Thu, 14 Sep 2006 18:08:53 +0000"






}
9daa72ee-0721-4f68-99ee-f06fec0b340e/000077500000000000000000000000001205171247600301475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003421205171247600313700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9daa72ee-0721-4f68-99ee-f06fec0b340e{






    "assigned": "abentley", 






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Organize list by whether it's assigned to the current target"






}
9f910ee0-ff0f-4fa3-b1e3-79a4118e48e9/000077500000000000000000000000001205171247600300735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002531205171247600313150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9f910ee0-ff0f-4fa3-b1e3-79a4118e48e9{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "prevent collisions in different branches"






}
a403de79-8f39-41f2-b9ec-15053b175ee2/000077500000000000000000000000001205171247600277235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee20fd8ba95-d9ea-49b3-9f5a-b0eb723cdbe1/000077500000000000000000000000001205171247600367745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/commentsbody000066400000000000000000000000641205171247600376540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/0fd8ba95-d9ea-49b3-9f5a-b0eb723cdbe1Merged from bug c894f10f-197d-4b22-9c5b-19f394df40d4values000066400000000000000000000002411205171247600402130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/0fd8ba95-d9ea-49b3-9f5a-b0eb723cdbe1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 25 Nov 2008 02:24:04 +0000"






}
208595bd-35b8-44c2-bf97-fc5ef9e7a58d/000077500000000000000000000000001205171247600365255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/commentsbody000066400000000000000000000013041205171247600374030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/208595bd-35b8-44c2-bf97-fc5ef9e7a58dExample:

We're working happily in a versioned bugdir, and our RCS knows who we
are.  We create a temporary repository copy from a previous revision
for diff generation.  We set the RCS for the copy to "None", since we
didn't bother initializing our normal RCS in the snapshot copy.  But
now the BugDir instantized on the copy doesn't know who we are!

Solution:

Track user id in the bugdir settings file.  If you
bugdir.settings["user_id"], it will be saved and loaded.  When loaded,
it will also set bugdir.user_id.  If you set rcs.user_id, it will be
returned by rcs.get_user_id(), instead of returing the output of
rcs._rcs_get_user_id().  We should be caching the output of
_rcs_get_user_id() anyway.

values000066400000000000000000000003431205171247600377470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/208595bd-35b8-44c2-bf97-fc5ef9e7a58d{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 22 Nov 2008 21:43:29 +0000", 






    "In-reply-to": "0fd8ba95-d9ea-49b3-9f5a-b0eb723cdbe1"






}
25c67b0b-1afd-4613-a787-e0f018614966/000077500000000000000000000000001205171247600361735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/commentsbody000066400000000000000000000000711205171247600370510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/25c67b0b-1afd-4613-a787-e0f018614966This bug duplicates a403de79-8f39-41f2-b9ec-15053b175ee2
values000066400000000000000000000003431205171247600374150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2/comments/25c67b0b-1afd-4613-a787-e0f018614966{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 23 Nov 2008 12:37:57 +0000", 






    "In-reply-to": "0fd8ba95-d9ea-49b3-9f5a-b0eb723cdbe1"






}
values000066400000000000000000000003371205171247600311500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a403de79-8f39-41f2-b9ec-15053b175ee2{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Beweb should support declaring username", 






    "time": "Wed, 04 Jan 2006 21:07:25 +0000"






}
a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/000077500000000000000000000000001205171247600301535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb23415fbd7-5a7e-4a7f-af30-82f8ce6ca85b/000077500000000000000000000000001205171247600370725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/commentsbody000066400000000000000000000000441205171247600377500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/comments/3415fbd7-5a7e-4a7f-af30-82f8ce6ca85bFixed by 273.  Probably around 253.
values000066400000000000000000000002411205171247600403110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/comments/3415fbd7-5a7e-4a7f-af30-82f8ce6ca85b{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 24 Nov 2008 13:05:07 +0000"






}
b0e7165b-7099-45ca-9513-412225f7bd52/000077500000000000000000000000001205171247600363415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/commentsbody000066400000000000000000000022371205171247600372250ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/comments/b0e7165b-7099-45ca-9513-412225f7bd52Err, perhaps we should use revision ids.  Or status.  Or something...


$ be diff
Traceback (most recent call last):
  File "/usr/bin/be", line 55, in ?
    sys.exit(execute(sys.argv[1], sys.argv[2:]))
  File "/usr/lib/python2.4/site-packages/libbe/cmdutil.py", line 105, in execute    return get_command(cmd).execute([a.decode(encoding) for a in args])
  File "/usr/lib/python2.4/site-packages/becommands/diff.py", line 33, in execute
    diff.diff_report(diff.reference_diff(tree, spec), tree)
  File "/usr/lib/python2.4/site-packages/libbe/diff.py", line 41, in reference_diff
    return diff(bugdir.get_reference_bugdir(spec), bugdir)
  File "/usr/lib/python2.4/site-packages/libbe/diff.py", line 22, in diff
    old_bug_map = old_tree.bug_map()
  File "/usr/lib/python2.4/site-packages/libbe/bugdir.py", line 169, in bug_map
    for bug in self.list():
  File "/usr/lib/python2.4/site-packages/libbe/bugdir.py", line 164, in list
    for uuid in self.list_uuids():
  File "/usr/lib/python2.4/site-packages/libbe/bugdir.py", line 177, in list_uuids
    for uuid in os.listdir(self.bugs_path):
OSError: [Errno 2] No such file or directory: '/home/abentley/.bzrrevs/None/.be/bugs'
values000066400000000000000000000002101205171247600375540ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2/comments/b0e7165b-7099-45ca-9513-412225f7bd52{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Mon, 10 Apr 2006 23:23:25 +0000"






}
values000066400000000000000000000003711205171247600313760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a4d38ba7-ec28-4096-a4f3-eb8c9790ffb2{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "be diff doesn't work with bzr in directories that have no commits", 






    "time": "Mon, 10 Apr 2006 23:22:17 +0000"






}
a63bd76a-cd43-4f97-88ba-2323546d4572/000077500000000000000000000000001205171247600276475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003521205171247600310710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/a63bd76a-cd43-4f97-88ba-2323546d4572{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Beweb: New comment button should save any changes", 






    "time": "Wed, 04 Jan 2006 21:05:20 +0000"






}
ac72991a-72e5-4b14-b53c-0fa38d0f31bb/000077500000000000000000000000001205171247600300375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000005751205171247600312700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ac72991a-72e5-4b14-b53c-0fa38d0f31bb{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "The bug editing/comment forms break the rhythm.", 






    "time": "Sun, 01 Feb 2009 23:59:17 +0000"






}
ae998b27-a11b-4243-abf6-11841e5b8242/000077500000000000000000000000001205171247600276265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b82422628eeca-96c6-4933-8484-d55bb1dbf985/000077500000000000000000000000001205171247600362665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/commentsbody000066400000000000000000000000641205171247600371460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/2628eeca-96c6-4933-8484-d55bb1dbf985Merged from bug 4a4609c8-1882-47de-9d30-fee410b8a802values000066400000000000000000000002411205171247600375050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/2628eeca-96c6-4933-8484-d55bb1dbf985{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 17:05:49 +0000"






}
942cd941-583d-4020-99e4-80de7e836129/000077500000000000000000000000001205171247600357615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/commentsbody000066400000000000000000000000151205171247600366350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/942cd941-583d-4020-99e4-80de7e836129Implemented.
values000066400000000000000000000003431205171247600372030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/942cd941-583d-4020-99e4-80de7e836129{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 15:42:07 +0000", 






    "In-reply-to": "2628eeca-96c6-4933-8484-d55bb1dbf985"






}
ae0f9aea-960c-42b4-82df-943bbbe17d58/000077500000000000000000000000001205171247600365405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/commentsbody000066400000000000000000000000671205171247600374230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/ae0f9aea-960c-42b4-82df-943bbbe17d58Per-tree severity and status levels are now supported.
values000066400000000000000000000002411205171247600377570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242/comments/ae0f9aea-960c-42b4-82df-943bbbe17d58{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 17:07:25 +0000"






}
values000066400000000000000000000002371205171247600310520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ae998b27-a11b-4243-abf6-11841e5b8242{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Customizable severity levels?"






}
b187fbce-fb10-4819-ace2-c8b0b4a45c57/000077500000000000000000000000001205171247600302075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b187fbce-fb10-4819-ace2-c8b0b4a45c57e757d2ae-085a-4539-99be-096386de5352/000077500000000000000000000000001205171247600365075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b187fbce-fb10-4819-ace2-c8b0b4a45c57/commentsbody000066400000000000000000000001431205171247600373650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b187fbce-fb10-4819-ace2-c8b0b4a45c57/comments/e757d2ae-085a-4539-99be-096386de5352The 'be' command should have a Unix manpage, describing it like any
other command on the system. 

values000066400000000000000000000002041205171247600377250ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b187fbce-fb10-4819-ace2-c8b0b4a45c57/comments/e757d2ae-085a-4539-99be-096386de5352{






    "Author": "benf", 






    "Content-type": "text/plain", 






    "Date": "Mon, 21 Apr 2008 03:24:11 +0000"






}
values000066400000000000000000000003571205171247600314360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b187fbce-fb10-4819-ace2-c8b0b4a45c57{






    "assigned": "benf", 






    "creator": "benf", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Manual page for 'be' command", 






    "time": "Mon, 21 Apr 2008 03:21:35 +0000"






}
b1bc6f39-8166-46c5-a724-4c4a3e1e7d74/000077500000000000000000000000001205171247600277245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002431205171247600311450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b1bc6f39-8166-46c5-a724-4c4a3e1e7d74{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Comments do not appear in web UI"






}
b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/000077500000000000000000000000001205171247600301475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac2a51d90a-d47e-4a67-abe7-cce19c1eafad/000077500000000000000000000000001205171247600372655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/commentsbody000066400000000000000000000013741205171247600401520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/comments/2a51d90a-d47e-4a67-abe7-cce19c1eafad> $ be new 'utf8 string'
> Traceback (most recent call last):
>   ...
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 95: ordinal not in range(128)

(bug reported against cjb@laptop.org-20091006145647-kqkmoh481tl5hvt4)

This was fixed with revision
  wking@drexel.edu-20091117145118-jltbju9thsn5xvkv
in my branch on Nov. 17, 2009.

> I think it is more correct to use UTF-8 everywhere or use
> locale.getdefaultlocale() instead sys.getdefaultencoding().

We try to use unicode strings internally, it's input/output that's
difficult.  This particular bug turned out to be related to our
mapfile storage handling.  Take a look at the be.unicode-hg branch
leading up to revision
  wking@drexel.edu-20091117145118-jltbju9thsn5xvkv
for details.

values000066400000000000000000000003431205171247600405070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/comments/2a51d90a-d47e-4a67-abe7-cce19c1eafad{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 19 Mar 2010 11:16:16 +0000", 






    "In-reply-to": "854eec21-2eeb-4ed4-af35-7a4a2e1f2e98"






}
854eec21-2eeb-4ed4-af35-7a4a2e1f2e98/000077500000000000000000000000001205171247600370615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/commentsbody000066400000000000000000000033231205171247600377420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/comments/854eec21-2eeb-4ed4-af35-7a4a2e1f2e98When I try to create bug with utf8 string I get error:

$ be new 'utf8 string'
Traceback (most recent call last):
  File "/usr/bin/be", line 64, in 
    sys.exit(cmdutil.execute(args[0], args[1:]))
  File "/usr/lib/python2.6/site-packages/libbe/cmdutil.py", line 82, in execute
    manipulate_encodings=manipulate_encodings)
  File "/usr/lib/python2.6/site-packages/becommands/new.py", line 54, in execute
    bug = bd.new_bug(summary=summary.strip())
  File "/usr/lib/python2.6/site-packages/libbe/bugdir.py", line 584, in new_bug
    bg.save()
  File "/usr/lib/python2.6/site-packages/libbe/bug.py", line 388, in save
    self.save_settings()
  File "/usr/lib/python2.6/site-packages/libbe/bug.py", line 373, in save_settings
    mapfile.map_save(self.vcs, path, self._get_saved_settings())
  File "/usr/lib/python2.6/site-packages/libbe/mapfile.py", line 110, in map_save
    vcs.set_file_contents(path, contents, allow_no_vcs)
  File "/usr/lib/python2.6/site-packages/libbe/vcs.py", line 354, in set_file_contents
    f.write(contents)
  File "/usr/lib/python2.6/codecs.py", line 686, in write
    return self.writer.write(data)
  File "/usr/lib/python2.6/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 95: ordinal not in range(128)
---

$ python
Python 2.6.1 (r261:67515, Jan  8 2010, 16:07:38)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import locale
>>> sys.getdefaultencoding()
'ascii'
>>> locale.getdefaultlocale()
('ru_RU', 'UTF-8')

I think it is more correct to use UTF-8 everywhere or use locale.getdefaultlocale() instead sys.getdefaultencoding().

values000066400000000000000000000002331205171247600403010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac/comments/854eec21-2eeb-4ed4-af35-7a4a2e1f2e98{






    "Author": "Anton Batenev ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 16 Mar 2010 12:53:45 +0000"






}
values000066400000000000000000000004171205171247600313730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3562f08-ad27-4b9f-8d21-8b58ba6d9eac{






    "creator": "Anton Batenev ", 






    "reporter": "Anton Batenev ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "UTF-8 problems", 






    "time": "Tue, 16 Mar 2010 12:40:01 +0000"






}
b3c6da51-3a30-42c9-8c75-587c7a1705c5/000077500000000000000000000000001205171247600276345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004301205171247600310530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b3c6da51-3a30-42c9-8c75-587c7a1705c5{






    "creator": "W. Trevor King ", 






    "severity": "critical", 






    "status": "fixed", 






    "summary": "Slow be commands due to bugdir loading, go back to lazy bug loading.", 






    "time": "Sun, 23 Nov 2008 13:48:01 +0000"






}
b8d95763-1825-4e09-bf52-cbd884b916af/000077500000000000000000000000001205171247600277425ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b8d95763-1825-4e09-bf52-cbd884b916afae56365e-7a9c-4cc3-ba67-7addbeeeff49/000077500000000000000000000000001205171247600371115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b8d95763-1825-4e09-bf52-cbd884b916af/commentsbody000066400000000000000000000001011205171247600377610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b8d95763-1825-4e09-bf52-cbd884b916af/comments/ae56365e-7a9c-4cc3-ba67-7addbeeeff49Aaron said this was closeable in Nov. 24th email to the BE list.
values000066400000000000000000000002411205171247600403300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b8d95763-1825-4e09-bf52-cbd884b916af/comments/ae56365e-7a9c-4cc3-ba67-7addbeeeff49{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 13:48:47 +0000"






}
values000066400000000000000000000003311205171247600311610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/b8d95763-1825-4e09-bf52-cbd884b916af{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "support multi-rcs configurations", 






    "time": "Thu, 07 Apr 2005 16:09:10 +0000"






}
bc1e6ff4-478f-4afe-b2a1-86e25ee448b7/000077500000000000000000000000001205171247600302345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bc1e6ff4-478f-4afe-b2a1-86e25ee448b7a3c3bae1-12fe-4282-bc14-26f09ced8f89/000077500000000000000000000000001205171247600370615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bc1e6ff4-478f-4afe-b2a1-86e25ee448b7/commentsbody000066400000000000000000000015011205171247600377360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bc1e6ff4-478f-4afe-b2a1-86e25ee448b7/comments/a3c3bae1-12fe-4282-bc14-26f09ced8f89BE crashes when too many arguments are provided.

Ex: be list extra_arg
WARNING:root:unable to import libbe._version: No module named _version
Traceback (most recent call last):
  File "/usr/local/bin/be", line 26, in 
    sys.exit(libbe.ui.command_line.main())
  File "/home/tanguy/Documents/Repositories/Bugs-Everywhere/tlecarrours-be-reports/libbe/ui/command_line.py", line 331, in main
    ret = dispatch(ui, command, args)
  File "/home/tanguy/Documents/Repositories/Bugs-Everywhere/tlecarrours-be-reports/libbe/ui/command_line.py", line 262, in dispatch
    options,args = parser.parse_args(args)
  File "/home/tanguy/Documents/Repositories/Bugs-Everywhere/tlecarrours-be-reports/libbe/ui/command_line.py", line 128, in parse_args
    and self.command.args[-1].repeatable == False:
IndexError: list index out of range

values000066400000000000000000000002561205171247600403060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bc1e6ff4-478f-4afe-b2a1-86e25ee448b7/comments/a3c3bae1-12fe-4282-bc14-26f09ced8f89{






    "Author": "Tanguy LE CARROUR ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 06 Jun 2011 18:06:47 +0000"






}
values000066400000000000000000000005231205171247600314560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bc1e6ff4-478f-4afe-b2a1-86e25ee448b7{






    "creator": "Tanguy LE CARROUR ", 






    "reporter": "Tanguy LE CARROUR ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Crashes when too many arguments are provided", 






    "time": "Mon, 06 Jun 2011 18:04:41 +0000"






}
bd0ebb56-fb46-45bc-af08-1e4a94e8ef3c/000077500000000000000000000000001205171247600303565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007041205171247600316010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bd0ebb56-fb46-45bc-af08-1e4a94e8ef3c{






    "creator": "W. Trevor King ", 






    "extra_strings": [






        "BLOCKED-BY:47c8fd5f-1f5a-4048-bef7-bb4c9a37c411", 






        "BLOCKED-BY:4fc71206-4285-417f-8a3c-ed6fb31bbbda", 






        "BLOCKED-BY:f5c06914-dc64-4658-8ec7-32a026a53f55"






    ], 






    "severity": "target", 






    "status": "fixed", 






    "summary": "0.2", 






    "time": "Sun, 06 Dec 2009 00:37:15 +0000"






}
bef126a0-27be-402f-84fa-85f6342c97c0/000077500000000000000000000000001205171247600277755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006451205171247600312240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bef126a0-27be-402f-84fa-85f6342c97c0{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Implement bug creation.", 






    "time": "Sat, 31 Jan 2009 02:59:35 +0000"






}
c1b76442-eab6-4796-9517-8454425d7757/000077500000000000000000000000001205171247600273705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600312155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d775727a5a4cc-1782-4509-a3d2-db00c190f97d/000077500000000000000000000000001205171247600357655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/commentsbody000066400000000000000000000010101205171247600366350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/comments/27a5a4cc-1782-4509-a3d2-db00c190f97dAdded rudimentary authorization with `be serve --auth FILE`.

Special username 'guest' is not allowed to change name,password or
write to the repository.  All other users in the auth file are allowed
to do all of that.  A more robust solution would be to have POSIX
permissions on each storage item, or something.

Note that while the server supports name/password changes for
non-guest users, there is no command-line interface to this
functionality.  There is also no automatic way to register
(i.e. create entries).

values000066400000000000000000000002411205171247600372040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/comments/27a5a4cc-1782-4509-a3d2-db00c190f97d{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Wed, 27 Jan 2010 13:05:47 +0000"






}
76d54016-755b-42ca-ad07-eb9a1c77c33d/000077500000000000000000000000001205171247600360525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/commentsbody000066400000000000000000000002601205171247600367300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/comments/76d54016-755b-42ca-ad07-eb9a1c77c33dSteve's had some related thoughts on authentication for CFBE:
#bea86499-824e-4e77-b085-2d581fa9ccab/d9959864-ea91-475a-a075-f39aa6760f98/21c90231-d7f2-49bb-97d9-99e16459d799#.
values000066400000000000000000000002411205171247600372710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757/comments/76d54016-755b-42ca-ad07-eb9a1c77c33d{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 28 Jan 2010 22:58:08 +0000"






}
values000066400000000000000000000004651205171247600306170ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c1b76442-eab6-4796-9517-8454425d7757{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "minor", 






    "status": "open", 






    "summary": "`be serve` authentication / authorization", 






    "time": "Mon, 25 Jan 2010 21:59:03 +0000"






}
c271a802-d324-48a6-b01d-63e4a72aa43e/000077500000000000000000000000001205171247600276705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c271a802-d324-48a6-b01d-63e4a72aa43e06e45775-1c46-4793-a34e-2cc86a8db097/000077500000000000000000000000001205171247600361565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c271a802-d324-48a6-b01d-63e4a72aa43e/commentsbody000066400000000000000000000000461205171247600370360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c271a802-d324-48a6-b01d-63e4a72aa43e/comments/06e45775-1c46-4793-a34e-2cc86a8db097Added the option in my be-html branch
values000066400000000000000000000002411205171247600373750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c271a802-d324-48a6-b01d-63e4a72aa43e/comments/06e45775-1c46-4793-a34e-2cc86a8db097{






    "Author": "Gianluca Montecchi ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 08 Oct 2009 20:16:46 +0000"






}
values000066400000000000000000000004441205171247600311140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c271a802-d324-48a6-b01d-63e4a72aa43e{






    "creator": "gianluca ", 






    "reporter": "gianluca ", 






    "severity": "wishlist", 






    "status": "fixed", 






    "summary": "Add a verbose option to \"be html\"?", 






    "time": "Fri, 03 Jul 2009 21:17:41 +0000"






}
c283cbb1-2964-4372-9d9c-117dd3a85518/000077500000000000000000000000001205171247600275655ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a855186f64d9a1-827f-4ebb-bdb2-9f7e0dbc1b22/000077500000000000000000000000001205171247600365535ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000011121205171247600374260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/6f64d9a1-827f-4ebb-bdb2-9f7e0dbc1b22Hi,

   >> Are there any other popular free code hosting sites out there,
   >> perhaps written in Python?  ;-) If there was a site that allowed
   >> you to choose between different SCMs, that'd be even more suited
   >> to us..

   > If you like Sourceforge, it supplies all:

I don't think that sourceforge's issue tracking (or the sourceforge
site itself these days) is free software, which was an unspoken (well,
earlier-spoken) requirement.  We already know that some proprietary
sites offer bug tracking -- we're trying to find an open-source one
that does (or could).

- Chris.
values000066400000000000000000000004171205171247600377770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/6f64d9a1-827f-4ebb-bdb2-9f7e0dbc1b22{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 18 Mar 2010 22:13:41 +0000", 






    "In-reply-to": "<4BA2A13A.7030106@gmx.de>"






}
93726120-9ee2-462a-bedd-565568fad31b/000077500000000000000000000000001205171247600362005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000005541205171247600370640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/93726120-9ee2-462a-bedd-565568fad31bCurrently one big feature gitorious lacks when compared to github is issue 
tracker. Github issues makes it easy to report issues and map it to commits.
It would be great if Bugs Everywhere can be integrated with gitorious interface
so that every gitorious repo can have a Bugs Everywhere repo with it and can
use gitorious web interface to see and report issues.
values000066400000000000000000000002531205171247600374220ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/93726120-9ee2-462a-bedd-565568fad31b{






    "Author": "Praveen Arimbrathodiyil ", 






    "Content-type": "text/plain", 






    "Date": "Wed, 25 Jul 2012 13:06:41 +0000"






}
a7e3106e-521b-421a-b1a9-52292f194cbb/000077500000000000000000000000001205171247600361475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000023271205171247600370330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/a7e3106e-521b-421a-b1a9-52292f194cbbHi folks,

I've noticed that github.com and bitbucket.org offer bugtracking, but
gitorious.org doesn't.  What do you think about attempting to work on
a bugtracker interface for a free code hosting site using BE as the
backend?  An awful lot of people (me included, occasionally!) are
using proprietary sites like github and entrusting their bugtracking
data to it; having a public hosting service that doesn't create a
dependency on that service for your bugtracking data would be pretty
compelling, I think.

The fact that gitorious is written in Ruby on Rails probably makes the
idea of using gitorious in particular a non-starter, but I thought I'd
throw it out there.  There's a gitorious thread about the general idea
here:

http://groups.google.com/group/gitorious/browse_thread/thread/40a541377060cb34

(One way to get around the Ruby/Python problem would be to have the
bugtracker simply operate independently from the rest of the site,
which I suppose would work fine but wouldn't be elegant to use.)

Are there any other popular free code hosting sites out there, perhaps
written in Python?  ;-)  If there was a site that allowed you to
choose between different SCMs, that'd be even more suited to us..

Just an idea,

- Chris.
values000066400000000000000000000003301205171247600373650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/a7e3106e-521b-421a-b1a9-52292f194cbb{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 18 Mar 2010 21:02:13 +0000"






}
c3ca23da-8514-4a72-a110-fe3ca5789ed9/000077500000000000000000000000001205171247600363255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000013161205171247600372060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/c3ca23da-8514-4a72-a110-fe3ca5789ed9Hi Lars,

   > I've been playing with BE a bit and lurking on this list. I'm a
   > Bitbucket user, and I like that each project can have source,
   > wiki and bugtracking associated with it. Now source and wiki are
   > two different plain mercurial repos. Bugtracking though, has no
   > way to export or import. This is a shame, since important data is
   > now locked into the site, which ultimately prevents competition.
   > I'd be keen for an open source web interface which serves the
   > holy trinity (source, wiki, bugs) and allows both private and
   > public projects, as the proprietary sites do. BE seems a natural
   > fit for the bugs component of a site like this. 

Yeah, I totally agree.

- Chris.
values000066400000000000000000000004631205171247600375520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/c3ca23da-8514-4a72-a110-fe3ca5789ed9{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 18 Mar 2010 22:16:14 +0000", 






    "In-reply-to": "<313fdf961003181430g5b672702h8da2f68d31ea9b0a@mail.gmail.com>"






}
d7ce9255-a1d2-4ddf-85ba-6319ac97aae7/000077500000000000000000000000001205171247600365045ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000014751205171247600373730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/d7ce9255-a1d2-4ddf-85ba-6319ac97aae7On Thu, Mar 18, 2010 at 05:02:13PM -0400, Chris Ball wrote:
> The fact that gitorious is written in Ruby on Rails probably makes the
> idea of using gitorious in particular a non-starter, but I thought I'd
> throw it out there.
> ...
> (One way to get around the Ruby/Python problem would be to have the
> bugtracker simply operate independently from the rest of the site,
> which I suppose would work fine but wouldn't be elegant to use.)

Another option would be to drive BE in a subprocess via Ruby's IO.popen.
A proof-of-concept implementation could use our standard `be' command.
A production implementation could be either of
  * multi-command BE interface to avoid repeaded repository reloads
    (may be too man process or too much memory for the server)
  * better BE caching for faster reloads
    (more work for us ;)
values000066400000000000000000000004641205171247600377320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/d7ce9255-a1d2-4ddf-85ba-6319ac97aae7{






    "Alt-id": "<20100319120053.GA20225@mjolnir.hsd1.nj.comcast.net>", 






    "Author": "\"W. Trevor King\" ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 19 Mar 2010 12:00:53 +0000", 






    "In-reply-to": ""






}
e0d438b6-5b10-4d0e-a102-80e3d1af9856/000077500000000000000000000000001205171247600361565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000006051205171247600370370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/e0d438b6-5b10-4d0e-a102-80e3d1af9856> Are there any other popular free code hosting sites out there, perhaps
> written in Python?  ;-)  If there was a site that allowed you to
> choose between different SCMs, that'd be even more suited to us..

If you like Sourceforge, it supplies all:
* http://sourceforge.net/apps/trac/sourceforge/wiki/Bazaar
* http://sourceforge.net/apps/trac/sourceforge/wiki/Mercurial

Regards,
Timmie
values000066400000000000000000000004271205171247600374030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/e0d438b6-5b10-4d0e-a102-80e3d1af9856{






    "Alt-id": "<4BA2A13A.7030106@gmx.de>", 






    "Author": "Holger Zebner ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 19 Mar 2010 02:55:06 +0000", 






    "In-reply-to": ""






}
e7f9d1d5-070b-4d9b-9c86-bb5754d8cbd2/000077500000000000000000000000001205171247600364345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/commentsbody000066400000000000000000000022701205171247600373150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/e7f9d1d5-070b-4d9b-9c86-bb5754d8cbd2On 19 March 2010 08:02, Chris Ball  wrote:

> I've noticed that github.com and bitbucket.org offer bugtracking, but
> gitorious.org doesn't.  What do you think about attempting to work on
> a bugtracker interface for a free code hosting site using BE as the
> backend?  An awful lot of people (me included, occasionally!) are
> using proprietary sites like github and entrusting their bugtracking
> data to it; having a public hosting service that doesn't create a
> dependency on that service for your bugtracking data would be pretty
> compelling, I think.
>

I've been playing with BE a bit and lurking on this list. I'm a Bitbucket
user, and I like that each project can have source, wiki and bugtracking
associated with it. Now source and wiki are two different plain mercurial
repos. Bugtracking though, has no way to export or import. This is a shame,
since important data is now locked into the site, which ultimately prevents
competition.

I'd be keen for an open source web interface which serves the holy trinity
(source, wiki, bugs) and allows both private and public projects, as the
proprietary sites do. BE seems a natural fit for the bugs component of a
site like this.

Lars
values000066400000000000000000000004771205171247600376660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518/comments/e7f9d1d5-070b-4d9b-9c86-bb5754d8cbd2{






    "Alt-id": "<313fdf961003181430g5b672702h8da2f68d31ea9b0a@mail.gmail.com>", 






    "Author": "Lars Yencken ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 19 Mar 2010 12:30:59 +0000", 






    "In-reply-to": ""






}
values000066400000000000000000000004761205171247600310160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c283cbb1-2964-4372-9d9c-117dd3a85518{






    "creator": "Praveen Arimbrathodiyil ", 






    "reporter": "Praveen Arimbrathodiyil ", 






    "severity": "wishlist", 






    "status": "open", 






    "summary": "Integrate BE with gitorious", 






    "time": "Wed, 25 Jul 2012 13:03:24 +0000"






}
c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/000077500000000000000000000000001205171247600302125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf404d71e10-9e44-4006-ab37-b4cc71647671/000077500000000000000000000000001205171247600363705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/commentsbody000066400000000000000000000001431205171247600372460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/comments/04d71e10-9e44-4006-ab37-b4cc71647671Bugs-Everywhere-Web/start-beweb.py should call python not python2.4
it works great with python2.5

values000066400000000000000000000002011205171247600376030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/comments/04d71e10-9e44-4006-ab37-b4cc71647671{






    "Author": "j", 






    "Content-type": "text/plain", 






    "Date": "Mon, 14 Apr 2008 16:43:07 +0000"






}
1cb7063f-07ce-4a76-98f9-d184e1ee7282/000077500000000000000000000000001205171247600366435ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/commentsbody000066400000000000000000000000561205171247600375240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/comments/1cb7063f-07ce-4a76-98f9-d184e1ee7282Looks like j@oil21.org fixed this in 211.3.1.
values000066400000000000000000000002411205171247600400620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4/comments/1cb7063f-07ce-4a76-98f9-d184e1ee7282{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 24 Nov 2008 13:23:43 +0000"






}
values000066400000000000000000000003661205171247600314410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c45e5ece-63e3-4fd2-b33f-0bfd06820cf4{






    "creator": "j", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "use python instead of python2.4 in Bugs-Everywhere-Web/start-beweb.py", 






    "time": "Mon, 14 Apr 2008 16:42:37 +0000"






}
c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/000077500000000000000000000000001205171247600303475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600321745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/000077500000000000000000000000001205171247600371705ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/commentsbody000066400000000000000000000005501205171247600400500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4When running `python test.py` I recieved lots of errors due to 'tla'
(the GNU Arch revision control system binary) not being installed.
I had expected test.py to only test the backends for installed VCSs.

I've added a note saying that `python test.py` tests *all* the
backends, but someone who understands the usage better can probably
write a nicer version.
values000066400000000000000000000002411205171247600404070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 13 Nov 2008 16:35:24 +0000"






}
acbecd72-988c-4899-a340-fea370ce15a8/000077500000000000000000000000001205171247600372115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/commentsbody000066400000000000000000000004061205171247600400710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/acbecd72-988c-4899-a340-fea370ce15a8I rewrote test.py, so I suppose I'm the person who understands it
better now ;).  The usage is now documented in the test.py lead
comment.  The becommand tests now attempt to run with the first
*installed* versioning system, which should reduce cryptic errors.

values000066400000000000000000000002411205171247600404300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/acbecd72-988c-4899-a340-fea370ce15a8{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Wed, 19 Nov 2008 17:11:51 +0000"






}
b3fabbe0-f05d-42a1-9037-e59e628a83e2/000077500000000000000000000000001205171247600371115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/commentsbody000066400000000000000000000002461205171247600377730ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2Ideally the tests would fail gracefully with some simple message like
"tla version control system not found", and we could skip the message
in the test.py docstring.
values000066400000000000000000000002411205171247600403300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 13 Nov 2008 16:38:36 +0000"






}
values000066400000000000000000000003231205171247600315670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e{






    "creator": "wking", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Usage of be/test.py is unclear", 






    "time": "Thu, 13 Nov 2008 16:31:41 +0000"






}
c592a1e8-f2c8-4dfb-8550-955123073947/000077500000000000000000000000001205171247600275155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002421205171247600307350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c592a1e8-f2c8-4dfb-8550-955123073947{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Needs ability to create comments"






}
c7251ff9-24e4-402d-8d4e-605a78b9a91d/000077500000000000000000000000001205171247600277315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d07145a34-6c86-4eed-ac62-5ecd00193bc7/000077500000000000000000000000001205171247600364115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/commentsbody000066400000000000000000000000311205171247600372630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/comments/07145a34-6c86-4eed-ac62-5ecd00193bc7Fixed with doc/http.txt.
values000066400000000000000000000002451205171247600376340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/comments/07145a34-6c86-4eed-ac62-5ecd00193bc7{






    "Author": "\"W. Trevor King\" ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 26 Jun 2010 19:38:51 +0000"






}
109b09ce-663e-46e3-97b9-4707ec0a9540/000077500000000000000000000000001205171247600362145ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/commentsbody000066400000000000000000000000641205171247600370740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/comments/109b09ce-663e-46e3-97b9-4707ec0a9540This seems to already have been done in the README.
values000066400000000000000000000002411205171247600374330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/comments/109b09ce-663e-46e3-97b9-4707ec0a9540{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 21 Jul 2009 14:23:37 +0000"






}
values000066400000000000000000000006521205171247600311560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "critical", 






    "status": "fixed", 






    "summary": "Document the installation.", 






    "time": "Thu, 25 Jun 2009 21:41:02 +0000"






}
c76d7899-d495-4103-9355-012c0a6fece3/000077500000000000000000000000001205171247600275735ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece322348320-40d3-422c-bdf0-0f6a6bde3fab/000077500000000000000000000000001205171247600363075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/commentsbody000066400000000000000000000003011205171247600371610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/22348320-40d3-422c-bdf0-0f6a6bde3fabIn my Tue, 25 Nov 2008 08:30:19 -0500 email:

I thought feature requests would just have "wishlist" severity.  What
would be an example of a to-do item that is not a feature request or a
bug?

values000066400000000000000000000003431205171247600375310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/22348320-40d3-422c-bdf0-0f6a6bde3fab{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:12:35 +0000", 






    "In-reply-to": "354dcfc6-5997-4ffe-b7a0-baa852213539"






}
354dcfc6-5997-4ffe-b7a0-baa852213539/000077500000000000000000000000001205171247600362745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/commentsbody000066400000000000000000000002231205171247600371510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/354dcfc6-5997-4ffe-b7a0-baa852213539In Aaron's Mon, 24 Nov 2008 19:15:08 -0500 email, he adds:

Issue trackers should provide tracking of
1. bugs
2. feature requests
3. to-do items.

values000066400000000000000000000002411205171247600375130ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/354dcfc6-5997-4ffe-b7a0-baa852213539{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:11:02 +0000"






}
c129067c-2341-4e7a-92a6-2dcd30d3bbf5/000077500000000000000000000000001205171247600362455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/commentsbody000066400000000000000000000007011205171247600371230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/c129067c-2341-4e7a-92a6-2dcd30d3bbf5If you want more granularity than just `wishlist' what about the
`severities':
  todo-critical
  todo-minor
  todo-...
Then get a list of available severities with
  $ be list --help | grep -A1 '^severity'
  severity
    wishlist,minor,serious,critical,fatal,todo-critical,todo-minor
And show all the todos:
  $ be list --severity todo-critical,todo-minor

You can configure all the severities you'd like with
  $ be set severity wishlist,minor,...
values000066400000000000000000000003431205171247600374670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/c129067c-2341-4e7a-92a6-2dcd30d3bbf5{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:20:39 +0000", 






    "In-reply-to": "f847c981-873e-41ae-b5ce-83dfe60b9afe"






}
f847c981-873e-41ae-b5ce-83dfe60b9afe/000077500000000000000000000000001205171247600365315ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/commentsbody000066400000000000000000000005631205171247600374150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/f847c981-873e-41ae-b5ce-83dfe60b9afeIn Aaron's Tue, 25 Nov 2008 09:32:29 -0500 email:

I think that approach doesn't give features the richness they need.
Features also have severities-- some features are important, and others
are just nice-to-have.  And there should be a way to list *only* bugs,
or *only* features.

In a bug tracker, "wishlist" is either an aberration, or it means a very
low severity.

values000066400000000000000000000003431205171247600377530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3/comments/f847c981-873e-41ae-b5ce-83dfe60b9afe{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 20:14:26 +0000", 






    "In-reply-to": "22348320-40d3-422c-bdf0-0f6a6bde3fab"






}
values000066400000000000000000000003341205171247600310150ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c76d7899-d495-4103-9355-012c0a6fece3{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Support 'issues', like todo, better", 






    "time": "Wed, 04 Jan 2006 21:09:02 +0000"






}
c894f10f-197d-4b22-9c5b-19f394df40d4/000077500000000000000000000000001205171247600277345ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4208595bd-35b8-44c2-bf97-fc5ef9e7a58d/000077500000000000000000000000001205171247600365365ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/commentsbody000066400000000000000000000013041205171247600374140ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/208595bd-35b8-44c2-bf97-fc5ef9e7a58dExample:

We're working happily in a versioned bugdir, and our RCS knows who we
are.  We create a temporary repository copy from a previous revision
for diff generation.  We set the RCS for the copy to "None", since we
didn't bother initializing our normal RCS in the snapshot copy.  But
now the BugDir instantized on the copy doesn't know who we are!

Solution:

Track user id in the bugdir settings file.  If you
bugdir.settings["user_id"], it will be saved and loaded.  When loaded,
it will also set bugdir.user_id.  If you set rcs.user_id, it will be
returned by rcs.get_user_id(), instead of returing the output of
rcs._rcs_get_user_id().  We should be caching the output of
_rcs_get_user_id() anyway.

values000066400000000000000000000002411205171247600377550ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/208595bd-35b8-44c2-bf97-fc5ef9e7a58d{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 22 Nov 2008 21:43:29 +0000"






}
25c67b0b-1afd-4613-a787-e0f018614966/000077500000000000000000000000001205171247600362045ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/commentsbody000066400000000000000000000000711205171247600370620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/25c67b0b-1afd-4613-a787-e0f018614966This bug duplicates a403de79-8f39-41f2-b9ec-15053b175ee2
values000066400000000000000000000002411205171247600374230ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/25c67b0b-1afd-4613-a787-e0f018614966{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 23 Nov 2008 12:37:57 +0000"






}
7dfdf230-231b-43e0-9b46-58d4d18eded1/000077500000000000000000000000001205171247600365025ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/commentsbody000066400000000000000000000000641205171247600373620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/7dfdf230-231b-43e0-9b46-58d4d18eded1Merged into bug a403de79-8f39-41f2-b9ec-15053b175ee2values000066400000000000000000000002411205171247600377210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4/comments/7dfdf230-231b-43e0-9b46-58d4d18eded1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 25 Nov 2008 02:24:05 +0000"






}
values000066400000000000000000000004161205171247600311570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c894f10f-197d-4b22-9c5b-19f394df40d4{






    "creator": "W. Trevor King ", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Allow user id to be cached in settings for duplicate bugdirs", 






    "time": "Sat, 22 Nov 2008 21:36:06 +0000"






}
cb56c990-a757-4aef-9888-a30918a7b3d7/000077500000000000000000000000001205171247600277475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003161205171247600311710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cb56c990-a757-4aef-9888-a30918a7b3d7{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Beweb: Stripey tables", 






    "time": "Wed, 04 Jan 2006 21:06:10 +0000"






}
cf56e648-3b09-4131-8847-02dff12b4db2/000077500000000000000000000000001205171247600276375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db20e5fab2a-66eb-4f7d-979f-b50181f604d4/000077500000000000000000000000001205171247600364155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/commentsbody000066400000000000000000000004461205171247600373010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/comments/0e5fab2a-66eb-4f7d-979f-b50181f604d4From Aaron's Mon, 24 Nov 2008 19:15:09 -0500 email

cf5:oc: OK, maybe not fatal, but how about a new name that suggests
process tracking, not just bugs?

If you can come with a better name, that would be great.  But naming an
issue tracker for its bug-tracking features isn't a terrible idea.

values000066400000000000000000000002411205171247600376340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/comments/0e5fab2a-66eb-4f7d-979f-b50181f604d4{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 22 Jun 2009 19:48:44 +0000"






}
f05359f6-1bfc-4aa6-9a6d-673516bc0f94/000077500000000000000000000000001205171247600363375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/commentsbody000066400000000000000000000000741205171247600372200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/comments/f05359f6-1bfc-4aa6-9a6d-673516bc0f94I dunno, bugs everywhere is such a great mental image... ;)
values000066400000000000000000000002411205171247600375560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2/comments/f05359f6-1bfc-4aa6-9a6d-673516bc0f94{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 15 Nov 2008 23:56:51 +0000"






}
values000066400000000000000000000004301205171247600310560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf56e648-3b09-4131-8847-02dff12b4db2{






    "creator": "abentley", 






    "severity": "critical", 






    "status": "closed", 






    "summary": "OK, maybe not fatal, but how about a new name that suggests process tracking, not just bugs?", 






    "time": "Fri, 27 Jan 2006 14:37:25 +0000"






}
cf77c72d-b099-413a-802e-a8892ac8c26b/000077500000000000000000000000001205171247600300075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002641205171247600312330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cf77c72d-b099-413a-802e-a8892ac8c26b{






    "assigned": "abentley", 






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "date-stamp bugs"






}
cfb52b6c-d1a6-4018-a255-27cc1c878193/000077500000000000000000000000001205171247600277115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007051205171247600311350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cfb52b6c-d1a6-4018-a255-27cc1c878193{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "Change the write operations to be inline/AJAJ operations.", 






    "time": "Sun, 01 Feb 2009 21:15:35 +0000"






}
cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c8/000077500000000000000000000000001205171247600305445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600323715ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c882ea0c61-22e9-489d-a0bd-ea49afd3f6c5/000077500000000000000000000000001205171247600374555ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c8/commentsbody000066400000000000000000000014071205171247600403370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c8/comments/82ea0c61-22e9-489d-a0bd-ea49afd3f6c5mitmanek:bugseverywhere (my_changes) $ make
git log -1 --date=short --pretty='format:"Autogenerated by make libbe/_version.py"%nversion_info = {%n    "date":"%cd",%n    "revision":"%H",%n    "committer":"%cn"}%n' > libbe/_version.py
python setup.py build
Traceback (most recent call last):
  File "setup.py", line 6, in 
    from libbe import _version
  File "/home/matej/archiv/2011/projekty/bugseverywhere/libbe/_version.py", line 5
SyntaxError: Non-ASCII character '\xc4' in file /home/matej/archiv/2011/projekty/bugseverywhere/libbe/_version.py on line 5, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
make: *** [build] Error 1
mitmanek:bugseverywhere (my_changes) $ exit


Script ukončen Po 2. leden 2012, 15:50:23 CET
values000066400000000000000000000002421205171247600406750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c8/comments/82ea0c61-22e9-489d-a0bd-ea49afd3f6c5{






    "Author": "Mat\u011bj Cepl ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 02 Jan 2012 14:55:38 +0000"






}
values000066400000000000000000000004621205171247600317700ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cff7fdc9-6b4d-4efc-9a35-c5dbda66b9c8{






    "creator": "Mat\u011bj Cepl ", 






    "reporter": "Mat\u011bj Cepl ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "make crashes on non-ASCII committer", 






    "time": "Mon, 02 Jan 2012 14:51:06 +0000"






}
d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4/000077500000000000000000000000001205171247600303055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000007161205171247600315330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Reset the state of the values when choosing \"Discard Changes.\"", 






    "time": "Sun, 01 Feb 2009 22:55:13 +0000"






}
d8dba78d-f82a-4674-9003-a0ec569b4a96/000077500000000000000000000000001205171247600300125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d8dba78d-f82a-4674-9003-a0ec569b4a965b2e1ec8-3bb7-40cd-9f4f-74e5c59838f6/000077500000000000000000000000001205171247600366105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d8dba78d-f82a-4674-9003-a0ec569b4a96/commentsbody000066400000000000000000000000401205171247600374620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d8dba78d-f82a-4674-9003-a0ec569b4a96/comments/5b2e1ec8-3bb7-40cd-9f4f-74e5c59838f6Available with
  be -d DIR html
values000066400000000000000000000002411205171247600400270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d8dba78d-f82a-4674-9003-a0ec569b4a96/comments/5b2e1ec8-3bb7-40cd-9f4f-74e5c59838f6{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 07 Aug 2009 17:58:58 +0000"






}
values000066400000000000000000000005071205171247600312360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d8dba78d-f82a-4674-9003-a0ec569b4a96{






    "creator": "gianluca ", 






    "reporter": "gianluca ", 






    "severity": "wishlist", 






    "status": "fixed", 






    "summary": "Add the possibility to specify the repository directory to \"be html\"?", 






    "time": "Fri, 03 Jul 2009 21:18:13 +0000"






}
d9959864-ea91-475a-a075-f39aa6760f98/000077500000000000000000000000001205171247600276215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314465ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f9800c6f4d8-f965-4d2f-a652-17e58c20ab8c/000077500000000000000000000000001205171247600363155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000006631205171247600372020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/00c6f4d8-f965-4d2f-a652-17e58c20ab8cHi,

   > http://bitbucket.org/sjl/cherryflavoredbugseverywhere/

Cool!  I've set up a copy here:

   http://bugsweb.bugseverywhere.org/

(Since we don't have any open bugs lately, click "Closed" at the top,
or create some, but don't expect them to persist if you do.)

   > anyone has any feedback (on any aspect of it) I'd appreciate it.

I'm pretty enthusiastic about merging this and then working on it
further.

Thanks,

- Chris.
values000066400000000000000000000004321205171247600375360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/00c6f4d8-f965-4d2f-a652-17e58c20ab8c{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 03 Jul 2009 20:55:30 -0400", 






    "In-reply-to": "2496ccca-130b-4459-bfae-9d9ef0138177"






}
16357f68-19c0-4bf9-8220-b88b52b3456d/000077500000000000000000000000001205171247600360245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000023341205171247600367060ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/16357f68-19c0-4bf9-8220-b88b52b3456dHi everyone.  I found Bugs Everywhere and really like the idea of  
distributed bug tracking.  I felt like practicing building a CherryPy  
site so I put together a quick web interface to BE.  I know there's  
already a TurboGears one in the works, but I needed an excuse to try  
out CherryPy again after working with Django for a while.

Would any of you be willing to take a look at what I've got so far and  
tell me what you think I could improve?

To install and use it:

* Install CherryPy from http://cherrypy.org/ if you don't have it.
* Install Jinja2 from http://jinja.pocoo.org/2/ if you don't have it.
* Install BugsEverywhere - you probably know how to do this :)
* Download a zip/tar of my project (or hg clone) from http://bitbucket.org/sjl/cherryflavoredbugseverywhere/
* Unzip my project and put the folder in your Python site-packages  
directory.
* Symlink site-packages/cherryflavoredbugseverywhere/cfbe.py to /usr/ 
local/bin/cfbe
* Use the "cfbe [project_root]" command to start up the web interface  
for that project.
* Visit http://localhost:8080/ in a browser.

I know that's a lot of steps.  I'd like to streamline it quite a bit,  
but first I wanted to see if you have any feedback on the system  
itself. Thanks!
values000066400000000000000000000003551205171247600372510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/16357f68-19c0-4bf9-8220-b88b52b3456d{






    "Alt-id": "<272FECFE-D16B-47B7-B39A-E2C8A718CCC5@stevelosh.com>", 






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 16:30:33 -0500"






}
1f25cba2-03ee-43e1-a042-ef6724938ad8/000077500000000000000000000000001205171247600362775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000057671205171247600371760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/1f25cba2-03ee-43e1-a042-ef6724938ad8Those are beautiful templates -- can you share those?  I'd love to
study the HTML and CSS behind them.

On Sat, Feb 7, 2009 at 5:48 PM, Steve Losh  wrote:
> Hey Chris, thanks for the comments.
>
>>
>> My initial impression is that this looks good enough already to merge as
>> a replacement for the turbogears site.  What does everyone else think?
>>
>
> I'm not quite sure it's there yet.  There are a bunch of bugs I've got
> marked as "beta" that I'd like to see fixed before it's ready for real use.
>  Hopefully they shouldn't be too tough to fix.  You can point CFBE at itself
> to see them.  :)
>
>> Could you explain a little about how you handle authorship of bug
>> changes at the moment, and if it looks plausible to try making it
>> multiuser?  (Having it handle more than one "user" logged in at once.)
>>
>
> That's something I need advice on.  Right now CFBE is pretty much only
> suitable for local use - you check out whatever you're working on and use it
> as a local interface to the bugs in the repository.  Change those, check in,
> etc.  It's effectively just a pretty version of the command line be tool.
>
> I haven't used CherryPy's session/authentication support before.  This might
> be a good time for me to learn.  One way it might be able to handle multiple
> users hitting a central server:
>
> * Each user has to register with the server and be approved by an admin.
> * Each account would be mapped to a contributor string, the same one that
> would show up if you were going to commit to the repository.
> * Once you have an account, you'd login to make any changes.
>
>
> Aside from all that, I'm a little fuzzy on how a centralized interface to a
> distributed bug tracking system should work.  A read-only interface to a
> central "main" repository would be easy.  Run the server in read-only mode
> pointing at the main repository.  People can use it to look at the bugs in
> the tip of that repository.
>
> If it's not read-only, what happens when a user changes/adds/whatevers a
> bug?  Should CFBE commit that change to the repository right then and there?
>  Should it never commit, just update the bugdir and let the commits happen
> manually?
>
> What happens when you have multiple branches for a repository?  Should there
> be one CFBE instance for each branch, or a single one that lets you switch
> between branches (effectively switching between revisions)?
>
> Those are the kind of things that don't really apply when CFBE is just a
> local interface to a single repository.  If anyone has any advice on how a
> multi-user interface should work I'd love to hear it!
>
> --
> Steve Losh
> http://stevelosh.com/
>
>
> _______________________________________________
> Be-devel mailing list
> Be-devel@bugseverywhere.org
> http://void.printf.net/cgi-bin/mailman/listinfo/be-devel
>



-- 
Matthew Wilson
matt@tplus1.com
http://tplus1.com

_______________________________________________
Be-devel mailing list
Be-devel@bugseverywhere.org
http://void.printf.net/cgi-bin/mailman/listinfo/be-devel
values000066400000000000000000000004701205171247600375220ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/1f25cba2-03ee-43e1-a042-ef6724938ad8{






    "Alt-id": "", 






    "Author": "Matthew Wilson ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 18:31:04 -0500", 






    "In-reply-to": "21c90231-d7f2-49bb-97d9-99e16459d799"






}
21c90231-d7f2-49bb-97d9-99e16459d799/000077500000000000000000000000001205171247600360545ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000045731205171247600367450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/21c90231-d7f2-49bb-97d9-99e16459d799Hey Chris, thanks for the comments.

>
> My initial impression is that this looks good enough already to  
> merge as
> a replacement for the turbogears site.  What does everyone else think?
>

I'm not quite sure it's there yet.  There are a bunch of bugs I've got  
marked as "beta" that I'd like to see fixed before it's ready for real  
use.  Hopefully they shouldn't be too tough to fix.  You can point  
CFBE at itself to see them.  :)

> Could you explain a little about how you handle authorship of bug
> changes at the moment, and if it looks plausible to try making it
> multiuser?  (Having it handle more than one "user" logged in at once.)
>

That's something I need advice on.  Right now CFBE is pretty much only  
suitable for local use - you check out whatever you're working on and  
use it as a local interface to the bugs in the repository.  Change  
those, check in, etc.  It's effectively just a pretty version of the  
command line be tool.

I haven't used CherryPy's session/authentication support before.  This  
might be a good time for me to learn.  One way it might be able to  
handle multiple users hitting a central server:

* Each user has to register with the server and be approved by an admin.
* Each account would be mapped to a contributor string, the same one  
that would show up if you were going to commit to the repository.
* Once you have an account, you'd login to make any changes.


Aside from all that, I'm a little fuzzy on how a centralized interface  
to a distributed bug tracking system should work.  A read-only  
interface to a central "main" repository would be easy.  Run the  
server in read-only mode pointing at the main repository.  People can  
use it to look at the bugs in the tip of that repository.

If it's not read-only, what happens when a user changes/adds/whatevers  
a bug?  Should CFBE commit that change to the repository right then  
and there?  Should it never commit, just update the bugdir and let the  
commits happen manually?

What happens when you have multiple branches for a repository?  Should  
there be one CFBE instance for each branch, or a single one that lets  
you switch between branches (effectively switching between revisions)?

Those are the kind of things that don't really apply when CFBE is just  
a local interface to a single repository.  If anyone has any advice on  
how a multi-user interface should work I'd love to hear it!
values000066400000000000000000000004571205171247600373040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/21c90231-d7f2-49bb-97d9-99e16459d799{






    "Alt-id": "", 






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 17:48:06 -0500", 






    "In-reply-to": "42d57a41-219f-46db-9fda-21b42351da63"






}
2496ccca-130b-4459-bfae-9d9ef0138177/000077500000000000000000000000001205171247600363165ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000003411205171247600371740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/2496ccca-130b-4459-bfae-9d9ef0138177Speaking of that interface, I changed up the look and feel a bit last  
weekend.  It's still at http://bitbucket.org/sjl/cherryflavoredbugseverywhere/ 
  -- if anyone has any feedback (on any aspect of it) I'd appreciate it.
values000066400000000000000000000004571205171247600375460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/2496ccca-130b-4459-bfae-9d9ef0138177{






    "Alt-id": "<4701D71B-A14D-4C63-ABCC-E7E5FFE4E4BA@stevelosh.com>", 






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 03 Jul 2009 20:34:51 -0400", 






    "In-reply-to": "16357f68-19c0-4bf9-8220-b88b52b3456d"






}
42d57a41-219f-46db-9fda-21b42351da63/000077500000000000000000000000001205171247600362155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000016141205171247600370770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/42d57a41-219f-46db-9fda-21b42351da63Hi Steve,

   > Hi everyone.  I found Bugs Everywhere and really like the idea of
   > distributed bug tracking.  I felt like practicing building a
   > CherryPy site so I put together a quick web interface to BE.  I
   > know there's already a TurboGears one in the works, but I needed an
   > excuse to try out CherryPy again after working with Django for a
   > while.

This looks awesome, thanks!  I've taken some screenshots for others to
see:

http://chris.printf.net/cfbe-main.png
http://chris.printf.net/cfbe-detail.png

My initial impression is that this looks good enough already to merge as
a replacement for the turbogears site.  What does everyone else think?

Could you explain a little about how you handle authorship of bug
changes at the moment, and if it looks plausible to try making it
multiuser?  (Having it handle more than one "user" logged in at once.)

Great work, thanks!

- Chris.
values000066400000000000000000000004321205171247600374360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/42d57a41-219f-46db-9fda-21b42351da63{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 17:19:22 -0500", 






    "In-reply-to": "16357f68-19c0-4bf9-8220-b88b52b3456d"






}
5e339bac-f4f3-407b-974a-b88795d3573b/000077500000000000000000000000001205171247600362545ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000012741205171247600371400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/5e339bac-f4f3-407b-974a-b88795d3573bHi,

   > Works for me.  I've done this now, which closes the last open bug
   > in my repo :D.

Wow.  Congrats!  I've merged your branch.

   > All the new functionality comes from bug.extra_strings, which
   > provides a list for storing arbitrary strings in the bug's
   > permanent state.

That's going to be really useful.

   > Next up: regexp searching for list --extra-strings! ;).

Awesome.

   > Oh, and obviously there must still be bugs in BE.  Please submit
   > more ;).

Perhaps it's a good time to merge Steve Losh's CherryPy web interface?

http://void.printf.net/pipermail/be-devel/2009-February/000095.html
http://bitbucket.org/sjl/cherryflavoredbugseverywhere/

Thanks,

- Chris.
values000066400000000000000000000004321205171247600374750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/5e339bac-f4f3-407b-974a-b88795d3573b{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 25 Jun 2009 10:02:44 -0400", 






    "In-reply-to": "16357f68-19c0-4bf9-8220-b88b52b3456d"






}
7fa903a3-f9e6-4e4d-8128-0f26e1ce664b/000077500000000000000000000000001205171247600363235ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000016141205171247600372050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/7fa903a3-f9e6-4e4d-8128-0f26e1ce664bOn Jun 25, 2009, at 10:02 AM, Chris Ball  wrote:
>
>> Oh, and obviously there must still be bugs in BE.  Please submit
>> more ;).
>
> Perhaps it's a good time to merge Steve Losh's CherryPy web interface?
>
> http://void.printf.net/pipermail/be-devel/2009-February/000095.html
> http://bitbucket.org/sjl/cherryflavoredbugseverywhere/
>

Hey, I haven't touched the web interface in a while, but I should have  
some time to fix some stuff up tonight and tomorrow. Hold off on  
merging it in until then.

I'm still curious as to what people think the role of a web interface  
like this should be. When I wrote it I meant it as a single-user  
interface like the command line one. It could definitely work as a  
public, read-only interface too.

If the goal is to allow more than one person to add issues, how should  
commits go? One commit per change? Commit every X minutes if necessary?
values000066400000000000000000000004571205171247600375530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/7fa903a3-f9e6-4e4d-8128-0f26e1ce664b{






    "Alt-id": "<26FBD153-39C5-4641-AF5E-749731964086@stevelosh.com>", 






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 25 Jun 2009 10:23:04 -0400", 






    "In-reply-to": "5e339bac-f4f3-407b-974a-b88795d3573b"






}
c339db7e-d55b-400e-996d-41c938556679/000077500000000000000000000000001205171247600361245ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000000701205171247600370010ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/c339db7e-d55b-400e-996d-41c938556679Chris merged CFBE into the trunk, which fixes this bug.
values000066400000000000000000000002451205171247600373470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/c339db7e-d55b-400e-996d-41c938556679{






    "Author": "\"W. Trevor King\" ", 






    "Content-type": "text/plain", 






    "Date": "Fri, 25 Jun 2010 16:40:50 +0000"






}
e249e2aa-2029-4a96-bc84-962366e07fd6/000077500000000000000000000000001205171247600361645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000021671205171247600370520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/e249e2aa-2029-4a96-bc84-962366e07fd6On Sat, Feb 07, 2009 at 05:48:06PM -0500, Steve Losh wrote:
>> My initial impression is that this looks good enough already to merge as
>> a replacement for the turbogears site.  What does everyone else think?
>
> I'm not quite sure it's there yet.  There are a bunch of bugs I've
> got marked as "beta" that I'd like to see fixed before it's ready
> for real use.  Hopefully they shouldn't be too tough to fix.  You
> can point CFBE at itself to see them.  :)

Steve's also versioning it with Mercurial.  Will he mind changing to
Bazaar?

Steve, I've touched up CFBE to work with my current BE branch.  Some
of the changes apply to the trunk BE, and hopefully the rest will
soon.  I think the version-naming issue is what's currently blocking
their adoption ;).  I've put up my CFBE branch at
  static-http://www.physics.drexel.edu/~wking/code/hg/cfbe
for Mercurial.

Everyone, should CFBE-specific discussions move off-list?  More
generally, I've been sending in lots of what-I'm-working on messages,
but not hearing much back, so let me know if I'm being too obnoxious,
and I'll shut up (or at least move more off-list) ;).

Cheers,
Trevor
values000066400000000000000000000004441205171247600374100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/e249e2aa-2029-4a96-bc84-962366e07fd6{






    "Alt-id": "<20090721135907.GB4469@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 21 Jul 2009 09:59:07 -0400", 






    "In-reply-to": "21c90231-d7f2-49bb-97d9-99e16459d799"






}
fa60ce1f-a809-4fb3-a2cd-1a2e0bdd0e0a/000077500000000000000000000000001205171247600367115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/commentsbody000066400000000000000000000063241205171247600375760ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/fa60ce1f-a809-4fb3-a2cd-1a2e0bdd0e0aOn Thu, Jun 25, 2009 at 10:23:04AM -0400, Steve Losh wrote:
> I'm still curious as to what people think the role of a web interface like 
> this should be. When I wrote it I meant it as a single-user interface like 
> the command line one. It could definitely work as a public, read-only 
> interface too.

I think the multi-user/public is the way to go.  I'd also like to see
a procmail-able script to handle multi-user/public access via email,
which would have all the same issues we're worrying about here.

On Sat, Feb 07, 2009 at 05:48:06PM -0500, Steve Losh wrote:
> I haven't used CherryPy's session/authentication support before.  This 
> might be a good time for me to learn.  One way it might be able to handle 
> multiple users hitting a central server:
>
> * Each user has to register with the server and be approved by an admin.
> * Each account would be mapped to a contributor string, the same one that 
> would show up if you were going to commit to the repository.
> * Once you have an account, you'd login to make any changes.

This sounds good to me.  Yay spam reduction ;).

> If it's not read-only, what happens when a user changes/adds/whatevers a 
> bug?  Should CFBE commit that change to the repository right then and 
> there?  Should it never commit, just update the bugdir and let the commits 
> happen manually?

On Thu, Jun 25, 2009 at 10:23:04AM -0400, Steve Losh wrote:
> One commit per change? Commit every X minutes if necessary?

On Sat, Feb 07, 2009 at 05:48:06PM -0500, Steve Losh wrote:
> What happens when you have multiple branches for a repository?  Should 
> there be one CFBE instance for each branch, or a single one that lets you 
> switch between branches (effectively switching between revisions)?

There are interesting discussions about the role of distributed
bugtracking here (I'm sure there are others):
  http://lwn.net/Articles/281849/
  http://community.livejournal.com/evan_tech/248736.html

Personally, I've never done much cherry-picking or anything that would
require me to determine exactly which parts of someone's work I want
and which I don't want.  I just merge someone's head and edit out the
bits I don't like, a process that also works well for our current
"commit however you want" BE development model ;).  Maybe that just
shows that I only work on minor branches of small projects :p.  In the
absence of big-project advice, I think we just limit the web front end
to our current model, and let the web interface commit however it
wants as well ;).  +1 for adding a  button to the web
interface ;).

One caveat about a multi-user interface would be that it would allow
the casual users to commit bugs about whatever version they had
installed onto the head of the public-bug branch.  In order to figure
out what version of the project they were talking about, the project
should have a way for the user to get a unique version string, ideally
be the bzr-revision-id/git-commit/etc. of the commit for the version
they were using.  This would allow developers to determine what branch
to work on with the bug fix, and what branches needed to pull the
eventual fix.  If the initially reported buggy version wasn't actually
the root of the bug, oh well :p.  Material for a later related bug
report or a reopen.
values000066400000000000000000000004451205171247600401360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98/comments/fa60ce1f-a809-4fb3-a2cd-1a2e0bdd0e0a{






    "Alt-id": "<20090625154734.GA19441@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 25 Jun 2009 11:47:34 -0400", 






    "In-reply-to": "16357f68-19c0-4bf9-8220-b88b52b3456d"






}
values000066400000000000000000000005631205171247600310470ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d9959864-ea91-475a-a075-f39aa6760f98{






    "assigned": "Steve Losh ", 






    "creator": "W. Trevor King ", 






    "reporter": "Steve Losh ", 






    "severity": "wishlist", 






    "status": "fixed", 






    "summary": "CherryPy interface \"Cherry-flavored BE\"", 






    "time": "Tue, 21 Jul 2009 18:52:44 +0000"






}
da2b09ff-af24-40f3-9b8d-6ffaa5f41164/000077500000000000000000000000001205171247600302155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000005071205171247600314410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/da2b09ff-af24-40f3-9b8d-6ffaa5f41164{






    "creator": "Gianluca Montecchi ", 






    "reporter": "Gianluca Montecchi ", 






    "severity": "wishlist", 






    "status": "open", 






    "summary": "Add an icon near the status string in \"be html\" output", 






    "time": "Tue, 04 Aug 2009 21:15:52 +0000"






}
dac91856-cb6a-4f69-8c03-38ff0b29aab2/000077500000000000000000000000001205171247600301415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab21182d8e6-5e87-4d0a-b271-c298c36bbc21/000077500000000000000000000000001205171247600365465ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/commentsbody000066400000000000000000000004131205171247600374240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/comments/1182d8e6-5e87-4d0a-b271-c298c36bbc21Problem was due to 
  open-value-file
  write-value-file
  add/update-value-file
which should be (and now is)
  open-value-file
  write-value-file
  close-value-file
  add/update-value-file
since it was getting added before the changes we'd written were flushed out.
values000066400000000000000000000002421205171247600377660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/comments/1182d8e6-5e87-4d0a-b271-c298c36bbc21{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Wed, 19 Nov 2008 01:12:37 +0000"






}
8097468f-87a9-4d84-ac20-1772393bb54d/000077500000000000000000000000001205171247600363555ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/commentsbody000066400000000000000000000011341205171247600372340ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/comments/8097468f-87a9-4d84-ac20-1772393bb54dIt looks like the mapfiles are not being 'git add'ed after changes.

$ mkdir BEtest
$ cd BEtest
$ git init
$ be set-root .
$ be new 'new'
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#
#       new file: .be/bugs/8f021d79-44f5-479f-af12-c37e2caf3ce1/values
#       new file: .be/settings
#       new file: .be/version
#
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#
#       modified:   .be/bugs/8f021d79-44f5-479f-af12-c37e2caf3ce1/values
#       modified:   .be/settings
#

values000066400000000000000000000002411205171247600375740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2/comments/8097468f-87a9-4d84-ac20-1772393bb54d{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 17 Nov 2008 15:03:58 +0000"






}
values000066400000000000000000000003411205171247600313610ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dac91856-cb6a-4f69-8c03-38ff0b29aab2{






    "creator": "wking", 






    "severity": "serious", 






    "status": "fixed", 






    "summary": "BE not notifying git of some changed files", 






    "time": "Mon, 17 Nov 2008 15:02:15 +0000"






}
dba25cfd-aa15-457c-903a-b53ecb5a3b2c/000077500000000000000000000000001205171247600303265ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004121205171247600315450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dba25cfd-aa15-457c-903a-b53ecb5a3b2c{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "there's a tyop in the wx example gui (in the line that appends ../../ to sys.path)", 






    "time": "Tue, 27 Dec 2005 16:59:49 +0000"






}
dcca51b3-bf8f-4482-8f67-662cfbcb9c6c/000077500000000000000000000000001205171247600303135ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600321405ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dcca51b3-bf8f-4482-8f67-662cfbcb9c6cd4a87066-c5f4-49f1-9bd9-a872c8e4ffe6/000077500000000000000000000000001205171247600371225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dcca51b3-bf8f-4482-8f67-662cfbcb9c6c/commentsbody000066400000000000000000000036241205171247600400070ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dcca51b3-bf8f-4482-8f67-662cfbcb9c6c/comments/d4a87066-c5f4-49f1-9bd9-a872c8e4ffe6BE should not crash when be list|show is used on a git repository that
have not the config variables user.name and user.email defined in the
.git/config file.

To view the bug, in my opinion shold not be mandatory to have these two options
defined


Traceroute:

galactica:~/Devel/dumb> be show 996
Traceback (most recent call last):
  File "/usr/bin/be", line 62, in 
    sys.exit(cmdutil.execute(args[0], args[1:]))
  File "/usr/lib/python2.5/site-packages/libbe/cmdutil.py", line 76, in execute
    ret = cmd.execute([a.decode(enc) for a in args])
  File "/usr/lib/python2.5/site-packages/becommands/show.py", line 60, in execute
    bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
  File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 302, in __init__
    self.load()
  File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 382, in load
    self.load_settings()
  File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 411, in load_settings
    self._setup_user_id(self.user_id)
  File "/usr/lib/python2.5/site-packages/libbe/properties.py", line 293, in _fget
    value = generator(self)
  File "/usr/lib/python2.5/site-packages/libbe/bugdir.py", line 177, in _guess_user_id
    return self.rcs.get_user_id()
  File "/usr/lib/python2.5/site-packages/libbe/rcs.py", line 258, in get_user_id
    id = self._rcs_get_user_id()
  File "/usr/lib/python2.5/site-packages/libbe/git.py", line 56, in _rcs_get_user_id
    status,output,error = self._u_invoke_client("config", "user.name")
  File "/usr/lib/python2.5/site-packages/libbe/rcs.py", line 458, in _u_invoke_client
    return self._u_invoke(cl_args, stdin=stdin,expect=expect,cwd=directory)
  File "/usr/lib/python2.5/site-packages/libbe/rcs.py", line 450, in _u_invoke
    raise CommandError(args, status, error)
libbe.rcs.CommandError: Command failed (1):


while executing
  ['git', 'config', 'user.name']
galactica:~/Devel/dumb>

values000066400000000000000000000002411205171247600403410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dcca51b3-bf8f-4482-8f67-662cfbcb9c6c/comments/d4a87066-c5f4-49f1-9bd9-a872c8e4ffe6{






    "Author": "Gianluca Montecchi ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 03 Aug 2009 20:33:30 +0000"






}
values000066400000000000000000000005151205171247600315360ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dcca51b3-bf8f-4482-8f67-662cfbcb9c6c{






    "creator": "Gianluca Montecchi ", 






    "reporter": "Gianluca Montecchi ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "BE should not crash if user.email  and user.name are not defined", 






    "time": "Mon, 03 Aug 2009 20:30:43 +0000"






}
dd7aa57c-f184-495a-8520-2676c1066fb4/000077500000000000000000000000001205171247600276455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600314725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb424aab4bf-b525-48d6-9666-626e3ddcecf7/000077500000000000000000000000001205171247600365105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/commentsbody000066400000000000000000000000601205171247600373640ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/comments/24aab4bf-b525-48d6-9666-626e3ddcecf7I think I just need to adjust the wrapper width.values000066400000000000000000000002401205171247600377260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/comments/24aab4bf-b525-48d6-9666-626e3ddcecf7{






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 07 Feb 2009 18:36:56 +0000"






}
values000066400000000000000000000007011205171247600310650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "open", 






    "summary": "The external pane sometimes loads in the wrong place.", 






    "time": "Mon, 02 Feb 2009 01:11:47 +0000"






}
decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d/000077500000000000000000000000001205171247600305145ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006531205171247600317420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Implement the target filters.", 






    "time": "Sat, 31 Jan 2009 02:58:44 +0000"






}
e0155831-499f-421a-ad02-cd15fc3fecf1/000077500000000000000000000000001205171247600300445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002451205171247600312670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0155831-499f-421a-ad02-cd15fc3fecf1{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "No way to commit/update from beweb"






}
e0858b12-0be3-49bb-ad7a-030e488bb2f1/000077500000000000000000000000001205171247600300375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600316645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f109f950d4-9366-4e7b-98b3-9057999f8f38/000077500000000000000000000000001205171247600362335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000014531205171247600371160ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/09f950d4-9366-4e7b-98b3-9057999f8f38On Thu, Jul 16, 2009 at 09:39:30AM -0400, W. Trevor King wrote:
> Disclaimer: I imaging the current implementation will choke on
> non-text/plain content types.  Also possibly on non-ascii encodings.

Non-ascii encodings are now handled (although now the output is
base64-encoded).  This is limited by poor unicode handling in the
email module for current pythons, see the log for more details.

> I should probably allow the "help" command ... ;).

Added, but it currently shows _all_ commands, not just allowed
commands.

-- 
This email may be signed or encrypted with GPG (http://www.gnupg.org).
The GPG signature (if present) will be attached as 'signature.asc'.
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt
values000066400000000000000000000004451205171247600374600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/09f950d4-9366-4e7b-98b3-9057999f8f38{






    "Alt-id": "<20090718131220.GA31832@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 18 Jul 2009 09:12:20 -0400", 






    "In-reply-to": "f1cde826-0506-4b4a-92ab-8499e953fa49"






}
704b37ab-01bb-43d3-9e9f-f0d354f63c7d/000077500000000000000000000000001205171247600366045ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000014341205171247600374660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/704b37ab-01bb-43d3-9e9f-f0d354f63c7dOn Sat, Jul 18, 2009 at 06:05:51PM -0400, W. Trevor King wrote:
> My email interface now supports bug creation/comments that look
> like:
> 
>     $ cat | mail -s "[be-bug] new" "whatever-dev@fancyprojects.com"
>     The demuxulizer is broken
>     
>     
>     ^D

The move towards the DBT interface means this example should now look
like

  $ cat | mail -s "[be-bug:submit] The demuxulizer is broken" whatever-dev@fancyprojects.com
  Version: XYZ

  
  --
  Ignored text
  ^D

-- 
This email may be signed or encrypted with GPG (http://www.gnupg.org).
The GPG signature (if present) will be attached as 'signature.asc'.
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt
values000066400000000000000000000004441205171247600400300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/704b37ab-01bb-43d3-9e9f-f0d354f63c7d{






    "Alt-id": "<20090719130649.GA4164@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 19 Jul 2009 09:06:49 -0400", 






    "In-reply-to": "7b904395-86e9-4eb1-8534-69cec63801d4"






}
7b904395-86e9-4eb1-8534-69cec63801d4/000077500000000000000000000000001205171247600362565ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000014711205171247600371410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/7b904395-86e9-4eb1-8534-69cec63801d4Ah, it's been a good day :).  My email interface now supports bug
creation/comments that look like:

    $ cat | mail -s "[be-bug] new" "whatever-dev@fancyprojects.com"
    The demuxulizer is broken
    
    
    ^D

Which is probably easy enough for just about anybody ;).  Also easy
for other projects to wrap into one of their tools:

    $ cat | projectAexecutable --report-bug
    The demuxulizer is broken
    
    
    ^D

Which could do things like automatically add the version string, OS
name, etc.

-- 
This email may be signed or encrypted with GPG (http://www.gnupg.org).
The GPG signature (if present) will be attached as 'signature.asc'.
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt
values000066400000000000000000000004451205171247600375030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/7b904395-86e9-4eb1-8534-69cec63801d4{






    "Alt-id": "<20090718220551.GB32230@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 18 Jul 2009 18:05:51 -0400", 






    "In-reply-to": "09f950d4-9366-4e7b-98b3-9057999f8f38"






}
a0e846ed-1549-4ec3-b94d-391e54610f61/000077500000000000000000000000001205171247600363745ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000051341205171247600372570ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/a0e846ed-1549-4ec3-b94d-391e54610f61On Sun, Jul 19, 2009 at 09:09:05AM +1000, Ben Finney wrote:
> > The interface is basically "place your be command in the subject line"
> 
> I would far prefer an interface of “place as many BE commands as you
> like at the top of the message body, ending with an optional terminator
> command, and they will each be executed in turn”.
> ...

I think the idea behind my first approach was "you guys have
experience with the command line BE interface, so it will be easier to
test if you don't have to learn the DBT interface."  The Debian people
have been doing this for a while though, so I imagine their email
interface is pretty good ;).

Here's a short primer on my take on the DBT interface.

The DBT has three main email addresses, each with it's own parsing style.
  1) creating bugs (submit@bugs.debian.org)
  2) commenting on bugs (@bugs.debian.org)
  3) controlling/managing bugs (control@bugs.debian.org)
I'm trying to squeeze these down into a single email address to avoid
having to tinker with the mail delivery system, so I've got everything
at (wking at tremily dot us) with subject tags:
  1) creating bugs
     Subject: [be-bug:submit] new bug summary ...
  2) commenting on bugs
     Subject: [be-bug:] human-specific subject
  3) control
     Subject: [be-bug] human-specific subject

The parsing styles each follow their DBT counterparts, but currently
have a much restricted breadth.

The control-style consists of a list of allowed be commands, with one
command per line.  Blank lines and lines beginning with '#' are
ignored, as well anything following a line starting with '--'.  All the
listed commands are executed in order and their output returned.

The comment-style interface appends a comment to the bug specified in
the subject tag.  The the first non-multipart body is attached with
the appropriate content-type.  In the case of "text/plain" contents,
anything following a line starting with '--' is stripped.

The create-style interface creates a bug whose summary is given by the
email's post-tag subject.  The body of the email must begin with a
psuedo-header containing at least the "Version" field.  Anything after
the pseudo-header and before a line starting with '--' is, if present,
attached as the bugs first comment.

Take a look at my interfaces/email/interactive/examples for some
examples.

-- 
This email may be signed or encrypted with GPG (http://www.gnupg.org).
The GPG signature (if present) will be attached as 'signature.asc'.
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt
values000066400000000000000000000004441205171247600376200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/a0e846ed-1549-4ec3-b94d-391e54610f61{






    "Alt-id": "<20090719130153.GA4036@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 19 Jul 2009 09:01:53 -0400", 






    "In-reply-to": "cfd7cbc7-27ad-4618-8530-cb4d7323514a"






}
cfd7cbc7-27ad-4618-8530-cb4d7323514a/000077500000000000000000000000001205171247600365225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000021701205171247600374020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/cfd7cbc7-27ad-4618-8530-cb4d7323514a"W. Trevor King"  writes:

> The interface is basically "place your be command in the subject line"

I would far prefer an interface of “place as many BE commands as you
like at the top of the message body, ending with an optional terminator
command, and they will each be executed in turn”.

This would allow a single message to perform a batch of BE commands that
are related, instead of requiring to send each command in a separate
message.

It would also leave the subject field free for something more
descriptive. The subject field could also be used as the summary field
of newly-created bug reports. With a terminator command, this would
allow the message to be sent both to BE and to some other recipient
(e.g. a mailing list) explaining the change.

Have a look at the email interface of the Debian BTS for an example
.

-- 
 \        “Pinky, are you pondering what I'm pondering?” “Wuh, I think |
  `\    so, Brain, but will they let the Cranberry Duchess stay in the |
_o__)                         Lincoln Bedroom?” —_Pinky and The Brain_ |
Ben Finney
values000066400000000000000000000004521205171247600377450ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/cfd7cbc7-27ad-4618-8530-cb4d7323514a{






    "Alt-id": "<87fxctbnce.fsf@benfinney.id.au>", 






    "Author": "Ben Finney ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 19 Jul 2009 09:09:05 +1000", 






    "In-reply-to": "f1cde826-0506-4b4a-92ab-8499e953fa49"






}
f1cde826-0506-4b4a-92ab-8499e953fa49/000077500000000000000000000000001205171247600364665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000027211205171247600373500ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/f1cde826-0506-4b4a-92ab-8499e953fa49I finally did something towards a useful interactive email interface
;).  As per our new guidelines, I'll develop this feature in it's own
branch:
  http://www.physics.drexel.edu/~wking/code/bzr/be-email

The interface is basically "place your be command in the subject line"
with a few exceptions.  Some examples:
  Subject: [be-bug] list --status=all
  Subject: [be-bug] show --xml ID
  Subject: [be-bug] new
  Subject: [be-bug] comment ID
In the case of "new", the bug description is extracted from the first
non-blank body line.  In the case of "comment", the email body is used
as the comment.  Currently only "list", "show", "new", and "comment"
are allowed.

You should get a reply email with exit status, stdout, and stderr from
your command.

Send some mail to [wking (at) tremily (dot) us] to try it out!  Depending
on spam attraction, this might be a limited time offer ;).

Hopefully this lowers the entry barrier for bug reporting :).

Disclaimer: I imaging the current implementation will choke on
non-text/plain content types.  Also possibly on non-ascii encodings.
Probably lots of other bugs too... ;).  For example, I should probably
allow the "help" command ... ;).

Cheers,
Trevor

-- 
This email may be signed or encrypted with GPG (http://www.gnupg.org).
The GPG signature (if present) will be attached as 'signature.asc'.
For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy

My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt
values000066400000000000000000000003431205171247600377100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/f1cde826-0506-4b4a-92ab-8499e953fa49{






    "Alt-id": "<20090716133930.GC12213@mjolnir.home.net>", 






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 16 Jul 2009 09:39:30 -0400"






}
fba8de97-9c61-4a08-b3e7-d8a95d6efe54/000077500000000000000000000000001205171247600370005ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/commentsbody000066400000000000000000000002621205171247600376600ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/fba8de97-9c61-4a08-b3e7-d8a95d6efe54Hi Trevor,

   > I finally did something towards a useful interactive email
   > interface ;).

Wow, nice!  That'll be really useful.

- Chris.
-- 
Chris Ball   
values000066400000000000000000000004321205171247600402210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1/comments/fba8de97-9c61-4a08-b3e7-d8a95d6efe54{






    "Alt-id": "", 






    "Author": "Chris Ball ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 18 Jul 2009 21:07:33 -0400", 






    "In-reply-to": "f1cde826-0506-4b4a-92ab-8499e953fa49"






}
values000066400000000000000000000005471205171247600312670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e0858b12-0be3-49bb-ad7a-030e488bb2f1{






    "assigned": "W. Trevor King ", 






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "wishlist", 






    "status": "fixed", 






    "summary": "Interactive email interface", 






    "time": "Tue, 21 Jul 2009 18:53:50 +0000"






}
e22a9048-9a97-41b1-91a2-d4178c674b37/000077500000000000000000000000001205171247600275055ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000005601205171247600307300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e22a9048-9a97-41b1-91a2-d4178c674b37{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "unconfirmed", 






    "summary": "Think about authentication.", 






    "time": "Sat, 31 Jan 2009 03:02:19 +0000"






}
e23d7982-7e32-4c78-b62e-83ecc42b4cd7/000077500000000000000000000000001205171247600300155ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000025711205171247600312440ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e23d7982-7e32-4c78-b62e-83ecc42b4cd7{






    "creator": "W. Trevor King ", 






    "extra_strings": [






        "BLOCKED-BY:171819aa-c092-4ddf-ace3-797635fa2572", 






        "BLOCKED-BY:35b962a0-a64a-4b5c-82c5-ea740e8a6322", 






        "BLOCKED-BY:42716dc2-6201-4537-b5fd-e1280812a53d", 






        "BLOCKED-BY:4286c0f8-5703-4bc1-b256-414dc408f067", 






        "BLOCKED-BY:528b2e84-a944-4628-a18f-cc1def1c7e16", 






        "BLOCKED-BY:545311df-8c88-4504-9f83-11d7c5d8aa50", 






        "BLOCKED-BY:55e76f74-37fb-4254-8498-54b703ba54f6", 






        "BLOCKED-BY:870d5dbe-6449-4ec4-ae6f-e84bebadbce0", 






        "BLOCKED-BY:8cb9045c-7266-4c40-9a76-65f3c5d5bb60", 






        "BLOCKED-BY:984472f6-98f5-48fc-b521-70a1e5f60614", 






        "BLOCKED-BY:bef126a0-27be-402f-84fa-85f6342c97c0", 






        "BLOCKED-BY:c7251ff9-24e4-402d-8d4e-605a78b9a91d", 






        "BLOCKED-BY:d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4", 






        "BLOCKED-BY:decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d", 






        "BLOCKED-BY:e645d562-6f84-4df2-b8ee-86ef42546c16", 






        "BLOCKED-BY:fd96c69d-6f78-4c0c-af6e-e01e9b8516d3", 






        "BLOCKS:76a6140e-0800-453c-9720-29cc161663d1", 






        "TAG:CFBE"






    ], 






    "severity": "target", 






    "status": "fixed", 






    "summary": "alpha", 






    "time": "Sun, 06 Dec 2009 07:14:33 +0000"






}
e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/000077500000000000000000000000001205171247600301545ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320015ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0bcd6e5d4-8d03-43ad-a10d-17619735d077/000077500000000000000000000000001205171247600365575ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/commentsbody000066400000000000000000000003731205171247600374420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/comments/bcd6e5d4-8d03-43ad-a10d-17619735d077There is definitely a difference between the person who reports a bug and the
person who enters it in the system.  For example, you are reporting bugs to me,
and I am entering them in the Bugs Everywhere bug list.

Perhaps there should be two fields.
values000066400000000000000000000003121205171247600377750ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/comments/bcd6e5d4-8d03-43ad-a10d-17619735d077{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Thu, 14 Sep 2006 18:05:48 +0000", 






    "In-reply-to": "e5decfc6-050b-4283-8776-977bf85b2c99"






}
e5decfc6-050b-4283-8776-977bf85b2c99/000077500000000000000000000000001205171247600366225ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/commentsbody000066400000000000000000000002171205171247600375020ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/comments/e5decfc6-050b-4283-8776-977bf85b2c99Jens Mueller:
Referring to the fields describing a bug, I suggest the following:
The field 'Creator' should be named 'Reporter' (minor issue).
values000066400000000000000000000002101205171247600400350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0/comments/e5decfc6-050b-4283-8776-977bf85b2c99{






    "Author": "abentley", 






    "Content-type": "text/plain", 






    "Date": "Thu, 14 Sep 2006 18:03:41 +0000"






}
values000066400000000000000000000003141205171247600313740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e2f6514c-5f9f-4734-a537-daf3fbe7e9a0{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Add a reporter field", 






    "time": "Thu, 14 Sep 2006 16:47:57 +0000"






}
e30e2b6b-acc9-4b93-88c6-b63b6e30b593/000077500000000000000000000000001205171247600300615ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317065ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b5932cd562f5-fcb9-4cc5-bf8c-ad5c9d960761/000077500000000000000000000000001205171247600370075ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/commentsbody000066400000000000000000000011601205171247600376650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/comments/2cd562f5-fcb9-4cc5-bf8c-ad5c9d960761Before Bugs Everywhere Directory v1.4 we kept
  "encoding"
  "vcs_name"
and other bugdir-wide configuration options in ./be/settings

Now we don't store them anymore, but we should keep some.  For
example, the encoding setting is useful when running `be html` in a
cron job.  The settings are repository wide, so they should _still_ go
in ./be/settings (since there may, eventually, be several bugdirs in a
repo), but who's job is it to read that file?

The user interface takes care of encoding, but the storage object 
would be checking for a bug repository and reading the settings file.
How/when does it notify the UI?

values000066400000000000000000000002411205171247600402260ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/comments/2cd562f5-fcb9-4cc5-bf8c-ad5c9d960761{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 01 Feb 2010 14:34:10 +0000"






}
68ec74b9-d2c7-421f-ac70-602b43bbd263/000077500000000000000000000000001205171247600365415ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/commentsbody000066400000000000000000000003171205171247600374220ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/comments/68ec74b9-d2c7-421f-ac70-602b43bbd263On the other hand, since encoding decisions seem to be locale-driven,
so you can just setup the appropriate locale environmental variables
in your cron job:
  export LANG=en_US.utf8
and that should do it...
values000066400000000000000000000003431205171247600377630ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593/comments/68ec74b9-d2c7-421f-ac70-602b43bbd263{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Mon, 01 Feb 2010 15:35:57 +0000", 






    "In-reply-to": "2cd562f5-fcb9-4cc5-bf8c-ad5c9d960761"






}
values000066400000000000000000000005161205171247600313050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e30e2b6b-acc9-4b93-88c6-b63b6e30b593{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "minor", 






    "status": "open", 






    "summary": "Where should the vcs-name and encoding configuration options live?", 






    "time": "Mon, 01 Feb 2010 14:28:13 +0000"






}
e4ed63f6-9000-4d0b-98c3-487269140141/000077500000000000000000000000001205171247600274175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600312445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-48726914014107fc448f-c42e-4846-929a-8924de485766/000077500000000000000000000000001205171247600356525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/commentsbody000066400000000000000000000006361205171247600365370ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/07fc448f-c42e-4846-929a-8924de485766 �
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.5/xml/etree/ElementTree.py", line 963, in XML
    parser.feed(text)
  File "/usr/lib/python2.5/xml/etree/ElementTree.py", line 1245, in feed
    self._parser.Parse(data, 0)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u1234' in position 6: ordinal not in range(128)
values000066400000000000000000000003431205171247600370740ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/07fc448f-c42e-4846-929a-8924de485766{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 12 Jul 2009 11:34:22 +0000", 






    "In-reply-to": "faa686bf-c0eb-48bf-8a0b-d9a2e02bd132"






}
520a9829-8d90-43ce-be64-868b8321e5b0/000077500000000000000000000000001205171247600357025ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/commentsbody000066400000000000000000000000731205171247600365620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/520a9829-8d90-43ce-be64-868b8321e5b0It looks like etree wants a byte string, not unicode input
values000066400000000000000000000003431205171247600371240ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/520a9829-8d90-43ce-be64-868b8321e5b0{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 12 Jul 2009 11:42:16 +0000", 






    "In-reply-to": "faa686bf-c0eb-48bf-8a0b-d9a2e02bd132"






}
8b54e56e-c693-4594-998f-5bd6c1f385d7/000077500000000000000000000000001205171247600360205ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/commentsbody000066400000000000000000000003751205171247600367050ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/8b54e56e-c693-4594-998f-5bd6c1f385d7For example, this works:

python -c 'from xml.etree import ElementTree; a=u"\u1234"; print type(a), a; b=ElementTree.XML(a.encode("unicode_escape")); print type(b.text), unicode(b.text).decode("unicode_escape");'

Ugly though :p.  Ah well.
values000066400000000000000000000003431205171247600372420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/8b54e56e-c693-4594-998f-5bd6c1f385d7{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 12 Jul 2009 11:46:57 +0000", 






    "In-reply-to": "520a9829-8d90-43ce-be64-868b8321e5b0"






}
bb124fd9-08f5-4f82-a035-6355e8403075/000077500000000000000000000000001205171247600356105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/commentsbody000066400000000000000000000001151205171247600364650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/bb124fd9-08f5-4f82-a035-6355e8403075That's with Python 2.5.2 and ElementTree "2326 2005-03-17 07:45:21Z fredrik"
values000066400000000000000000000003431205171247600370320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/bb124fd9-08f5-4f82-a035-6355e8403075{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 12 Jul 2009 11:37:55 +0000", 






    "In-reply-to": "07fc448f-c42e-4846-929a-8924de485766"






}
faa686bf-c0eb-48bf-8a0b-d9a2e02bd132/000077500000000000000000000000001205171247600364475ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/commentsbody000066400000000000000000000002361205171247600373300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/faa686bf-c0eb-48bf-8a0b-d9a2e02bd132Isolated problem to:

python -c 'from xml.etree import ElementTree; a=u"\u1234"; print type(a), a; b=ElementTree.XML(a);'

Output attached below
values000066400000000000000000000002411205171247600376660ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141/comments/faa686bf-c0eb-48bf-8a0b-d9a2e02bd132{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 12 Jul 2009 11:31:13 +0000"






}
values000066400000000000000000000004511205171247600306410ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e4ed63f6-9000-4d0b-98c3-487269140141{






    "creator": "W. Trevor King ", 






    "reporter": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "utf8 problems in xml parsing", 






    "time": "Sat, 11 Jul 2009 15:48:32 +0000"






}
e645d562-6f84-4df2-b8ee-86ef42546c16/000077500000000000000000000000001205171247600277505ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315755ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16aea21508-69c2-4d6b-ada1-4fbadac14c56/000077500000000000000000000000001205171247600367125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/commentsbody000066400000000000000000000000321205171247600375650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/aea21508-69c2-4d6b-ada1-4fbadac14c56I agree.  (Test message).
values000066400000000000000000000003421205171247600401330ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/aea21508-69c2-4d6b-ada1-4fbadac14c56{






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 31 Jan 2009 06:31:12 +0000", 






    "In-reply-to": "d5ffa1c4-f435-4a9a-99f3-2a7bc3072051"






}
d5ffa1c4-f435-4a9a-99f3-2a7bc3072051/000077500000000000000000000000001205171247600364335ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/commentsbody000066400000000000000000000001261205171247600373120ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/d5ffa1c4-f435-4a9a-99f3-2a7bc3072051This will not be incredibly easy.  It will require reworking of the repository roots.
values000066400000000000000000000002401205171247600376510ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/d5ffa1c4-f435-4a9a-99f3-2a7bc3072051{






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 31 Jan 2009 06:00:40 +0000"






}
f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9/000077500000000000000000000000001205171247600370355ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/commentsbody000066400000000000000000000000501205171247600377100ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9This is a comment.

With several lines.
values000066400000000000000000000002401205171247600402530ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9{






    "Author": "Steve Losh ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 31 Jan 2009 06:48:21 +0000"






}
values000066400000000000000000000007111205171247600311710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Package everything into something easy to download and use.", 






    "time": "Fri, 30 Jan 2009 03:19:19 +0000"






}
ecc91b94-7f3f-44a7-af58-03191d327a7f/000077500000000000000000000000001205171247600300115ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003241205171247600312320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ecc91b94-7f3f-44a7-af58-03191d327a7f{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "no tests for missing $EDITOR", 






    "time": "Tue, 17 May 2005 13:27:33 +0000"






}
ed5eac05-80ed-411d-88a4-d2261b879713/000077500000000000000000000000001205171247600277175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600315445ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b8797139525e3f3-a044-4fa9-b311-56336267b8b5/000077500000000000000000000000001205171247600361105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/commentsbody000066400000000000000000000017451205171247600367770ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/9525e3f3-a044-4fa9-b311-56336267b8b5> 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.

This is definately the way to go.  Rough approach for the VCS family:

1) Parse `bzr diff` or such to get a list of new,changed,moved,removed
   paths.
2) Convert those paths to ids.
3) Return a list of ids to duplicate_bugdir().
4) Provide Storage.parent(id, revision), so duplicate_bugdir() could
   figure out what type of id we were dealing with (bugdir, bug,
   comment, other?), and construct the appropriate difference tree.

There could be a DupBugDir class which stored that diff tree and a
link to the current bugdir, which would make diffs much easier (work
already done, just copy the diff tree), and provide faster access to
unchanged files (just use the current version).

values000066400000000000000000000003431205171247600373320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/9525e3f3-a044-4fa9-b311-56336267b8b5{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sun, 03 Jan 2010 12:25:03 +0000", 






    "In-reply-to": "9c4b8921-7b43-4bb6-b650-34144b414dc0"






}
9c4b8921-7b43-4bb6-b650-34144b414dc0/000077500000000000000000000000001205171247600361525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/commentsbody000066400000000000000000000016301205171247600370320ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/9c4b8921-7b43-4bb6-b650-34144b414dc0Ok, time to fix the issue I mentioned in this commit message:

revno: 473.1.63
revision-id: wking@drexel.edu-20091215114420-sbdnvm5jlx0ampbg

...
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...
...
values000066400000000000000000000002411205171247600373710ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/9c4b8921-7b43-4bb6-b650-34144b414dc0{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 02 Jan 2010 22:58:31 +0000"






}
c664b7be-ded5-42dd-a16a-82b2bdb52e36/000077500000000000000000000000001205171247600366765ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/commentsbody000066400000000000000000000006441205171247600375620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/c664b7be-ded5-42dd-a16a-82b2bdb52e36> I'm stuck on how to handle upgrades though...

I've satisfied myself with the solution mentioned in #bea86499-824e-4e77-b085-2d581fa9ccab/1100c966-9671-4bc6-8b68-6d408a910da1/bd1207ef-f97e-4078-8c5d-046072012082#,
namely, upgrading on disk the way we've always done, and not
supporting on-the-fly upgrading at all.  This isn't important for this
bug, but I didn't want to just ignore that part of the commit message.

values000066400000000000000000000003431205171247600401200ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713/comments/c664b7be-ded5-42dd-a16a-82b2bdb52e36{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 02 Jan 2010 23:04:01 +0000", 






    "In-reply-to": "9c4b8921-7b43-4bb6-b650-34144b414dc0"






}
values000066400000000000000000000003621205171247600311420ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ed5eac05-80ed-411d-88a4-d2261b879713{






    "creator": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Slow and ugly diff implementation", 






    "time": "Sat, 02 Jan 2010 22:56:08 +0000"






}
ee681951-f254-43d3-a53a-1b36ae415d5c/000077500000000000000000000000001205171247600277105ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004031205171247600311270ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ee681951-f254-43d3-a53a-1b36ae415d5c{






    "creator": "abentley", 






    "extra_strings": [






        "BLOCKS:4fc71206-4285-417f-8a3c-ed6fb31bbbda"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Support rcs configuration"






}
f51dc5a7-37b7-4ce1-859a-b7cb58be6494/000077500000000000000000000000001205171247600300775ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000003771205171247600313300ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f51dc5a7-37b7-4ce1-859a-b7cb58be6494{






    "creator": "Aaron Bentley", 






    "extra_strings": [






        "BLOCKS:47c8fd5f-1f5a-4048-bef7-bb4c9a37c411"






    ], 






    "severity": "fatal", 






    "status": "fixed", 






    "summary": "Can't create bugs"






}
f5c06914-dc64-4658-8ec7-32a026a53f55/000077500000000000000000000000001205171247600275675ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000004001205171247600310030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f5c06914-dc64-4658-8ec7-32a026a53f55{






    "creator": "abentley", 






    "extra_strings": [






        "BLOCKS:bd0ebb56-fb46-45bc-af08-1e4a94e8ef3c"






    ], 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Implement bug tree diff"






}
f65b680b-4309-43a2-ae2d-e65811c9d107/000077500000000000000000000000001205171247600276325ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000002511205171247600310520ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f65b680b-4309-43a2-ae2d-e65811c9d107{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "friendly name is created, but not used"






}
f70dd5df-805b-49f3-a9ce-12e0fae63365/000077500000000000000000000000001205171247600301455ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600317725ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f70dd5df-805b-49f3-a9ce-12e0fae6336524903c62-f441-496e-9dcf-17e7a581df33/000077500000000000000000000000001205171247600365125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f70dd5df-805b-49f3-a9ce-12e0fae63365/commentsbody000066400000000000000000000001011205171247600373620ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f70dd5df-805b-49f3-a9ce-12e0fae63365/comments/24903c62-f441-496e-9dcf-17e7a581df33Aaron said this was closeable in Nov. 24th email to the BE list.
values000066400000000000000000000002411205171247600377310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f70dd5df-805b-49f3-a9ce-12e0fae63365/comments/24903c62-f441-496e-9dcf-17e7a581df33{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Thu, 04 Dec 2008 17:20:20 +0000"






}
values000066400000000000000000000003161205171247600313670ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f70dd5df-805b-49f3-a9ce-12e0fae63365{






    "creator": "abentley", 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Allow different sorts", 






    "time": "Wed, 25 Jan 2006 15:43:19 +0000"






}
f77fc673-c852-4c81-bfa2-1d59de2661c8/000077500000000000000000000000001205171247600300175ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000005011205171247600312350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f77fc673-c852-4c81-bfa2-1d59de2661c8{






    "creator": "Gianluca Montecchi ", 






    "reporter": "Gianluca Montecchi ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "Comment should be threaded in the \"be html\" output", 






    "time": "Tue, 21 Jul 2009 21:39:52 +0000"






}
f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/000077500000000000000000000000001205171247600302255ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugscomments/000077500000000000000000000000001205171247600320525ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a028d2e8d-5b0f-4c43-a913-35a1709b2276/000077500000000000000000000000001205171247600364645ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/commentsbody000066400000000000000000000003001205171247600373350ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/028d2e8d-5b0f-4c43-a913-35a1709b2276Wrote/borrowed libbe/encoding.py.
Now the following works:

python -c 'import libbe.encoding as e; print e.get_encoding(); e.set_IO_stream_encodings(e.get_encoding()) ;print u"\u2019"' | cat

values000066400000000000000000000002411205171247600377030ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/028d2e8d-5b0f-4c43-a913-35a1709b2276{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 25 Nov 2008 19:41:02 +0000"






}
15602c0c-25e4-4c2c-9e24-79bdb90721b1/000077500000000000000000000000001205171247600365375ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/commentsbody000066400000000000000000000011641205171247600374210ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/15602c0c-25e4-4c2c-9e24-79bdb90721b1$ be show 31cd490d-a1c2-4ab3-8284-d80395e34dd2

works as expected, but

$ be show 31cd490d-a1c2-4ab3-8284-d80395e34dd2 | grep something
Traceback (most recent call last):
  File "/home/wking/bin/be", line 30, in 
    sys.exit(cmdutil.execute(sys.argv[1], sys.argv[2:]))
  File "/home/wking/src/fun/be-bugfix/libbe/cmdutil.py", line 57, in execute
  File "/home/wking/src/fun/be/be.wtk/becommands/show.py", line 44, in execute
    print bug.string(show_comments=True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 2100: ordinal not in range(128)

By the way, u2019 is a fancy apostrophe.
values000066400000000000000000000002411205171247600377560ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/15602c0c-25e4-4c2c-9e24-79bdb90721b1{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 25 Nov 2008 02:36:16 +0000"






}
3f556a48-c538-4569-8609-3e829b561d78/000077500000000000000000000000001205171247600363215ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/commentsbody000066400000000000000000000004271205171247600372040ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/3f556a48-c538-4569-8609-3e829b561d78Solution here
http://www.amk.ca/python/howto/unicode

You need to encode before printing.

This is unfortunate, because we're currently very glib about just
printing info to the terminal.  This makes it much more important to
have a single bugdir-wide encoding specification...

values000066400000000000000000000002411205171247600375400ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/3f556a48-c538-4569-8609-3e829b561d78{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Tue, 25 Nov 2008 03:02:59 +0000"






}
f376debf-9f7e-4347-807f-00e7263487c7/000077500000000000000000000000001205171247600366125ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/commentsbody000066400000000000000000000000321205171247600374650ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/f376debf-9f7e-4347-807f-00e7263487c7Test unicode �quotes�
values000066400000000000000000000002411205171247600400310ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a/comments/f376debf-9f7e-4347-807f-00e7263487c7{






    "Author": "W. Trevor King ", 






    "Content-type": "text/plain", 






    "Date": "Sat, 11 Jul 2009 18:28:57 +0000"






}
values000066400000000000000000000004051205171247600314460ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a{






    "creator": "W. Trevor King ", 






    "severity": "minor", 






    "status": "fixed", 






    "summary": "UTF-8 encoding trouble with pipes in becommands/show", 






    "time": "Tue, 25 Nov 2008 02:30:35 +0000"






}
fd96c69d-6f78-4c0c-af6e-e01e9b8516d3/000077500000000000000000000000001205171247600301665ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugsvalues000066400000000000000000000006501205171247600314110ustar00rootroot00000000000000bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/fd96c69d-6f78-4c0c-af6e-e01e9b8516d3{






    "assigned": "Steve Losh ", 






    "creator": "Steve Losh ", 






    "extra_strings": [






        "BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7", 






        "TAG:CFBE"






    ], 






    "severity": "minor", 






    "status": "closed", 






    "summary": "Implement adding comments.", 






    "time": "Sat, 31 Jan 2009 03:00:08 +0000"






}
bugs-everywhere-1.1.1/.be/bea86499-824e-4e77-b085-2d581fa9ccab/settings000066400000000000000000000012171205171247600240370ustar00rootroot00000000000000{






    "extra_strings": [






        "SUBSCRIBE:W. Trevor King \tall\t*"






    ], 






    "inactive_status": [






        [






            "closed", 






            "The bug is no longer relevant."






        ], 






        [






            "fixed", 






            "The bug should no longer occur."






        ], 






        [






            "wontfix", 






            "It's not a bug, it's a feature."






        ], 






        [






            "disabled", 






            "Unknown meaning.  For backwards compatibility with old BE bugs."






        ]






    ]






}
bugs-everywhere-1.1.1/.be/version000066400000000000000000000000371205171247600167160ustar00rootroot00000000000000Bugs Everywhere Directory v1.5
bugs-everywhere-1.1.1/.gitignore000066400000000000000000000001231205171247600166260ustar00rootroot00000000000000*.pyc
build
dist
doc/man/*.1
doc/.build/
doc/libbe/
.be/id-cache
libbe/_version.py
bugs-everywhere-1.1.1/.gitmodules000066400000000000000000000001541205171247600170170ustar00rootroot00000000000000[submodule "update-copyright"]
	path = update-copyright
	url = git://gitorious.org/update-copyright/wtk.git
bugs-everywhere-1.1.1/.mailmap000066400000000000000000000015431205171247600162660ustar00rootroot00000000000000Aaron Bentley  
Ben Finney  
Ben Finney  
Chris Ball  
Chris Ball  
Gianluca Montecchi 
Gianluca Montecchi  
Gianluca Montecchi  
Jan Gerber 
Marien Zwart  
Niall Douglas (s_sourceforge@nedprod.com)  
Niall Douglas (s_sourceforge@nedprod.com)  
Tanguy Le Carrour 
W. Trevor King  
W. Trevor King  
W. Trevor King  
bugs-everywhere-1.1.1/.update-copyright.conf000066400000000000000000000016521205171247600210630ustar00rootroot00000000000000[project]
name: Bugs Everywhere
vcs: Git

[files]
authors: yes
files: yes
ignored: AUTHORS | COPYING | README | .update-copyright.conf | .git* | .be* |
  *.pyc | */catmutt

[copyright]
short: {project} comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU General Public License.
long: This file is part of {project}.

  {project} is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

  {project} is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along with {project}.  If not, see .
bugs-everywhere-1.1.1/AUTHORS000066400000000000000000000025071205171247600157160ustar00rootroot00000000000000Bugs Everywhere was written by:
Aaron Bentley 
Alex Miller 
Alexander Belchenko 
Andrew Cooper 
Anton Batenev 
Ben Finney 
Chris Ball 
Dieter Plaetinck 
Eric Kow 
Gianluca Montecchi 
Gour 
Israel Basurto 
James Rowe 
Jan Gerber 
Jelmer Vernooij 
Marien Zwart 
Markus Vock 
Mathieu Clabaut 
Matěj Cepl 
Michel Alexandre Salim 
Moritz Barsnick (at dot) 
Niall Douglas (s_sourceforge@nedprod.com) 
Nicolas Bigaouette 
Oleg Romanyshyn 
Phil Schumm 
Praveen Arimbrathodiyil 
Robert Lehmann 
Steve Losh 
Tanguy Le Carrour 
Thomas Gerigk 
Thomas Habets 
Thomas Keller 
Tim Guirgies 
Valtteri Kokkoniemi 
W. Trevor King 
bugs-everywhere-1.1.1/COPYING000066400000000000000000000431031205171247600156760ustar00rootroot00000000000000		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    
    Copyright (C)   

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  , 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
bugs-everywhere-1.1.1/Makefile000066400000000000000000000050711205171247600163050ustar00rootroot00000000000000#! /usr/bin/make -f
# :vim: filetype=make : -*- makefile; coding: utf-8; -*-

# Makefile
# Part of Bugs Everywhere, a distributed bug tracking system.
#
# Copyright (C) 2008-2012 Anton Batenev 
#                         Ben Finney 
#                         Chris Ball 
#                         Eric Kow 
#                         Gianluca Montecchi 
#                         Matěj Cepl 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .

SHELL = /bin/bash
RM = /bin/rm
RST2MAN = /usr/bin/rst2man
RST2HTML = /usr/bin/rst2html

#PATH = /usr/bin:/bin  # must include sphinx-build for 'sphinx' target.

#INSTALL_OPTIONS = "--prefix=/usr/local"
INSTALL_OPTIONS = "--user"

# Select the documentation you wish to build
DOC = sphinx man

# Directories with semantic meaning
DOC_DIR := doc
MAN_DIR := ${DOC_DIR}/man

MANPAGES = be.1
LIBBE_VERSION := libbe/_version.py
GENERATED_FILES := build $(LIBBE_VERSION)

MANPAGE_FILES = $(patsubst %,${MAN_DIR}/%,${MANPAGES})
MANPAGE_HTML =  $(patsubst %,${MAN_DIR}/%.html,${MANPAGES})
GENERATED_FILES += ${MANPAGE_FILES} ${MANPAGE_HTML}


.PHONY: all
all: build


.PHONY: build
build: $(LIBBE_VERSION)
	python setup.py build

.PHONY: doc
doc: $(DOC)

.PHONY: install
install: build doc
	python setup.py install ${INSTALL_OPTIONS}

test: build
	python test.py

.PHONY: clean
clean:
	$(RM) -rf ${GENERATED_FILES}
	$(MAKE) -C ${DOC_DIR} clean


.PHONY: libbe/_version.py
libbe/_version.py:
	echo "# -*- coding: utf-8 -*-" > $@
	git log -1 --encoding=UTF-8 --date=short --pretty='format:"Autogenerated by make libbe/_version.py"%nversion_info = {%n    "date":"%cd",%n    "revision":"%H",%n    "committer":"%cn"}%n' >> $@

.PHONY: man
man: ${MANPAGE_FILES}

%.1: %.1.txt
	$(RST2MAN) $< > $@
%.1.html: %.1.txt
	$(RST2HTML) $< > $@

.PHONY: sphinx
sphinx:
	$(MAKE) -C ${DOC_DIR} html
bugs-everywhere-1.1.1/NEWS000066400000000000000000000112141205171247600153400ustar00rootroot00000000000000April 16, 2011
 * Added --preserve-uuids to `be import-xml`.
 * Added --assigned, --severity, and --status to `be new`.
 * Added --notify to `be serve`.

March 5, 2011
 * Release version 1.0.1 (bugfixes).
 
January 8, 2011
 * Release version 1.0.0.

July 14, 2010
 * Added --show-status to `be depend`.

June 25, 2010
 * Added --tags to `be list`.

February 20, 2010
 * `be html` uses truncated IDs in comment and bug URLs and anchors.

January 27, 2010
 * `be html` links (
#                         Chris Ball 
#                         Gianluca Montecchi 
#                         Oleg Romanyshyn 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .

import sys
import libbe.ui.command_line

sys.exit(libbe.ui.command_line.main())
bugs-everywhere-1.1.1/doc/000077500000000000000000000000001205171247600154075ustar00rootroot00000000000000bugs-everywhere-1.1.1/doc/Makefile000066400000000000000000000064211205171247600170520ustar00rootroot00000000000000# Makefile for Sphinx documentation
#
RM = /bin/rm

# You can set these variables from the command line.
SPHINXOPTS    =
SPHINXBUILD   = sphinx-build
PAPER         =
BUILDDIR      = .build

# Internal variables.
PAPEROPT_a4     = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .

.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest

help:
	@echo "Please use \`make ' where  is one of"
	@echo "  html      to make standalone HTML files"
	@echo "  dirhtml   to make HTML files named index.html in directories"
	@echo "  pickle    to make pickle files"
	@echo "  json      to make JSON files"
	@echo "  htmlhelp  to make HTML files and a HTML help project"
	@echo "  qthelp    to make HTML files and a qthelp project"
	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
	@echo "  changes   to make an overview of all changed/added/deprecated items"
	@echo "  linkcheck to check all external links for integrity"
	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
	@echo "  libbe     to autogenerate files for all libbe modules"

clean:
	$(RM) -rf $(BUILDDIR) libbe

html: libbe
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

dirhtml: libbe
	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
	@echo
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."

pickle: libbe
	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
	@echo
	@echo "Build finished; now you can process the pickle files."

json: libbe
	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
	@echo
	@echo "Build finished; now you can process the JSON files."

htmlhelp: libbe
	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
	@echo
	@echo "Build finished; now you can run HTML Help Workshop with the" \
	      ".hhp project file in $(BUILDDIR)/htmlhelp."

qthelp: libbe
	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
	@echo
	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/bugs-everywhere.qhcp"
	@echo "To view the help file:"
	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/bugs-everywhere.qhc"

latex: libbe
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
	@echo
	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
	      "run these through (pdf)latex."

changes: libbe
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
	@echo
	@echo "The overview file is in $(BUILDDIR)/changes."

linkcheck: libbe
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
	@echo
	@echo "Link check complete; look for any errors in the above output " \
	      "or in $(BUILDDIR)/linkcheck/output.txt."

doctest: libbe
	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
	@echo "Testing of doctests in the sources finished, look at the " \
	      "results in $(BUILDDIR)/doctest/output.txt."

.PHONY : libbe
libbe :
	python2.7 generate-libbe-txt.py
bugs-everywhere-1.1.1/doc/conf.py000066400000000000000000000161251205171247600167130ustar00rootroot00000000000000# -*- coding: utf-8 -*-
#
# bugs-everywhere documentation build configuration file, created by
# sphinx-quickstart on Fri Feb  5 20:02:21 2010.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.

import sys, os

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.append(os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('..'))

import libbe.version

# -- General configuration -----------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary',
              'sphinx.ext.doctest', 'sphinx.ext.coverage',
              'numpydoc']

# Add any paths that contain templates here, relative to this directory.
templates_path = ['.templates']

# The suffix of source filenames.
source_suffix = '.txt'

# The encoding of source files.
#source_encoding = 'utf-8'

# The master toctree document.
master_doc = 'index'

# General information about the project.
project = u'bugs-everywhere'
copyright = u'2010, W. Trevor King'

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = libbe.version.version(3)
# The full version, including alpha/beta/rc tags.
release = '{} ({})'.format(
    libbe.version.version(),
    libbe.version.version_info['date'])

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None

# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'

# List of documents that shouldn't be included in the build.
#unused_docs = []

# List of directories, relative to source directory, that shouldn't be searched
# for source files.
exclude_trees = ['.build']

# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None

# If true, '()' will be appended to :py:func: etc. cross-reference text.
#add_function_parentheses = True

# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True

# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'

# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []


# -- Options for HTML output ---------------------------------------------------

# The theme to use for HTML and HTML Help pages.  Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
html_theme = 'default'

# Theme options are theme-specific and customize the look and feel of a theme
# further.  For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}

# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []

# The name for this set of Sphinx documents.  If None, it defaults to
# " v documentation".
#html_title = None

# Override default sphinx.config.Config.configvalues[html_title] to
# change formatting string from '%s v%s' to '%s %s'.  With git-commit
# versions, the original formatting string gives titles like
#   bugs-everywhere vc07c687273afc1f38258d3fa5caf39244c0d1b33
# which may suprise users who don't realize the leading 'v' is not
# part of the hash.
html_title = '%s %s documentation' % (project, version)

# A shorter title for the navigation bar.  Default is the same as html_title.
#html_short_title = None
html_short_title = '%s %s documentation' % (project, release)

# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None

# The name of an image file (within the static path) to use as favicon of the
# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['.static']

# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'

# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True

# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}

# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}

# If false, no module index is generated.
#html_use_modindex = True

# If false, no index is generated.
#html_use_index = True

# If true, the index is split into individual pages for each letter.
#html_split_index = False

# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True

# If true, an OpenSearch description file will be output, and all pages will
# contain a  tag referring to it.  The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''

# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = ''

# Output file base name for HTML help builder.
htmlhelp_basename = 'bugs-everywheredoc'


# -- Options for LaTeX output --------------------------------------------------

# The paper size ('letter' or 'a4').
#latex_paper_size = 'letter'

# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
  ('index', 'bugs-everywhere.tex', u'bugs-everywhere Documentation',
   u'W. Trevor King', 'manual'),
]

# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None

# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False

# Additional stuff for the LaTeX preamble.
#latex_preamble = ''

# Documents to append as an appendix to all manuals.
#latex_appendices = []

# If false, no module index is generated.
#latex_use_modindex = True

# -- Options for Intersphinx ---------------------------------------------------

intersphinx_mapping = {
    'http://docs.python.org/dev': None,
    }
bugs-everywhere-1.1.1/doc/config.txt000066400000000000000000000020611205171247600174140ustar00rootroot00000000000000*************
Configuration
*************

Config file format and location
===============================

Most of the information that BE needs lives in the bug repository
itself, but there is user-specific information that does not fit into
a shared repository.  This per-user configuration information is
stored in an `INI-style config file`__::

  [default]
  user = 'John Doe '

__ configparser_

The config file is located at :file:`~/.config/bugs-everywhere` by
default, but you can override the path by setting environment
variables (see :py:func:`~libbe.storage.util.config.path` for
details).

Settings
========

Currently the only information stored in the configuration file is a
user ID (see :py:func:`~libbe.ui.util.user.get_user_id`), as shown in
the example above.  However, many version control systems allow you to
specify your name and email address, and BE will fall back to the
VCS-configured values, so you probably don't need to set a BE-specific
configuration.


.. _configparser: http://docs.python.org/library/configparser.html
bugs-everywhere-1.1.1/doc/distributed_bugtracking.txt000066400000000000000000000027501205171247600230560ustar00rootroot00000000000000***********************
Distributed Bugtracking
***********************

Usage Cases
===========

Case 1: Tracking the status of bugs in remote repo branches
-----------------------------------------------------------

See the discussion in
#bea86499-824e-4e77-b085-2d581fa9ccab/12c986be-d19a-4b8b-b1b5-68248ff4d331#.
Here, it doesn't matter whether the remote repository is a branch of
the local repository, or a completely separate project
(e.g. upstream, ...).  So long as the remote project provides access
via some REPO format, you can use::

    $ be --repo REPO ...

to run your query, or::

    $ be diff REPO

to see the changes between the local and remote repositories.


Case 2: Importing bugs from other repositories
----------------------------------------------

Case 2.1: If the remote repository is a branch of the local repository::

     $  merge 

Case 2.2: If the remote repository is not a branch of the local repository
(Hypothetical command)::

    $ be import  


Notes
=====

Providing public repositories
-----------------------------

e.g. for non-dev users.  These are just branches that expose a public
interface (HTML, email, ...).  Merge and query like any other
development branch.


Managing permissions
--------------------

Many bugtrackers implement some sort of permissions system, and they
are certainly required for a central system with diverse user roles.
However DVCSs also support the "pull my changes" workflow, where
permissions are irrelevant.
bugs-everywhere-1.1.1/doc/doc.txt000066400000000000000000000022271205171247600167200ustar00rootroot00000000000000****************************
Producing this documentation
****************************

This documentation is written in reStructuredText_, and produced
using Sphinx_ and the numpydoc_ extension.  The documentation source
should be fairly readable without processing, but you can compile the
documentation, you'll need to install Sphinx and numpydoc::

    $ easy_install Sphinx
    $ easy_install numpydoc

.. _Sphinx: http://sphinx.pocoo.org/
.. _numpydoc: http://pypi.python.org/pypi/numpydoc

See the reStructuredText quick reference and the `NumPy/SciPy
documentation guide`_ for an introduction to the documentation
syntax.

.. _reStructuredText:
  http://docutils.sourceforge.net/docs/user/rst/quickref.html
.. _NumPy/SciPy documentation guide:
  https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt

Man page
========

The man-page source :file:`be.1.txt` is writen in reStructuredText.
The :file:`Makefile` converts it to :manpage:`roff(7)` format using
Docutils_ ``rst2man``.

The man page should conform to `Debian policy`_.

.. _Docutils: http://docutils.sourceforge.net/
.. _Debian policy:
  http://www.debian.org/doc/debian-policy/ch-docs.html
bugs-everywhere-1.1.1/doc/email.txt000077700000000000000000000000001205171247600260542../interfaces/email/interactive/READMEustar00rootroot00000000000000bugs-everywhere-1.1.1/doc/generate-libbe-txt.py000066400000000000000000000041651205171247600214510ustar00rootroot00000000000000#!/usr/bin/python
#
# Copyright (C) 2010-2012 Chris Ball 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .

"""Auto-generate reStructuredText of the libbe module tree for Sphinx.
"""

import sys
import os, os.path

sys.path.insert(0, os.path.abspath('..'))
from test import python_tree

def title(modname):
    t = ':py:mod:`%s`' % modname
    delim = '*'*len(t)
    return '\n'.join([delim, t, delim, '', ''])

def automodule(modname):
    return '\n'.join([
            '.. automodule:: %s' % modname,
            '   :members:',
            '   :undoc-members:',
            '', ''])

def toctree(children):
    if len(children) == 0:
        return ''
    return '\n'.join([
            '.. toctree::',
            '   :maxdepth: 2',
            '',
            ] + [
            '   %s.txt' % c for c in sorted(children)
            ] + ['', ''])

def make_module_txt(modname, children, subdir='libbe'):
    filename = os.path.join(subdir, '%s.txt' % modname)
    if not os.path.exists(subdir):
        os.mkdir(subdir)
    if os.path.exists(filename):
        return None # don't overwrite potentially hand-written files.
    f = file(filename, 'w')
    f.write(title(modname))
    f.write(automodule(modname))
    f.write(toctree(children))
    f.close()

if __name__ == '__main__':
    pt = python_tree(root_path='../libbe', root_modname='libbe')
    for node in pt.traverse():
        make_module_txt(node.modname, [c.modname for c in node])
bugs-everywhere-1.1.1/doc/hacking.txt000066400000000000000000000055501205171247600175610ustar00rootroot00000000000000**********
Hacking BE
**********

Adding commands
===============

To write a plugin, you simply create a new file in the
:file:`libbe/command/` directory.  Take a look at one of the simpler
plugins (e.g. :py:mod:`libbe.command.remove`) for an example of how that
looks, and to start getting a feel for the libbe interface.

See :py:mod:`libbe.command.base` for the definition of the important
classes :py:class:`~libbe.command.base.Option`,
:py:class:`~libbe.command.base.Argument`,
:py:class:`~libbe.command.base.Command`,
:py:class:`~libbe.command.base.InputOutput`,
:py:class:`~libbe.command.base.StorageCallbacks`, and
:py:class:`~libbe.command.base.UserInterface`.  You'll be subclassing
:py:class:`~libbe.command.base.Command` for your command, but all those
classes will be important.


Command completion
------------------

BE implements a general framework to make it easy to support command
completion for arbitrary plugins.  In order to support this system,
any of your completable :py:class:`~libbe.command.base.Argument`
instances (in your command's ``.options`` or ``.args``) should be
initialized with some valid completion_callback function.  Some common
cases are defined in :py:mod:`libbe.command.util`.  If you need more
flexibility, see :py:mod:`libbe.command.list`\'s ``--sort`` option for an
example of extensions via :py:class:`libbe.command.util.Completer`, or
write a custom completion function from scratch.


Adding user interfaces
======================

Take a look at :py:mod:`libbe.ui.command_line` for an example.
Basically you'll need to setup a
:py:class:`~libbe.command.base.UserInterface` instance for running
commands.  More details to come after I write an HTML UI...


Testing
=======

Run any tests in your module with::

    be$ python test.py 

for example:

    be$ python test.py libbe.command.merge

For a definition of "any tests", see :file:`test.py`'s
``add_module_tests()`` function.

Note that you will need to run ``make`` before testing a clean BE
branch to auto-generate required files like :file:`libbe/_version.py`.


Profiling
=========

Find out which 20 calls take the most cumulative time (time of
execution + childrens' times)::

    $ python -m cProfile -o profile be [command] [args]
    $ python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_stats(20)"

If you want to find out who's calling your expensive function
(e.g. :py:func:`libbe.util.subproc.invoke`), try::

    $ python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_callers(20)"

You can also toss::

    import sys, traceback
    print >> sys.stderr, '-'*60, '\n', '\n'.join(traceback.format_stack()[-10:])

into the function itself for a depth-first caller list.

For a more top-down approach, try::

    $ python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_callees(20)"
bugs-everywhere-1.1.1/doc/http.txt000066400000000000000000000005511205171247600171300ustar00rootroot00000000000000**************
HTTP Interface
**************

BE bundles Cherry-flavored BE, an interactive HTML interface
originally developed by Steve Losh.

You can run it from the BE source directory with::

    $ python interfaces/web/cfbe.py PATH_TO_REPO

Eventually we'll move it into :py:mod:`libbe.ui` so it will be installed
automatically with every BE installation.
bugs-everywhere-1.1.1/doc/index.txt000066400000000000000000000020201205171247600172510ustar00rootroot00000000000000Welcome to the bugs-everywhere documentation!
=============================================

Bugs Everywhere (BE) is a bugtracker built on distributed version
control.  It works with Arch_, Bazaar_, Darcs_, Git_, Mercurial_, and
Monotone_ at the moment, but is easily extensible.  It can also
function with no VCS at all.

.. _Arch: http://www.gnu.org/software/gnu-arch/
.. _Bazaar: http://bazaar.canonical.com/
.. _Darcs: http://darcs.net/
.. _Git: http://git-scm.com/
.. _Mercurial: http://mercurial.selenic.com/
.. _Monotone: http://www.monotone.ca/

The idea is to package the bug information with the source code, so
that bugs can be marked "fixed" in the branches that fix them.  Other
architectures---such as keeping all the bugs in their own branch---are
also possible.


Contents:

.. toctree::
   :maxdepth: 2

   install
   tutorial
   config
   email
   http
   distributed_bugtracking
   power
   hacking
   spam
   libbe/libbe
   doc

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
bugs-everywhere-1.1.1/doc/install.txt000066400000000000000000000121461205171247600176220ustar00rootroot00000000000000*************
Installing BE
*************

Distribution packages
=====================

Some distributions (Debian_ , Ubuntu_ , others?) package BE.  If
you're running one of those distributions, you can install the package
with your regular package manager.  For Debian, Ubuntu, and related
distros, that's::

    $ apt-get install bugs-everywhere

However, the official packages can lag behind current development.

If you're running Gentoo_, I've got a live ebuild in my overlay_ that
installs the current version of BE from the Git source.

Michel Alexandre Salim maintains a Fedora_ package.

.. _Debian: http://packages.debian.org/sid/bugs-everywhere
.. _Ubuntu: http://packages.ubuntu.com/lucid/bugs-everywhere
.. _Gentoo: http://www.gentoo.org/
.. _overlay: http://blog.tremily.us/posts/Gentoo_overlay/
.. _Fedora: https://admin.fedoraproject.org/pkgdb/acls/name/be


Dependencies
============

If your distribution does not package BE, you'll have to install it
yourself, along with its dependencies.  Not all of these are strictly
required.  See `Minimal installs`_ for possible shortcuts.

==============  =======================  ================  ===========================
Package         Role                     Debian_           Gentoo_
==============  =======================  ================  ===========================
PyYAML_         upgrade old BE storage   python-yaml       dev-python/pyyaml
Jinja_          HTML templating          python-jinja2     dev-python/jinja
CherryPy_       serve repos over HTTPS   python-cherrypy3  dev-python/cherrypy
Sphinx_         see :doc:`doc`           python-sphinx     dev-python/sphinx
numpydoc_       see :doc:`doc`                             dev-python/numpydoc [#npd]_
Docutils_       manpage generation       python-docutils   dev-python/docutils
==============  =======================  ================  ===========================

.. [#npd] In the science_ overlay.

.. Debian has a stale ITP for python-numpydoc http://bugs.debian.org/631877
   which caused BE to be dropped  http://bugs.debian.org/609519

.. _PyYAML: http://pyyaml.org/
.. _Jinja: http://jinja.pocoo.org/
.. _CherryPy: http://cherrypy.org/
.. _Sphinx: http://sphinx.pocoo.org/
.. _numpydoc: http://pypi.python.org/pypi/numpydoc
.. _Docutils: http://docutils.sourceforge.net/
.. _science: http://overlays.gentoo.org/proj/science

Git repository
==============

BE is available as a Git repository::

    $ git clone git://gitorious.org/be/be.git be

See the homepage_ for details.  If you do branch the Git repo, you'll
need to run::

    $ make

to build some auto-generated files (e.g. :py:mod:`libbe._version`), and::

    $ make install

to install BE.  By default BE will install into your home directory,
but you can tweak the ``INSTALL_OPTIONS`` variable in ``Makefile`` to
install to another location.  With the default installation, you may
need to add ``~/.local/bin/`` to your ``PATH`` so that your shell can
find the installed ``be`` script.

Minimal installs
----------------

By default, ``make`` builds both a man page for ``be`` and the HTML
Sphinx documentation (:doc:`doc`).  You can customize the
documentation targets (if, for example, you don't want to install
Sphinx) by overriding_ the ``DOC`` variable.  For example, to disable
all documentation during a build/install, run::

    $ make DOC= install

Note that ``setup.py`` (called during ``make install``) will install
the man page (``doc/man/be.1``) if it exists, so::

    $ make
    $ make DOC= install

*will* build (first ``make``) and install (second ``make``) the man
page.

Also note that there is no need to edit the ``Makefile`` to change any
of its internal variables.  You can `override them from the command
line`__, as we did for ``DOC`` above.

__ overriding_

Finally, if you want to do the absolute minimum required to install BE
locally, you can skip the ``Makefile`` entirely, and just use
``setup.py`` directly::

    $ python setup.py install

See::

    $ python setup.py install --help

for a list of installation options.

You only need YAML support if you will be upgrading a BE repository
based on ``Bugs Everywhere Directory v1.4`` or earlier (see
:file:`.be/version`).  If you're installing a fresh instance of BE,
there's no need to install PyYAML.  Jinja is only used by the ``html``
command, so there's no need to install Jinja if you don't mind
avoiding that command.  Similarly, CherryPy is only used for the
``html`` and ``serve-*`` commands with the ``--ssl`` option set.  The
other dependencies are only used for :doc:`building these docs `,
so feel free to skip them and just use the docs wherever you're
currently reading them.

.. _homepage: http://bugseverywhere.org/
.. _overriding: http://www.gnu.org/software/make/manual/html_node/Overriding.html


Release tarballs
================

For those not interested in the cutting edge, or those who don't want
to worry about installing Git, we'll `post release tarballs`_.  After
you've downloaded the release tarball, unpack it with::

    $ tar -xzvf be-.tar.gz

And install it with:::

    $ cd be-
    $ make install

.. _post release tarballs: http://download.bugseverywhere.org/releases/
bugs-everywhere-1.1.1/doc/man/000077500000000000000000000000001205171247600161625ustar00rootroot00000000000000bugs-everywhere-1.1.1/doc/man/be.1.txt000066400000000000000000000034631205171247600174560ustar00rootroot00000000000000==
be
==

----------------------------------------------
distributed bug tracking from the command line
----------------------------------------------

:Author: wking@drexel.edu
:Date:   2012-02-25
:Copyright: Permission is granted to copy, distribute and/or modify
  this document under the terms of the GNU General Public License,
  Version 2 or (at your option) any later version published by the
  Free Software Foundation.
:Version: 0.3
:Manual section: 1
:Manual group: distributed bug tracker

SYNOPSIS
========

be [options] [command] [command_options] [commands_args...]

DESCRIPTION
===========

``be`` allows commandline interaction with the Bugs Everywhere
database in a project tree.

To avoid bit-rotted documentation, we do not describe all available
commands and options in this manpage.  Run ``be help`` for accurate
documentation.  See the Bugs Everywhere Manual
(http://docs.bugseverywhere.org/) for more detailed documentation and
tutorials.

COMMANDS
========

help
    Print help for ``be`` and a list of all available commands.

Run ``be help`` for a complete list.

EXAMPLES
========

be help
    Show general help and a list of all commands.

be help init
    Show help for the ``init`` command.

be init
    Initialize a new Bugs Everywhere database.

BUGS
====

The Bugs Everywhere uses Bugs Everywhere to track its bugs.  You can
submit bugs directly using ``be``::

  $ be --repo http://bugs.bugseverywhere.org/ new "The demuxulizer is broken"           
  Created bug with ID bea/abc
  $ be --repo http://bugs.bugseverywhere.org/ comment bea/abc
  
  $ be --repo http://bugs.bugseverywhere.org/ commit "Reported bug in demuxulizer" 

Or send an email to the mailing list at `be-devel@bugseverywhere.org`_.

.. _be-devel@bugseverywhere.org:
  http://void.printf.net/cgi-bin/mailman/listinfo/be-devel
bugs-everywhere-1.1.1/doc/power.txt000066400000000000000000000022411205171247600173030ustar00rootroot00000000000000**************
Power features
**************

BE comes with a number of additional utilities and features that may
be useful to power users.  We'll try to keep an up to date list here,
but your best bet may be poking around in the source on your own.

Autocompletion
==============

:file:`misc/completion` contains completion scripts for common shells
(if we don't have a completion script for your favorite shell, submit
one!).  Basic instructions for installing the completion file for a
given shell should be given in the completion script comments.

Packagers should install these completion scripts in their system's
usual spot (on Gentoo, the Bash completion script should be installed
as :file:`/usr/share/bash_completion/be` and Z shell completion script
should be installed as :file:`/usr/share/zsh/site-functions/_be`).

XML-handling utilities
======================

Email threads are quite similar to the bugs/issues that BE tracks.
There are a number of useful scripts in :file:`misc/xml` to go back
and forth between the two formats using BE's XML format.  The commands
should be well documented.  Use the usual `` --help`` for
more details on a given command.
bugs-everywhere-1.1.1/doc/spam.txt000066400000000000000000000060541205171247600171150ustar00rootroot00000000000000*****************
Dealing with spam
*****************

In the case that some spam or inappropriate comment makes its way
through you interface, you can (sometimes) remove the offending commit
``XYZ``.


If the offending commit is the last commit
==========================================

+-------+--------------------------------------------------------------+
| arch  |                                                              |
+-------+--------------------------------------------------------------+
| bzr   | bzr uncommit && bzr revert                                   |
+-------+--------------------------------------------------------------+
| darcs | darcs obliterate --last=1                                    |
+-------+--------------------------------------------------------------+
| git   | git reset --hard HEAD^                                       |
+-------+--------------------------------------------------------------+
| hg    | hg rollback && hg revert                                     |
+-------+--------------------------------------------------------------+
| mtn   | mtn db kill_rev_locally $(mtn automate get_base_revision_id) |
+-------+--------------------------------------------------------------+

If the offending commit is not the last commit
==============================================

+----------+-----------------------------------------------+
| arch     |                                               |
+----------+-----------------------------------------------+
| bzr [#]_ | bzr rebase -r ..-1 --onto before:XYZ . |
+----------+-----------------------------------------------+
| darcs    | darcs obliterate --matches 'name XYZ'         |
+----------+-----------------------------------------------+
| git      | git rebase --onto XYZ~1 XYZ                   |
+----------+-----------------------------------------------+
| hg [#]_  |                                               |
+----------+-----------------------------------------------+
| mtn [#]_ |                                               |
+----------+-----------------------------------------------+

.. [#] Requires the ```bzr-rebase`` plugin`_.  Note, you have to
   increment ``XYZ`` by hand for ````, because ``bzr`` does not
   support ``after:XYZ``.

.. [#] From `Mercurial, The Definitive Guide`_:

     "Mercurial also does not provide a way to make a file or
     changeset completely disappear from history, because there is no
     way to enforce its disappearance"

.. [#] See `Rebuilding ancestry`_ in the Monotone documentation.

.. _bzr-rebase plugin: http://wiki.bazaar.canonical.com/Rebase
.. _Mercurial, The Definitive Guide:
  http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html#id394667
.. _Rebuilding ancestry:
  http://www.monotone.ca/docs/Rebuilding-ancestry.html

Warnings about changing history
===============================

Note that all of these *change the repo history* , so only do this on
your interface-specific repo before it interacts with any other repo.
Otherwise, you'll have to survive by cherry-picking only the good
commits.
bugs-everywhere-1.1.1/doc/tutorial.txt000066400000000000000000000315161205171247600200210ustar00rootroot00000000000000********
Tutorial
********

Introduction
============

Bugs Everywhere (BE) is a bugtracker built on distributed revision
control.  The idea is to package the bug information with the source
code, so that developers working on the code can make appropriate
changes to the bug repository as they go.  For example, by marking a
bug as "fixed" and applying the fixing changes in the same commit.
This makes it easy to see what's been going on in a particular branch
and helps keep the bug repository in sync with the code.

However, there are some differences compared to centralized
bugtrackers.  Because bugs and comments can be created by several
users in parallel, they have globally unique :py:mod:`IDs
` rather than numbers.  There is also a
developer-friendly command-line_ interface to compliment the
user-friendly :doc:`web ` and :doc:`email ` interfaces.
This tutorial will focus on the command-line interface as the most
powerful, and leave the web and email interfaces to other documents.

.. _command-line: `Command-line interface`_

Installation
============

If your distribution packages BE, it will be easiest to use their package.
For example, most Debian-based distributions support::

    $ apt-get install bugs-everywhere

See :doc:`the install page ` for more information and
alternative methods.

Bugs
====

If you have any problems with BE, you can look for matching bugs::

    $ be --repo http://bugs.bugseverywhere.org/ list

If your bug isn't listed, please open a new bug::

    $ be --repo http://bugs.bugseverywhere.org/ new 'bug'
    Created bug with ID bea/abc
    $ be --repo http://bugs.bugseverywhere.org/ comment bea/def
    


Command-line interface
======================

Help
----

All of the following information elaborates on the command help text,
which is stored in the code itself, and therefore more likely to be up
to date.  You can get a list of commands and topics with::

    $ be help

Or see specific help on ``COMMAND`` with

    $ be help COMMAND

for example::

    $ be help init

will give help on the ``init`` command.

Initialization
--------------

You're happily coding in your Arch_ / Bazaar_ / Darcs_ / Git_ /
Mercurial_ / Monotone_ versioned project and you discover a bug.
You think, "Hmm, I'll need a simple way to track these things".  This
is where BE comes in.  One of the benefits of distributed versioning
systems is the ease of repository creation, and BE follows this trend.
Just type::

    $ be init
    Using  for revision control.
    BE repository initialized.

in your project's root directory.  This will create a ``.be``
directory containing the bug repository and notify your VCS so it will
be versioned starting with your next commit.  See::

    $ be help init

for specific details about where the ``.be`` directory will end up
if you call it from a directory besides your project's root.

.. _Arch: http://www.gnu.org/software/gnu-arch/
.. _Bazaar: http://bazaar.canonical.com/
.. _Darcs: http://darcs.net/
.. _Git: http://git-scm.com/
.. _Mercurial: http://mercurial.selenic.com/
.. _Monotone: http://www.monotone.ca/

Inside the ``.be`` directory (among other things) there will be a long
UUID_ directory.  This is your bug directory.  The idea is that you
could keep several bug directories in the same repository, using one
to track bugs, another to track roadmap issues, etc.  See :py:mod:`IDs
` for details.  For BE itself, the bug directory is
``bea86499-824e-4e77-b085-2d581fa9ccab``, which is why all the bug and
comment IDs in this tutorial will start with ``bea/``.

.. _UUID: http://en.wikipedia.org/wiki/Universally_Unique_Identifier


Creating bugs
-------------

Create new bugs with::

    $ be new 

For example::

    $ be new 'Missing demuxalizer functionality'
    Created bug with ID bea/28f

If you are entering a bug reported by another person, take advantage
of the ``--reporter`` option to give them credit::

    $ be new --reporter 'John Doe ' 'Missing whatsit...'
    Created bug with ID bea/81a

See ``be help new`` for more details.

While the bug summary should include the appropriate keywords, it
should also be brief.  Unlike other bug trackers, the bug itself cannot
contain a multi-line description.  So you should probably add a comment
immediately giving a more elaborate explanation of the problem so that
the developer understands what you want and when the bug can be
considered fixed.

Commenting on bugs
------------------

Bugs are like little mailing lists, and you can comment on the bug
itself or previous comments, attach files, etc.  For example::

    $ be comment abc/28f "Thoughts about demuxalizers..."
    Created comment with ID abc/28f/97a
    $ be comment abc/def/012 "Oops, I forgot to mention..."
    Created comment with ID abc/28f/e88

Usually comments will be long enough that you'll want to compose them
in a text editor, not on the command line itself.  Running ``be
comment`` without providing a ``COMMENT`` argument will try to spawn
an editor automatically (using your environment's ``VISUAL`` or
``EDITOR``, see `Guide to Unix, Environmental Variables`_).

.. _Guide to Unix, Environmental Variables:
   http://en.wikibooks.org/wiki/Guide_to_Unix/Environment_Variables

You can also pipe the comment body in on stdin, which is especially
useful for binary attachments, etc.::

    $ cat screenshot.png | be comment --content-type image/png bea/28f -
    Created comment with ID bea/28f/35d

It's polite to insert binary attachments under comments that explain
the content and why you're attaching it, so the above should have
been::

    $ be comment bea/28f "Whosit dissapears when you mouse-over whatsit."
    Created comment with ID bea/28f/41d
    $ cat screenshot.png | be comment --content-type image/png bea/28f/41d -
    Created comment with ID bea/28f/35d

For more details, see ``be help comment``.

Showing bugs
------------

Ok, you understand how to enter bugs, but how do you get that
information back out?  If you know the ID of the item you're
interested in (e.g. bug bea/28f), try::

    $ be show bea/28f
              ID : 28fb711c-5124-4128-88fe-a88a995fc519
      Short name : bea/28f
        Severity : minor
          Status : open
        Assigned :
        Reporter :
         Creator : ...
         Created : ...
    Missing demuxalizer functionality
    --------- Comment ---------
    Name: bea/28f/97a
    From: ...
    Date: ...
    
    Thoughts about demuxalizers...
      --------- Comment ---------
      Name: bea/28f/e88
      From: ...
      Date: ...
      
      Thoughts about demuxalizers...
    --------- Comment ---------
    Name: bea/28f/41d
    From: ...
    Date: ...
    
    Whosit dissapears when you mouse-over whatsit.
      --------- Comment ---------
      Name: bea/28f/35d
      From: ...
      Date: ...
      
      Content type image/png not printable.  Try XML output instead

You can also get a single comment body, which is useful for extracting
binary attachments::

    $ be show --only-raw-body bea/28f/35d > screenshot.png

There is also an XML output format, which can be useful for emailing
entries around, scripting BE, etc.::

    $ be show --xml bea/35d
    
    
    ...

Listing bugs
------------

If you *don't* know which bug you're interested in, you can query
the whole bug directory::

    $ be list
    bea/28f:om: Missing demuxalizer functionality
    bea/81a:om: Missing whatsit...

There are a whole slew of options for filtering the list of bugs.  See
``be help list`` for details.

Showing changes
---------------

Often you will want to see what's going on in another dev's branch or
remind yourself what you've been working on recently.  All VCSs have
some sort of ``diff`` command that shows what's changed since revision
``XYZ``.  BE has it's own command that formats the bug-repository
portion of those changes in an easy-to-understand summary format.  To
compare your working tree with the last commit::

    $ be diff
    New bugs:
      bea/01c:om: Need command output abstraction for flexible UIs
    Modified bugs:
      bea/343:om: Attach tests to bugs
        Changed bug settings:
          creator: None -> W. Trevor King 

Compare with a previous revision ``1.1.0``::

    $ be diff 1.1.0
    ...

The format of revision names passed to ``diff`` will depend on your
VCS.  For Git, look to gitrevisions_ for inspiration.

Compare your BE branch with the trunk::

    $ be diff --repo http://bugs.bugseverywhere.org/

.. _gitrevisions:
   http://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html

Manipulating bugs
-----------------

There are several commands that allow to to set bug properties.  They
are all fairly straightforward, so we will merely point them out here,
and refer you to ``be help COMMAND`` for more details.

* ``assign``, Assign an individual or group to fix a bug
* ``depend``, Add/remove bug dependencies
* ``due``, Set bug due dates
* ``status``, Change a bug's status level
* ``severity``, Change a bug's severity level
* ``tag``, Tag a bug, or search bugs for tags
* ``target``, Assorted bug target manipulations and queries

You can also remove bugs you feel are no longer useful with
``be remove``, and merge duplicate bugs with ``be merge``.

Subscriptions
-------------

Since BE bugs act as mini mailing lists, we provide ``be subscribe``
as a way to manage change notification.  You can subscribe to all
the changes with::

    $ be subscribe --types all DIR

Subscribe only to bug creaton on bugseverywhere.org with::

    $ be subscribe --server bugseverywhere.org --types new DIR

Subscribe to get all the details about bug ``bea/28f``::

    $ be subscribe --types new bea/28f

To unsubscribe, simply repeat the subscription command adding the
``--unsubscribe`` option, but be aware that it may take some time for
these changes to propogate between distributed repositories.  If you
don't feel confident in your ability to filter email, it's best to
only subscribe to the repository for which you have direct write
access.

Managing bug directories
------------------------

``be set`` lets you configure a bug directory.  You can set

* ``active_status``
  The allowed active bug states and their descriptions.
* ``inactive_status``
  The allowed inactive bug states and their descriptions.
* ``severities``
  The allowed bug severities and their descriptions.
* ``target``
  The current project development target (bug UUID).
* ``extra_strings``
  Space for an array of extra strings.  You usually won't bother with
  this directly.

For example, to set the current target to '1.2.3'::

    $ be set target $(be target --resolve '1.2.3')

Import XML
----------

For serializing bug information (e.g. to email to a mailing list), use::

    $ be show --xml bea/28f > bug.xml

This information can be imported into (another) bug directory via

    $ be import-xml bug.xml

Also distributed with BE are some utilities to convert mailboxes
into BE-XML (``be-mail-to-xml``) and convert BE-XML into mbox_
format for reading in your mail client.

.. _mbox: http://en.wikipedia.org/wiki/Mbox

Export HTML
-----------

To create a static dump of your bug directory, use::

    $ be html

This is a fairly flexible command, see ``be help html`` for details.
It works pretty well as the browsable part of a public interface using
the :doc:`email` for interactive access.

BE over HTTP
------------

Besides using BE to work directly with local VCS-based repositories,
you can use::

    $ be serve-storage

To serve a repository over HTTP.  For example::

    $ be serve-storage > server.log 2>&1 &
    $ be --repo http://localhost:8000 list

Of course, be careful about serving over insecure networks, since
malicous users could fill your disk with endless bugs, etc.  You can
disabled write access by using the ``--read-only`` option, which would
make serving on a public network safer.

Serving the storage interface is flexible, but it can be inefficient.
For example, a call to ``be list`` against a remote backend requires
all bug information to be transfered over the wire.  As a faster
alternative, you may want to serve your repository at the command
level::

    $ be serve-commands > server.log 2>&1 &
    $ be --server http://localhost:8000 list

Take a look at the server logs to get a feel for the bandwidth you're
saving!  Serving commands over insecure networks is at least as
dangerous as serving storage.  Take appropriate precautions for your
network.

Driving the VCS through BE
--------------------------

Since BE uses internal storage drivers for its various backends, it
seemed useful to provide a uniform interface to some of the common
functionality.  These commands are not intended to replace the usually
much more powerful native VCS commands, but to provide an easy means
of simple VCS-agnostic scripting for BE user interfaces, etc.

Commit
~~~~~~

Currently, we only expose ``be commit``, which commits all currently
pending changes.
bugs-everywhere-1.1.1/interfaces/000077500000000000000000000000001205171247600167655ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/email/000077500000000000000000000000001205171247600200545ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/email/interactive/000077500000000000000000000000001205171247600223715ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/email/interactive/README000066400000000000000000000130341205171247600232520ustar00rootroot00000000000000***************
Email Interface
***************

Overview
========

The interactive email interface to Bugs Everywhere (BE) attempts to
provide a `Debian-bug-tracking-system-style`_ interface to a BE
repository.  Users can mail in bug reports, comments, or control
requests, which will be committed to the served repository.
Developers can then pull the changes they approve of from the served
repository into their other repositories and push updates back onto
the served repository.

.. _Debian-bug-tracking-system-style: http://www.debian.org/Bugs

Architecture
============

In order to reduce setup costs, the entire interface can piggyback on
an existing email address, although from a security standpoint it's
probably best to create a dedicated user.  Incoming email is filtered
by procmail, with matching emails being piped into ``be-handle-mail``
for execution.

Once ``be-handle-mail`` receives the email, the parsing method is
selected according to the subject tag that procmail used grab the
email in the first place.  There are four parsing styles:

    +--------------------+----------------------------------+
    | Style              | Subject                          |
    +====================+==================================+
    | creating bugs      | [be-bug:submit] new bug summary  |
    +--------------------+----------------------------------+
    | commenting on bugs | [be-bug:] commit message |
    +--------------------+----------------------------------+
    | control            | [be-bug] commit message          |
    +--------------------+----------------------------------+

These are analogous to ``submit@bugs.debian.org``,
``nnn@bugs.debian.org``, and ``control@bugs.debian.org`` respectively.

Creating bugs
=============

This interface creates a bug whose summary is given by the email's
post-tag subject.  The body of the email must begin with a
pseudo-header containing at least the ``Version`` field.  Anything after
the pseudo-header and before a line starting with ``--`` is, if present,
attached as the bug's first comment.::

    From jdoe@example.com Fri Apr 18 12:00:00 2008
    From: John Doe 
    Date: Fri, 18 Apr 2008 12:00:00 +0000
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Subject: [be-bug:submit] Need tests for the email interface.
    
    Version: XYZ
    Severity: minor
    
    Someone should write up a series of test emails to send into
    be-handle-mail so we can test changes quickly without having to
    use procmail.
    
    --
    Goofy tagline not included.

Available pseudo-headers are ``Version``, ``Reporter``, ``Assign``,
``Depend``, ``Severity``, ``Status``, ``Tag``, and ``Target``.

Commenting on bugs
==================

This interface appends a comment to the bug specified in the subject
tag.  The the first non-multipart body is attached with the
appropriate content-type.  In the case of ``text/plain`` contents,
anything following a line starting with ``--`` is stripped.::

    From jdoe@example.com Fri Apr 18 12:00:00 2008
    From: John Doe 
    Date: Fri, 18 Apr 2008 12:00:00 +0000
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Subject: [be-bug:XYZ] Isolated problem in baz()
    
    Finally tracked it down to the bar() call.  Some sort of
    string<->unicode conversion problem.  Solution ideas?
    
    --
    Goofy tagline not included.

Controlling bugs
================

This interface consists of a list of allowed be commands, with one
command per line.  Blank lines and lines beginning with ``#`` are
ignored, as well anything following a line starting with ``--``.  All
the listed commands are executed in order and their output returned.
The commands are split into arguments with the POSIX-compliant
shlex.split().::

    From jdoe@example.com Fri Apr 18 12:00:00 2008
    From: John Doe 
    Date: Fri, 18 Apr 2008 12:00:00 +0000
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Subject: [be-bug] I'll handle XYZ by release 1.2.3
    
    assign XYZ "John Doe "
    status XYZ assigned
    severity XYZ critical
    target XYZ 1.2.3
    
    --
    Goofy tagline ignored.

Example emails
==============

Take a look at ``interfaces/email/interactive/examples`` for some
more examples.

Procmail rules
==============

The file ``_procmailrc`` as it stands is fairly appropriate for as a
dedicated user's ``~/.procmailrc``.  It forwards matching mail to
``be-handle-mail``, which should be installed somewhere in the user's
path.  All non-matching mail is dumped into ``/dev/null``.  Everything
procmail does will be logged to ``~/be-mail/procmail.log``.

If you're piggybacking the interface on top of an existing account,
you probably only need to add the ``be-handle-mail`` stanza to your
existing ``~/.procmailrc``, since you will still want to receive
non-bug emails.

Note that you will probably have to add a::

    --repo /path/to/served/repository

option to the ``be-handle-mail`` invocation so it knows what repository to
serve.

Multiple repositories may be served by the same email address by adding
multiple ``be-handle-mail`` stanzas, each matching a different tag, for
example the ``[be-bug`` portion of the stanza could be ``[projectX-bug``,
``[projectY-bug``, etc.  If you change the base tag, be sure to add a::

    --tag-base "projectX-bug"

or equivalent to your ``be-handle-mail`` invocation.

Testing
=======

Send test emails in to ``be-handle-mail`` with something like::

    cat examples/blank | ./be-handle-mail -o -l - -a
bugs-everywhere-1.1.1/interfaces/email/interactive/_mailfilterrc000066400000000000000000000025331205171247600251330ustar00rootroot00000000000000# Copyright (C) 2010-2012 Chris Ball 
#                         Gour 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .

# .mailfilter
#
# see man maildrop, maildropfilter, and maildropex
#
# If you already have a ~/.mailfilterc file, you probably only need to
# insert the bug-email grabbing stanza in your ~/.mailfilter.

MAILDIR=$HOME/be-mail
LOGFILE=$MAILDIR/maildrop.log

# Grab all incoming bug emails (but not replies).  This rule eats
# matching emails (i.e. no further procmail processing).

if (/^Subject:.*\[be-bug/ && !/^Subject:.*\[be-bug\].*Re:/) 
   to "| be-handle-mail/"

# drop everything else
if (/*/)
  to /dev/null

bugs-everywhere-1.1.1/interfaces/email/interactive/_procmailrc000066400000000000000000000024771205171247600246200ustar00rootroot00000000000000# Copyright (C) 2009-2012 Chris Ball 
#                         Gianluca Montecchi 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .

# .procmailrc
#
# see man procmail, procmailrc, and procmailex
#
# If you already have a ~/.procmailrc file, you probably only need to
# insert the bug-email grabbing stanza in your ~/.procmailrc.

MAILDIR=$HOME/be-mail
LOGFILE=$MAILDIR/procmail.log

# Grab all incoming bug emails (but not replies).  This rule eats
# matching emails (i.e. no further procmail processing).
:0
* ^Subject: \[be-bug
* !^Subject:.*\[be-bug].*Re:
| be-handle-mail

# Drop everything else
:0
/dev/null
bugs-everywhere-1.1.1/interfaces/email/interactive/be-handle-mail000077500000000000000000001123131205171247600250570ustar00rootroot00000000000000#!/usr/bin/env python
#
# Copyright (C) 2009-2012 Chris Ball 
#                         Gianluca Montecchi 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .
"""
Provide and email interface to the distributed bugtracker Bugs
Everywhere.  Recieves incoming email via procmail.  Provides an
interface similar to the Debian Bug Tracker.  There are currently
three distinct email types: submits, comments, and controls.  The
email types are differentiated by tags in the email subject.  See
SUBJECT_TAG* for the current values.

Submit emails create a bug (and optionally add some intitial
comments).  The post-tag subject is used as the bug summary, and the
email body is parsed for a pseudo-header.  Any text after the
psuedo-header but before a possible line starting with BREAK is added
as the initial bug comment.

Comment emails add comments to a bug.  The first non-multipart portion
of the email is used as the comment body.  If that portion has a
"text/plain" type, any text after and including a possible line
starting with BREAK is stripped to avoid lots of taglines cluttering
up the repository.

Control emails preform any allowed BE commands.  The first
non-multipart portion of the email is used as the comment body.  If
that portion has a "text/plain" type, any text after and including a
possible line starting with BREAK is stripped.  Each pre-BREAK line of
the portion should be a valid BE command, with the initial "be"
omitted, e.g. "be status XYZ fixed" --> "status XYZ fixed".

Any changes made to the repository are commited after the email is
executed, with the email's post-tag subject as the commit message.
"""

import codecs
import StringIO as StringIO
import email
from email.mime.multipart import MIMEMultipart
import email.utils
import os
import os.path
import re
import shlex
import sys
import time
import traceback
import types
import doctest
import unittest

import libbe.bugdir
import libbe.bug
import libbe.comment
import libbe.diff
import libbe.command
import libbe.command.subscribe as subscribe
import libbe.storage
import libbe.ui.command_line
import libbe.util.encoding
import libbe.util.utility
import send_pgp_mime

THIS_SERVER = u'thor.physics.drexel.edu'
THIS_ADDRESS = u'BE Bugs '
UI = None
_THIS_DIR = os.path.abspath(os.path.dirname(__file__))
LOGPATH = os.path.join(_THIS_DIR, u'be-handle-mail.log')
LOGFILE = None

# Tag strings generated by generate_global_tags()
SUBJECT_TAG_BASE = u'be-bug'
SUBJECT_TAG_RESPONSE = None
SUBJECT_TAG_START = None
SUBJECT_TAG_NEW = None
SUBJECT_TAG_COMMENT = None
SUBJECT_TAG_CONTROL = None

BREAK = u'--'
NEW_REQUIRED_PSEUDOHEADERS = [u'Version']
NEW_OPTIONAL_PSEUDOHEADERS = [u'Reporter', u'Assign', u'Depend', u'Severity',
                              u'Status', u'Tag', u'Target',
                              u'Confirm', u'Subscribe']
CONTROL_COMMENT = u'#'
ALLOWED_COMMANDS = [u'assign', u'comment', u'commit', u'depend', u'diff',
                    u'due', u'help', u'list', u'merge', u'new', u'severity',
                    u'show', u'status', u'subscribe', u'tag', u'target']

AUTOCOMMIT = True

ENCODING = u'utf-8'
libbe.util.encoding.ENCODING = ENCODING # force default encoding

class InvalidEmail (ValueError):
    def __init__(self, msg, message):
        ValueError.__init__(self, message)
        self.msg = msg
    def response(self):
        header = self.msg.response_header
        body = [u'Error processing email:\n',
                self.response_body(), u'']
        response_generator = \
            send_pgp_mime.PGPMimeMessageFactory(u'\n'.join(body))
        response = MIMEMultipart()
        response.attach(response_generator.plain())
        response.attach(self.msg.msg)
        ret = send_pgp_mime.attach_root(header, response)
        return ret
    def response_body(self):
        err_text = [unicode(self)]
        return u'\n'.join(err_text)

class InvalidSubject (InvalidEmail):
    def __init__(self, msg, message=None):
        if message == None:
            message = u'Invalid subject'
        InvalidEmail.__init__(self, msg, message)
    def response_body(self):
        err_text = u'\n'.join([unicode(self), u'',
                               u'full subject was:',
                               self.msg.subject()])
        return err_text

class InvalidPseudoHeader (InvalidEmail):
    def response_body(self):
        err_text = [u'Invalid pseudo-header:\n',
                    unicode(self)]
        return u'\n'.join(err_text)

class InvalidCommand (InvalidEmail):
    def __init__(self, msg, command, message=None):
        bigmessage = u'Invalid execution command "%s"' % command
        if message != None:
            bigmessage += u'\n%s' % message
        InvalidEmail.__init__(self, msg, bigmessage)
        self.command = command

class InvalidOption (InvalidCommand):
    def __init__(self, msg, option, message=None):
        bigmessage = u'Invalid option "%s"' % (option)
        if message != None:
            bigmessage += u'\n%s' % message
        InvalidCommand.__init__(self, msg, info, command, bigmessage)
        self.option = option

class NotificationFailed (Exception):
    def __init__(self, msg):
        bigmessage = 'Notification failed: %s' % msg
        Exception.__init__(self, bigmessage)
        self.short_msg = msg

class ID (object):
    """
    Sometimes you want to reference the output of a command that
    hasn't been executed yet.  ID is there for situations like
    > a = Command(msg, "new", ["create a bug"])
    > b = Command(msg, "comment", [ID(a), "and comment on it"])
    """
    def __init__(self, command):
        self.command = command
    def extract_id(self):
        if hasattr(self, 'cached_id'):
            return self._cached_id
        assert self.command.ret == 0, self.command.ret
        if self.command.command.name == u'new':
            regexp = re.compile(u'Created bug with ID (.*)')
        else:
            raise NotImplementedError, self.command.command
        match = regexp.match(self.command.stdout)
        assert len(match.groups()) == 1, str(match.groups())
        self._cached_id = match.group(1)
        return self._cached_id
    def __str__(self):
        if self.command.ret != 0:
            return '' % repr(self.command)
        return '' % self.extract_id()

class Command (object):
    """
    A libbe.command.Command handler.

    Initialize with
      Command(msg, command, args=None, stdin=None)
    where
      msg:     the Message instance prompting this command
      command: name of becommand to execute, e.g. "new"
      args:    list of arguments to pass to the command
      stdin:   if non-null, a string to pipe into the command's stdin
    """
    def __init__(self, msg, command, args=None, stdin=None):
        self.msg = msg
        if args == None:
            self.args = []
        else:
            self.args = args
        self.command = libbe.command.get_command_class(command_name=command)()
        self.command._setup_io = lambda i_enc,o_enc : None
        self.ret = None
        self.stdin = stdin
        self.stdout = None
    def __str__(self):
        return '' % (self.command, ' '.join([str(s) for s in self.args]))
    def normalize_args(self):
        """
        Expand any ID placeholders in self.args.
        """
        for i,arg in enumerate(self.args):
            if isinstance(arg, ID):
                self.args[i] = arg.extract_id()
    def run(self):
        """
        Attempt to execute the command whose info is given in the dictionary
        info.  Returns the exit code, stdout, and stderr produced by the
        command.
        """
        if self.command.name in [None, u'']: # don't accept blank commands
            raise InvalidCommand(self.msg, self, 'Blank')
        elif self.command.name not in ALLOWED_COMMANDS:
            raise InvalidCommand(self.msg, self, 'Not allowed')
        assert self.ret == None, u'running %s twice!' % unicode(self)
        self.normalize_args()
        UI.io.set_stdin(self.stdin)
        self.ret = libbe.ui.command_line.dispatch(UI, self.command, self.args)
        self.stdout = UI.io.get_stdout()
        return (self.ret, self.stdout)
    def response_msg(self):
        if self.ret == None: self.ret = -1
        response_body = [u'Results of running: (exit code %d)' % self.ret,
                         u'  %s %s' % (self.command.name,u' '.join(self.args))]
        if self.stdout != None and len(self.stdout) > 0:
            response_body.extend([u'', u'output:', u'', self.stdout])
        response_body.append(u'') # trailing endline
        response_generator = \
            send_pgp_mime.PGPMimeMessageFactory(u'\n'.join(response_body))
        return response_generator.plain()

class DiffTree (libbe.diff.DiffTree):
    """
    In order to avoid tons of tiny MIMEText attachments, bug-level
    nodes set .add_child_text=True (in .join()), which is propogated
    on to their descendents.  Instead of creating their own
    attachement, each of these descendents appends his data_part to
    the end of the bug-level MIMEText attachment.

    For the example tree in the libbe.diff.Diff unittests:
      bugdir
      bugdir/settings
      bugdir/bugs
      bugdir/bugs/new
      bugdir/bugs/new/c          <- sets .add_child_text
      bugdir/bugs/rem
      bugdir/bugs/rem/b          <- sets .add_child_text
      bugdir/bugs/mod
      bugdir/bugs/mod/a          <- sets .add_child_text
      bugdir/bugs/mod/a/settings
      bugdir/bugs/mod/a/comments
      bugdir/bugs/mod/a/comments/new
      bugdir/bugs/mod/a/comments/new/acom
      bugdir/bugs/mod/a/comments/rem
      bugdir/bugs/mod/a/comments/mod
    """
    def report_or_none(self):
        report = self.report()
        if report == None:
            return None
        payload = report.get_payload()
        if payload == None or len(payload) == 0:
            return None
        return report
    def report_string(self):
        report = self.report_or_none()
        if report == None:
            return 'No changes'
        else:
            return send_pgp_mime.flatten(report, to_unicode=True)
    def make_root(self):
        return MIMEMultipart()
    def join(self, root, parent, data_part):
        if hasattr(parent, 'attach_child_text'):
            self.attach_child_text = True
            if data_part != None:
                send_pgp_mime.append_text(parent.data_mime_part, u'\n\n%s' % (data_part))
            self.data_mime_part = parent.data_mime_part
        else:
            self.data_mime_part = None
            if data_part != None:
                self.data_mime_part = send_pgp_mime.encodedMIMEText(data_part)
            if parent != None and parent.name in [u'new', u'rem', u'mod']:
                self.attach_child_text = True
                if data_part == None: # make blank data_mime_part for children's appends
                    self.data_mime_part = send_pgp_mime.encodedMIMEText(u'')
            if self.data_mime_part != None:
                self.data_mime_part[u'Content-Description'] = self.name
                root.attach(self.data_mime_part)
    def data_part(self, depth, indent=False):
        return libbe.diff.DiffTree.data_part(self, depth, indent=indent)

class Diff (libbe.diff.Diff):
    def bug_add_string(self, bug):
        return bug.string(show_comments=True)
    def _comment_summary_string(self, comment):
        return comment.string()
    def comment_add_string(self, comment):
        return self._comment_summary_string(comment)
    def comment_rem_string(self, comment):
        return self._comment_summary_string(comment)

class Message (object):
    def __init__(self, email_text=None, disable_parsing=False):
        if disable_parsing == False:
            self.text = email_text
            p=email.Parser.Parser()
            self.msg=p.parsestr(self.text)
            if LOGFILE != None:
                LOGFILE.write(u'handling %s\n' % self.author_addr())
                LOGFILE.write(u'\n%s\n\n' % self.text)
        self.confirm = True # enable/disable confirmation email
    def _yes_no(self, boolean):
        if boolean == True:
            return 'yes'
        return 'no'
    def author_tuple(self):
        """
        Extract and normalize the sender's email address.  Returns a
        (name, email) tuple.
        """
        if not hasattr(self, 'author_tuple_cache'):
            self._author_tuple_cache = \
                send_pgp_mime.source_email(self.msg, return_realname=True)
        return self._author_tuple_cache
    def author_addr(self):
        return email.utils.formataddr(self.author_tuple())
    def author_name(self):
        return self.author_tuple()[0]
    def author_email(self):
        return self.author_tuple()[1]
    def default_msg_attribute_access(self, attr_name, default=None):
        if attr_name in self.msg:
            return self.msg[attr_name]
        return default
    def message_id(self, default=None):
        return self.default_msg_attribute_access('message-id', default=default)
    def subject(self):
        if 'subject' not in self.msg:
            raise InvalidSubject(self, u'Email must contain a subject')
        return self.msg['subject']
    def _split_subject(self):
        """
        Returns (tag, subject), with missing values replaced by None.
        """
        if hasattr(self, '_split_subject_cache'):
            return self._split_subject_cache
        args = self.subject().split(u']',1)
        if len(args) < 1:
            self._split_subject_cache = (None, None)
        elif len(args) < 2:
            self._split_subject_cache = (args[0]+u']', None)
        else:
            self._split_subject_cache = (args[0]+u']', args[1].strip())
        return self._split_subject_cache
    def _subject_tag_type(self):
        """
        Parse subject tag, return (type, value), where type is one of
        None, "new", "comment", or "control"; and value is None except
        in the case of "comment", in which case it's the bug
        ID/shortname.
        """
        tag,subject = self._split_subject()
        type = None
        value = None
        if tag == SUBJECT_TAG_NEW:
            type = u'new'
        elif tag == SUBJECT_TAG_CONTROL:
            type = u'control'
        else:
            match = SUBJECT_TAG_COMMENT.match(tag)
            if len(match.groups()) == 1:
                type = u'comment'
                value = match.group(1)
        return (type, value)
    def validate_subject(self):
        """
        Validate the subject line.
        """
        tag,subject = self._split_subject()
        if not tag.startswith(SUBJECT_TAG_START):
            raise InvalidSubject(
                self, u'Subject must start with "%s"' % SUBJECT_TAG_START)
        tag_type,value = self._subject_tag_type()
        if tag_type == None:
            raise InvalidSubject(self, u'Invalid tag "%s"' % tag)
        elif tag_type == u'new' and len(subject) == 0:
            raise InvalidSubject(self, u'Cannot create a bug with blank title')
        elif tag_type == u'comment' and len(value) == 0:
            raise InvalidSubject(self, u'Must specify a bug ID to comment')
    def _get_bodies_and_mime_types(self):
        """
        Traverse the email message returning (body, mime_type) for
        each non-mulitpart portion of the message.
        """
        msg_charset = self.msg.get_content_charset(ENCODING).lower()
        for part in self.msg.walk():
            if part.is_multipart():
                continue
            body,mime_type=(part.get_payload(decode=True),part.get_content_type())
            charset = part.get_content_charset(msg_charset).lower()
            if mime_type.startswith('text/'):
                body = unicode(body, charset) # convert text types to unicode
            yield (body, mime_type)
    def _parse_body_pseudoheaders(self, body, required, optional,
                                  dictionary=None):
        """
        Grab any pseudo-headers from the beginning of body.  Raise
        InvalidPseudoHeader on errors.  Returns the body text after
        the pseudo-header and a dictionary of set options.  If you
        like, you can initialize the dictionary with some defaults
        and pass your initialized dict in as dictionary.
        """
        if dictionary == None:
            dictionary = {}
        body_lines = body.splitlines()
        all = required+optional
        for i,line in enumerate(body_lines):
            line = line.strip()
            if len(line) == 0:
                break
            if ':' not in line:
                raise InvalidPseudoheader(self, line)
            key,value = line.split(':', 1)
            value = value.strip()
            if key not in all:
                raise InvalidPseudoHeader(self, key)
            if len(value) == 0:
                raise InvalidEmail(
                    self, u'Blank value for: %s' % key)
            dictionary[key] = value
        missing = []
        for key in required:
            if key not in dictionary:
                missing.append(key)
        if len(missing) > 0:
            raise InvalidPseudoHeader(self,
                                      u'Missing required pseudo-headers:\n%s'
                                      % u', '.join(missing))
        remaining_body = u'\n'.join(body_lines[i:]).strip()
        return (remaining_body, dictionary)
    def _strip_footer(self, body):
        body_lines = body.splitlines()
        for i,line in enumerate(body_lines):
            if line.startswith(BREAK):
                break
            i += 1 # increment past the current valid line.
        return u'\n'.join(body_lines[:i]).strip()
    def parse(self):
        """
        Parse the commands given in the email.  Raises assorted
        subclasses of InvalidEmail in the case of invalid messages,
        otherwise returns a list of suggested commands to run.
        """
        self.validate_subject()
        tag_type,value = self._subject_tag_type()
        if tag_type == u'new':
            commands = self.parse_new()
        elif tag_type == u'comment':
            commands = self.parse_comment(value)
        elif tag_type == u'control':
            commands = self.parse_control()
        else:
            raise Exception, u'Unrecognized tag type "%s"' % tag_type
        return commands
    def parse_new(self):
        command = u'new'
        tag,subject = self._split_subject()
        summary = subject
        options = {u'Reporter': self.author_addr(),
                   u'Confirm': self._yes_no(self.confirm),
                   u'Subscribe': 'no',
                   }
        body,mime_type = list(self._get_bodies_and_mime_types())[0]
        comment_body,options = \
            self._parse_body_pseudoheaders(body,
                                           NEW_REQUIRED_PSEUDOHEADERS,
                                           NEW_OPTIONAL_PSEUDOHEADERS,
                                           options)
        if options[u'Confirm'].lower() == 'no':
            self.confirm = False
        if options[u'Subscribe'].lower() == 'yes' and self.confirm == True:
            # respond with the subscription format rather than the
            # normal command-output format, because the subscription
            # format is more user-friendly.
            self.confirm = False
        args = [u'--reporter', options[u'Reporter']]
        args.append(summary)
        commands = [Command(self, command, args)]
        id = ID(commands[0])
        comment_body = self._strip_footer(comment_body)
        if len(comment_body) > 0:
            command = u'comment'
            comment = u'Version: %s\n\n'%options[u'Version'] + comment_body
            args = [u'--author', self.author_addr(),
                    u'--alt-id', self.message_id(),
                    u'--content-type', mime_type]
            args.append(id)
            args.append(u'-')
            commands.append(Command(self, u'comment', args, stdin=comment))
        for key,value in options.items():
            if key in [u'Version', u'Reporter', u'Confirm']:
                continue # we've already handled these options
            command = key.lower()
            if key in [u'Depend', u'Tag', u'Target', u'Subscribe']:
                args = [id, value]
            else:
                args = [value, id]
            if key == u'Subscribe':
                if value.lower() != 'yes':
                    continue
                args = ['--subscriber', self.author_addr(), id]
            commands.append(Command(self, command, args))
        return commands
    def parse_comment(self, bug_uuid):
        command = u'comment'
        bug_id = bug_uuid
        author = self.author_addr()
        alt_id = self.message_id()
        body,mime_type = list(self._get_bodies_and_mime_types())[0]
        if mime_type == 'text/plain':
            body = self._strip_footer(body)
        content_type = mime_type
        args = [u'--author', author]
        if alt_id != None:
            args.extend([u'--alt-id', alt_id])
        args.extend([u'--content-type', content_type, bug_id, u'-'])
        commands = [Command(self, command, args, stdin=body)]
        return commands
    def parse_control(self):
        body,mime_type = list(self._get_bodies_and_mime_types())[0]
        commands = []
        for line in body.splitlines():
            line = line.strip()
            if line.startswith(CONTROL_COMMENT) or len(line) == 0:
                continue
            if line.startswith(BREAK):
                break
            if type(line) == types.UnicodeType:
                # work around http://bugs.python.org/issue1170
                line = line.encode('unicode escape')
            fields = shlex.split(line)
            if type(line) == types.UnicodeType:
                # work around http://bugs.python.org/issue1170
                for field in fields:
                    field = unicode(field, 'unicode escape')
            command,args = (fields[0], fields[1:])
            commands.append(Command(self, command, args))
        if len(commands) == 0:
            raise InvalidEmail(self, u'No commands in control email.')
        return commands
    def run(self, repo='.'):
        self._begin_response()
        commands = self.parse()
        try:
            for i,command in enumerate(commands):
                command.run()
                self._add_response(command.response_msg())
        finally:
            if AUTOCOMMIT == True:
                tag,subject = self._split_subject()
                self.commit_command = Command(self, 'commit', [subject])
                self.commit_command.run()
                if LOGFILE != None:
                    LOGFILE.write(u'Autocommit:\n%s\n\n' %
                      send_pgp_mime.flatten(self.commit_command.response_msg(),
                                            to_unicode=True))
    def _begin_response(self):
        tag,subject = self._split_subject()
        response_header = [u'From: %s' % THIS_ADDRESS,
                           u'To: %s' % self.author_addr(),
                           u'Date: %s' % libbe.util.utility.time_to_str(time.time()),
                           u'Subject: %s Re: %s'%(SUBJECT_TAG_RESPONSE,subject)
                           ]
        if self.message_id() != None:
            response_header.append(u'In-reply-to: %s' % self.message_id())
        self.response_header = \
            send_pgp_mime.header_from_text(text=u'\n'.join(response_header))
        self._response_messages = []
    def _add_response(self, response_message):
        self._response_messages.append(response_message)
    def response_email(self):
        assert len(self._response_messages) > 0
        if len(self._response_messages) == 1:
            response_body = self._response_messages[0]
        else:
            response_body = MIMEMultipart()
            for message in self._response_messages:
                response_body.attach(message)
        return send_pgp_mime.attach_root(self.response_header, response_body)
    def subscriber_emails(self, previous_revision=None):
        if previous_revision == None:
            if AUTOCOMMIT != True: # no way to tell what's changed
                raise NotificationFailed('Autocommit dissabled')
            if len(self._response_messages) == 0:
                raise NotificationFailed('Initial email failed.')
            if self.commit_command.ret != 0:
                # commit failed.  Error already logged.
                raise NotificationFailed('Commit failed')

        bd = UI.storage_callbacks.get_bugdir()
        writeable = bd.storage.writeable
        bd.storage.writeable = False
        if bd.storage.versioned == False: # no way to tell what's changed
            bd.storage.writeable = writeable
            raise NotificationFailed('Not versioned')

        bd.load_all_bugs()
        subscribers = subscribe.get_bugdir_subscribers(bd, THIS_SERVER)
        if len(subscribers) == 0:
            bd.storage.writeable = writeable
            return []
        for subscriber,subscriptions in subscribers.items():
            subscribers[subscriber] = []
            for id,types in subscriptions.items():
                for type in types:
                    subscribers[subscriber].append(
                        libbe.diff.Subscription(id,type))

        before_bd, after_bd = self._get_before_and_after_bugdirs(bd, previous_revision)
        diff = Diff(before_bd, after_bd)
        diff.full_report(diff_tree=DiffTree)
        header = self._subscriber_header(bd, previous_revision)

        emails = []
        for subscriber,subscriptions in subscribers.items():
            header.replace_header('to', subscriber)
            report = diff.report_tree(subscriptions, diff_tree=DiffTree)
            root = report.report_or_none()
            if root != None:
                emails.append(send_pgp_mime.attach_root(header, root))
                if LOGFILE != None:
                    LOGFILE.write(u'Preparing to notify %s of changes\n' % subscriber)
        bd.storage.writeable = writeable
        return emails
    def _get_before_and_after_bugdirs(self, bd, previous_revision=None):
        if previous_revision == None:
            commit_msg = self.commit_command.stdout
            assert commit_msg.startswith('Committed '), commit_msg
            after_revision = commit_msg[len('Committed '):]
            before_revision = bd.storage.revision_id(-2)
        else:
            before_revision = previous_revision
        if before_revision == None:
            # this commit was the initial commit
            before_bd = libbe.bugdir.BugDir(from_disk=False,
                                            manipulate_encodings=False)
        else:
            before_bd = libbe.bugdir.RevisionedBugDir(bd, before_revision)
        #after_bd = bd.duplicate_bugdir(after_revision)
        after_bd = bd # assume no changes since commit a few cycles ago
        return (before_bd, after_bd)
    def _subscriber_header(self, bd, previous_revision=None):
        root_dir = os.path.basename(bd.storage.repo)
        if previous_revision == None:
            subject = 'Changes to %s on %s by %s' \
                % (root_dir, THIS_SERVER, self.author_addr())
        else:
            subject = 'Changes to %s on %s since revision %s' \
                % (root_dir, THIS_SERVER, previous_revision)
        header = [u'From: %s' % THIS_ADDRESS,
                  u'To: %s' % u'DUMMY-AUTHOR',
                  u'Date: %s' % libbe.util.utility.time_to_str(time.time()),
                  u'Subject: %s Re: %s' % (SUBJECT_TAG_RESPONSE, subject)
                  ]
        return send_pgp_mime.header_from_text(text=u'\n'.join(header))

def generate_global_tags(tag_base=u'be-bug'):
    """
    Generate a series of tags from a base tag string.
    """
    global SUBJECT_TAG_BASE, SUBJECT_TAG_START, SUBJECT_TAG_RESPONSE, \
        SUBJECT_TAG_NEW, SUBJECT_TAG_COMMENT, SUBJECT_TAG_CONTROL
    SUBJECT_TAG_BASE = tag_base
    SUBJECT_TAG_START = u'[%s' % tag_base
    SUBJECT_TAG_RESPONSE = u'[%s]' % tag_base
    SUBJECT_TAG_NEW = u'[%s:submit]' % tag_base
    SUBJECT_TAG_COMMENT = re.compile(u'\[%s:([\-0-9a-z/]*)]' % tag_base)
    SUBJECT_TAG_CONTROL = SUBJECT_TAG_RESPONSE

def open_logfile(logpath=None):
    """
    If logpath=None, default to global LOGPATH.
    Special logpath strings:
     "-"     set LOGFILE to sys.stderr
     "none"  disable logging
    Relative logpaths are expanded relative to _THIS_DIR
    """
    global LOGPATH, LOGFILE
    if logpath != None:
        if logpath == u'-':
            LOGPATH = u'stderr'
            LOGFILE = sys.stderr
        elif logpath == u'none':
            LOGPATH = u'none'
            LOGFILE = None
        elif os.path.isabs(logpath):
            LOGPATH = logpath
        else:
            LOGPATH = os.path.join(_THIS_DIR, logpath)
    if LOGFILE == None and LOGPATH != u'none':
        LOGFILE = codecs.open(LOGPATH, u'a+',
            libbe.util.encoding.get_text_file_encoding())

def close_logfile():
    if LOGFILE != None and LOGPATH not in [u'stderr', u'none']:
        LOGFILE.close()

def test():
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    num_errors = len(result.errors)
    num_failures = len(result.failures)
    num_bad = num_errors + num_failures
    return num_bad

def main(args):
    from optparse import OptionParser
    global AUTOCOMMIT, UI

    usage='be-handle-mail [options]\n\n%s' % (__doc__)
    parser = OptionParser(usage=usage)
    parser.add_option('-r', '--repo', dest='repo', default=_THIS_DIR,
                      metavar='REPO',
                      help='Select the BE repository to serve (%default).')
    parser.add_option('-t', '--tag-base', dest='tag_base',
                      default=SUBJECT_TAG_BASE, metavar='TAG',
                      help='Set the subject tag base (%default).')
    parser.add_option('-o', '--output', dest='output', action='store_true',
                      help="Don't mail the generated message, print it to stdout instead.  Useful for testing be-handle-mail functionality without the whole mail transfer agent and procmail setup.")
    parser.add_option('-l', '--logfile', dest='logfile', metavar='LOGFILE',
                      help='Set the logfile to LOGFILE.  Relative paths are relative to the location of this be-handle-mail file (%s).  The special value of "-" directs the log output to stderr, and "none" disables logging.' % _THIS_DIR)
    parser.add_option('-a', '--disable-autocommit', dest='autocommit',
                      default=True, action='store_false',
                      help='Disable the autocommit after parsing the email.')
    parser.add_option('-s', '--disable-subscribers', dest='subscribers',
                      default=True, action='store_false',
                      help='Disable subscriber notification emails.')
    parser.add_option('--notify-since', dest='notify_since', metavar='REVISION',
                      help='Notify subscribers of all changes since REVISION.  When this option is set, no input email parsing is done.')
    parser.add_option('--test', dest='test', action='store_true',
                      help='Run internal unit-tests and exit.')

    pargs = args
    options,args = parser.parse_args(args[1:])

    if options.test == True:
        num_bad = test()
        if num_bad > 126:
            num_bad = 1
        sys.exit(num_bad)
    
    AUTOCOMMIT = options.autocommit

    if options.notify_since == None:
        msg_text = sys.stdin.read()

    open_logfile(options.logfile)
    generate_global_tags(options.tag_base)

    io = libbe.command.StringInputOutput()
    UI = libbe.command.UserInterface(io, location=options.repo)

    if options.notify_since != None:
        if options.subscribers == True:
            if LOGFILE != None:
                LOGFILE.write(u'Checking for subscribers to notify since revision %s\n'
                              % options.notify_since)
            try:
                m = Message(disable_parsing=True)
                emails = m.subscriber_emails(options.notify_since)
            except NotificationFailed, e:
                if LOGFILE != None:
                    LOGFILE.write(unicode(e) + u'\n')
            else:
                for msg in emails:
                    if options.output == True:
                        print send_pgp_mime.flatten(msg, to_unicode=True)
                    else:
                        send_pgp_mime.mail(msg, send_pgp_mime.sendmail)
            close_logfile()
        UI.cleanup()
        sys.exit(0)

    if len(msg_text.strip()) == 0: # blank email!?
        if LOGFILE != None:
            LOGFILE.write(u'Blank email!\n')
            close_logfile()
        UI.cleanup()
        sys.exit(1)
    try:
        m = Message(msg_text)
        m.run()
    except InvalidEmail, e:
        response = e.response()
    except Exception, e:
        if LOGFILE != None:
            LOGFILE.write(u'Uncaught exception:\n%s\n' % (e,))
            traceback.print_tb(sys.exc_traceback, file=LOGFILE)
            close_logfile()
        m.commit_command.cleanup()
        UI.cleanup()
        sys.exit(1)
    else:
        response = m.response_email()
    if options.output == True:
        print send_pgp_mime.flatten(response, to_unicode=True)
    elif m.confirm == True:
        if LOGFILE != None:
            LOGFILE.write(u'Sending response to %s\n' % m.author_addr())
            LOGFILE.write(u'\n%s\n\n' % send_pgp_mime.flatten(response,
                                                              to_unicode=True))
        send_pgp_mime.mail(response, send_pgp_mime.sendmail)
    else:
        if LOGFILE != None:
            LOGFILE.write(u'Response declined by %s\n' % m.author_addr())
    if options.subscribers == True:
        if LOGFILE != None:
            LOGFILE.write(u'Checking for subscribers\n')
        try:
            emails = m.subscriber_emails()
        except NotificationFailed, e:
            if LOGFILE != None:
                LOGFILE.write(unicode(e) + u'\n')
        else:
            for msg in emails:
                if options.output == True:
                    print send_pgp_mime.flatten(msg, to_unicode=True)
                else:
                    send_pgp_mime.mail(msg, send_pgp_mime.sendmail)

    close_logfile()
    m.commit_command.cleanup()
    UI.cleanup()

class GenerateGlobalTagsTestCase (unittest.TestCase):
    def setUp(self):
        super(GenerateGlobalTagsTestCase, self).setUp()
        self.save_global_tags()
    def tearDown(self):
        self.restore_global_tags()
        super(GenerateGlobalTagsTestCase, self).tearDown()
    def save_global_tags(self):
        self.saved_globals = [SUBJECT_TAG_BASE, SUBJECT_TAG_START,
                              SUBJECT_TAG_RESPONSE, SUBJECT_TAG_NEW,
                              SUBJECT_TAG_COMMENT, SUBJECT_TAG_CONTROL]
    def restore_global_tags(self):
        global SUBJECT_TAG_BASE, SUBJECT_TAG_START, SUBJECT_TAG_RESPONSE, \
            SUBJECT_TAG_NEW, SUBJECT_TAG_COMMENT, SUBJECT_TAG_CONTROL
        SUBJECT_TAG_BASE, SUBJECT_TAG_START, SUBJECT_TAG_RESPONSE, \
            SUBJECT_TAG_NEW, SUBJECT_TAG_COMMENT, SUBJECT_TAG_CONTROL = \
            self.saved_globals
    def test_restore_global_tags(self):
        "Test global tag restoration by teardown function."
        global SUBJECT_TAG_BASE
        self.failUnlessEqual(SUBJECT_TAG_BASE, u'be-bug')
        SUBJECT_TAG_BASE = 'projectX-bug'
        self.failUnlessEqual(SUBJECT_TAG_BASE, u'projectX-bug')
        self.restore_global_tags()
        self.failUnlessEqual(SUBJECT_TAG_BASE, u'be-bug')
    def test_subject_tag_base(self):
        "Should set SUBJECT_TAG_BASE global correctly"
        generate_global_tags(u'projectX-bug')
        self.failUnlessEqual(SUBJECT_TAG_BASE, u'projectX-bug')
    def test_subject_tag_start(self):
        "Should set SUBJECT_TAG_START global correctly"
        generate_global_tags(u'projectX-bug')
        self.failUnlessEqual(SUBJECT_TAG_START, u'[projectX-bug')
    def test_subject_tag_response(self):
        "Should set SUBJECT_TAG_RESPONSE global correctly"
        generate_global_tags(u'projectX-bug')
        self.failUnlessEqual(SUBJECT_TAG_RESPONSE, u'[projectX-bug]')
    def test_subject_tag_new(self):
        "Should set SUBJECT_TAG_NEW global correctly"
        generate_global_tags(u'projectX-bug')
        self.failUnlessEqual(SUBJECT_TAG_NEW, u'[projectX-bug:submit]')
    def test_subject_tag_control(self):
        "Should set SUBJECT_TAG_CONTROL global correctly"
        generate_global_tags(u'projectX-bug')
        self.failUnlessEqual(SUBJECT_TAG_CONTROL, u'[projectX-bug]')
    def test_subject_tag_comment(self):
        "Should set SUBJECT_TAG_COMMENT global correctly"
        generate_global_tags(u'projectX-bug')
        m = SUBJECT_TAG_COMMENT.match('[projectX-bug:abc/xyz-123]')
        self.failUnlessEqual(len(m.groups()), 1)
        self.failUnlessEqual(m.group(1), u'abc/xyz-123')

unitsuite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
suite = unittest.TestSuite([unitsuite, doctest.DocTestSuite()])

if __name__ == "__main__":
    main(sys.argv)
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/000077500000000000000000000000001205171247600242075ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/email/interactive/examples/blank000066400000000000000000000000011205171247600252100ustar00rootroot00000000000000
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/comment000066400000000000000000000004511205171247600255740ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug:a1d] Subject ignored

We sure do.
--
Goofy tagline ignored
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/email_bugs000066400000000000000000000017641205171247600262510ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 12:00:00 2008
Content-Type: text/xml; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
From: jdoe@example.com
To: a@b.com
Date: Fri, 18 Apr 2008 12:00:00 +0000
Subject: [be-bug:xml] Updates to a, b



 
   1.0.0
   be
   446
   wking@drexel.edu-20091119214553-iqyw2cpqluww3zna
 
 
   a
   a
   minor
   open
   John Doe <jdoe@example.com>
   Thu, 01 Jan 1970 00:00:00 +0000
   Bug A
 
 
   b
   b
   minor
   closed
   Jane Doe <jdoe@example.com>
   Thu, 01 Jan 1970 00:00:00 +0000
   Bug B
 


bugs-everywhere-1.1.1/interfaces/email/interactive/examples/failing_multiples000066400000000000000000000006461205171247600276470ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 12:00:00 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Commit message...

new "test bug"
new "test bug 2"
failing-command
new "test bug 3"

--
This message fails partway through, but the partial changes should be
recorded in a commit...
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/invalid_command000066400000000000000000000004571205171247600272640ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug]

close
--
Close is currently disabled for the email interface.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/invalid_subject000066400000000000000000000004461205171247600273030ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: Spam!

This should elicit an "invalid subject" response email.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/list000066400000000000000000000004441205171247600251070ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Subject ignored

list --status all
--
Dummy content
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/missing_command000066400000000000000000000005111205171247600272760ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Subject ignored

abcde
--
This should elicit a "invalid command 'abcde'" response email.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/multiple_commands000066400000000000000000000005251205171247600276500ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Subject ignored

help
list --status=all
list --status=fixed
show --xml 361
--
Goofy tagline ignored.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/new000066400000000000000000000007261205171247600247300ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 12:00:00 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug:submit] Need tests for the email interface.

Version: XYZ
Reporter: Jane Doe
Assign: Dick Tracy
Depend: 00f
Severity: critical
Status: assigned
Tag: topsecret
Target: Law&Order

--
Goofy tagline not included, and no comment added.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/new_with_comment000066400000000000000000000005341205171247600275020ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug:submit] Need tests for the email interface.

Version: XYZ

I think so anyway.
--
Goofy tagline not included.
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/show000066400000000000000000000004461205171247600251160ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Subject ignored

show --xml 361
--
Can we show a bug?
bugs-everywhere-1.1.1/interfaces/email/interactive/examples/unicode000066400000000000000000000005221205171247600255570ustar00rootroot00000000000000From jdoe@example.com Fri Apr 18 11:18:58 2008
Message-ID: 
Date: Fri, 18 Apr 2008 12:00:00 +0000
From: John Doe 
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Subject: [be-bug] Subject ignored

show --xml f7ccd916-b5c7-4890-a2e3-8c8ace17ae3a
--
Can we handle unicode output?
bugs-everywhere-1.1.1/interfaces/email/interactive/libbe000077700000000000000000000000001205171247600252252../../../libbeustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/email/interactive/send_pgp_mime.py000066400000000000000000000524301205171247600255550ustar00rootroot00000000000000#!/usr/bin/python
#
# Copyright (C) 2009-2012 Chris Ball 
#                         Gianluca Montecchi 
#                         W. Trevor King 
#
# This file is part of Bugs Everywhere.
#
# Bugs Everywhere is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2 of the License, or (at your option) any
# later version.
#
# Bugs Everywhere is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Bugs Everywhere.  If not, see .
"""
Python module and command line tool for sending pgp/mime email.

Mostly uses subprocess to call gpg and a sendmail-compatible mailer.
If you lack gpg, either don't use the encryption functions or adjust
the pgp_* commands.  You may need to adjust the sendmail command to
point to whichever sendmail-compatible mailer you have on your system.
"""

from cStringIO import StringIO
import os
import re
#import GnuPGInterface # Maybe should use this instead of subprocess
import smtplib
import subprocess
import sys
import tempfile
import types

try:
    from email import Message
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication
    from email.encoders import encode_7or8bit
    from email.generator import Generator
    from email.parser import Parser
    from email.utils import getaddress
except ImportError:
    # adjust to old python 2.4
    from email import Message
    from email.MIMEText import MIMEText
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMENonMultipart import MIMENonMultipart
    from email.Encoders import encode_7or8bit
    from email.Generator import Generator
    from email.Parser import Parser
    from email.Utils import getaddresses

    getaddress = getaddresses
    class MIMEApplication (MIMENonMultipart):
        def __init__(self, _data, _subtype, _encoder, **params):
            MIMENonMultipart.__init__(self, 'application', _subtype, **params)
            self.set_payload(_data)
            _encoder(self)

usage="""usage: %prog [options]

Scriptable PGP MIME email using gpg.

You can use gpg-agent for passphrase caching if your key requires a
passphrase (it better!).  Example usage would be to install gpg-agent,
and then run
  export GPG_TTY=`tty`
  eval $(gpg-agent --daemon)
in your shell before invoking this script.  See gpg-agent(1) for more
details.  Alternatively, you can send your passphrase in on stdin
  echo 'passphrase' | %prog [options]
or use the --passphrase-file option
  %prog [options] --passphrase-file FILE [more options]
Both of these alternatives are much less secure than gpg-agent.  You
have been warned.
"""

verboseInvoke = False
PGP_SIGN_AS = None
PASSPHRASE = None

# The following commands are adapted from my .mutt/pgp configuration
#
# Printf-like sequences:
#   %a The value of PGP_SIGN_AS.
#   %f Expands to the name of a file with text to be signed/encrypted.
#   %p Expands to the passphrase argument.
#   %R A string with some number (0 on up) of pgp_reciepient_arg
#      strings.
#   %r One key ID (e.g. recipient email address) to build a
#      pgp_reciepient_arg string.
#
# The above sequences can be used to optionally print a string if
# their length is nonzero. For example, you may only want to pass the
# -u/--local-user argument to gpg if PGP_SIGN_AS is defined.  To
# optionally print a string based upon one of the above sequences, the
# following construct is used
#   %???
# where sequence_char is a character from the table above, and
# optional_string is the string you would like printed if status_char
# is nonzero. optional_string may contain other sequence as well as
# normal text, but it may not contain any question marks.
#
# see http://codesorcery.net/old/mutt/mutt-gnupg-howto
#     http://www.mutt.org/doc/manual/manual-6.html#pgp_autosign
#     http://tldp.org/HOWTO/Mutt-GnuPG-PGP-HOWTO-8.html
# for more details

pgp_recipient_arg='-r "%r"'
pgp_stdin_passphrase_arg='--passphrase-fd 0'
pgp_sign_command='/usr/bin/gpg --no-verbose --quiet --batch %p --output - --detach-sign --armor --textmode %?a?-u "%a"? %f'
pgp_encrypt_only_command='/usr/bin/gpg --no-verbose --quiet --batch --output - --encrypt --armor --textmode --always-trust --encrypt-to "%a" %R -- %f'
pgp_encrypt_sign_command='/usr/bin/gpg --no-verbose --quiet --batch %p --output - --encrypt --sign %?a?-u "%a"? --armor --textmode --always-trust --encrypt-to "%a" %R -- %f'
sendmail='/usr/sbin/sendmail -t'

def mail(msg, sendmail=None):
    """
    Send an email Message instance on its merry way.

    We can shell out to the user specified sendmail in case
    the local host doesn't have an SMTP server set up
    for easy smtplib usage.
    """
    if sendmail != None:
        execute(sendmail, stdin=flatten(msg))
        return None
    s = smtplib.SMTP()
    s.connect()
    s.sendmail(from_addr=source_email(msg),
               to_addrs=target_emails(msg),
               msg=flatten(msg))
    s.close()

def header_from_text(text, encoding="us-ascii"):
    """
    Simple wrapper for instantiating an email.Message from text.
    >>> header = header_from_text('\\n'.join(['From: me@big.edu','To: you@big.edu','Subject: testing']))
    >>> print flatten(header)
    From: me@big.edu
    To: you@big.edu
    Subject: testing
    
    
    """
    text = text.strip()
    if type(text) == types.UnicodeType:
        text = text.encode(encoding)
    # assume StringType arguments are already encoded
    p = Parser()
    return p.parsestr(text, headersonly=True)

def guess_encoding(text):
    if type(text) == types.StringType:
        encoding = "us-ascii"
    elif type(text) == types.UnicodeType:
        for encoding in ["us-ascii", "iso-8859-1", "utf-8"]:
            try:
                text.encode(encoding)
            except UnicodeError:
                pass
            else:
                break
        assert encoding != None
    return encoding

def encodedMIMEText(body, encoding=None):
    if encoding == None:
        encoding = guess_encoding(body)
    if encoding == "us-ascii":
        return MIMEText(body)
    else:
        # Create the message ('plain' stands for Content-Type: text/plain)
        return MIMEText(body.encode(encoding), 'plain', encoding)

def append_text(text_part, new_text):
    original_payload = text_part.get_payload(decode=True)
    new_payload = u"%s%s" % (original_payload, new_text)
    new_encoding = guess_encoding(new_payload)
    text_part.set_payload(new_payload.encode(new_encoding), new_encoding)

def attach_root(header, root_part):
    """
    Attach the email.Message root_part to the email.Message header
    without generating a multi-part message.
    """
    for k,v in header.items():
        root_part[k] = v
    return root_part    

def execute(args, stdin=None, expect=(0,)):
    """
    Execute a command (allows us to drive gpg).
    """
    if verboseInvoke == True:
        print >> sys.stderr, '$ '+args
    try:
        p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, close_fds=True)
    except OSError, e:
        strerror = '%s\nwhile executing %s' % (e.args[1], args)
        raise Exception, strerror
    output, error = p.communicate(input=stdin)
    status = p.wait()
    if verboseInvoke == True:
        print >> sys.stderr, '(status: %d)\n%s%s' % (status, output, error)
    if status not in expect:
        strerror = '%s\nwhile executing %s\n%s\n%d' % (args[1], args, error, status)
        raise Exception, strerror
    return status, output, error

def replace(template, format_char, replacement_text):
    """
    >>> replace('--textmode %?a?-u %a? %f', 'f', 'file.in')
    '--textmode %?a?-u %a? file.in'
    >>> replace('--textmode %?a?-u %a? %f', 'a', '0xHEXKEY')
    '--textmode -u 0xHEXKEY %f'
    >>> replace('--textmode %?a?-u %a? %f', 'a', '')
    '--textmode  %f'
    """
    if replacement_text == None:
        replacement_text = ""
    regexp = re.compile('%[?]'+format_char+'[?]([^?]*)[?]')
    if len(replacement_text) > 0:
        str = regexp.sub('\g<1>', template)
    else:
        str = regexp.sub('', template)
    regexp = re.compile('%'+format_char)
    str = regexp.sub(replacement_text, str)
    return str

def flatten(msg, to_unicode=False):
    """
    Produce flat text output from an email Message instance.
    """
    assert msg != None
    fp = StringIO()
    g = Generator(fp, mangle_from_=False)
    g.flatten(msg)
    text = fp.getvalue()
    if to_unicode == True:
        encoding = msg.get_content_charset() or "utf-8"
        text = unicode(text, encoding=encoding)
    return text

def source_email(msg, return_realname=False):
    """
    Search the header of an email Message instance to find the
    sender's email address.
    """
    froms = msg.get_all('from', [])
    from_tuples = getaddresses(froms) # [(realname, email_address), ...]
    assert len(from_tuples) == 1
    if return_realname == True:
        return from_tuples[0] # (realname, email_address)
    return from_tuples[0][1]  # email_address

def target_emails(msg):
    """
    Search the header of an email Message instance to find a
    list of recipient's email addresses.
    """
    tos = msg.get_all('to', [])
    ccs = msg.get_all('cc', [])
    bccs = msg.get_all('bcc', [])
    resent_tos = msg.get_all('resent-to', [])
    resent_ccs = msg.get_all('resent-cc', [])
    resent_bccs = msg.get_all('resent-bcc', [])
    all_recipients = getaddresses(tos + ccs + bccs + resent_tos
                                  + resent_ccs + resent_bccs)
    return [addr[1] for addr in all_recipients]

class PGPMimeMessageFactory (object):
    """
    See http://www.ietf.org/rfc/rfc3156.txt for specification details.
    >>> from_addr = "me@big.edu"
    >>> to_addr = "you@you.edu"
    >>> header = header_from_text('\\n'.join(['From: %s'%from_addr,'To: %s'%to_addr,'Subject: testing']))
    >>> source_email(header) == from_addr
    True
    >>> target_emails(header) == [to_addr]
    True
    >>> m = PGPMimeMessageFactory('check 1 2\\ncheck 1 2\\n')
    >>> print flatten(m.clearBodyPart())
    Content-Type: text/plain; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: inline
    
    check 1 2
    check 1 2
    
    >>> print flatten(m.plain())
    Content-Type: text/plain; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    
    check 1 2
    check 1 2
    
    >>> signed = m.sign(header)
    >>> signed.set_boundary('boundsep')
    >>> print flatten(signed).replace('\\t', ' '*4) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    Content-Type: multipart/signed; protocol="application/pgp-signature";
        micalg="pgp-sha1"; boundary="boundsep"
    MIME-Version: 1.0
    Content-Disposition: inline
    
    --boundsep
    Content-Type: text/plain; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: inline
    
    check 1 2
    check 1 2
    
    --boundsep
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Description: signature
    Content-Type: application/pgp-signature; name="signature.asc";
        charset="us-ascii"
    
    -----BEGIN PGP SIGNATURE-----
    ...
    -----END PGP SIGNATURE-----
    
    --boundsep--
    >>> encrypted = m.encrypt(header)
    >>> encrypted.set_boundary('boundsep')
    >>> print flatten(encrypted).replace('\\t', ' '*4) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    Content-Type: multipart/encrypted;
        protocol="application/pgp-encrypted";
        micalg="pgp-sha1"; boundary="boundsep"
    MIME-Version: 1.0
    Content-Disposition: inline
    
    --boundsep
    Content-Type: application/pgp-encrypted
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    
    Version: 1
    
    --boundsep
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Type: application/octet-stream; charset="us-ascii"
    
    -----BEGIN PGP MESSAGE-----
    ...
    -----END PGP MESSAGE-----
    
    --boundsep--
    >>> signedAndEncrypted = m.signAndEncrypt(header)
    >>> signedAndEncrypted.set_boundary('boundsep')
    >>> print flatten(signedAndEncrypted).replace('\\t', ' '*4) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
    Content-Type: multipart/encrypted;
        protocol="application/pgp-encrypted";
        micalg="pgp-sha1"; boundary="boundsep"
    MIME-Version: 1.0
    Content-Disposition: inline
    
    --boundsep
    Content-Type: application/pgp-encrypted
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    
    Version: 1
    
    --boundsep
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Type: application/octet-stream; charset="us-ascii"
    
    -----BEGIN PGP MESSAGE-----
    ...
    -----END PGP MESSAGE-----
    
    --boundsep--
    """
    def __init__(self, body):
        self.body = body
    def clearBodyPart(self):
        body = encodedMIMEText(self.body)
        body.add_header('Content-Disposition', 'inline')
        return body
    def passphrase_arg(self, passphrase=None):
        if passphrase == None and PASSPHRASE != None:
            passphrase = PASSPHRASE
        if passphrase == None:
            return (None,'')
        return (passphrase, pgp_stdin_passphrase_arg)
    def plain(self):
        """
        text/plain
        """
        return encodedMIMEText(self.body)
    def sign(self, header, passphrase=None):
        """
        multipart/signed
          +-> text/plain                 (body)
          +-> application/pgp-signature  (signature)
        """
        passphrase,pass_arg = self.passphrase_arg(passphrase)
        body = self.clearBodyPart()
        bfile = tempfile.NamedTemporaryFile()
        bfile.write(flatten(body))
        bfile.flush()

        args = replace(pgp_sign_command, 'f', bfile.name)
        if PGP_SIGN_AS == None:
            pgp_sign_as = '<%s>' % source_email(header)
        else:
            pgp_sign_as = PGP_SIGN_AS
        args = replace(args, 'a', pgp_sign_as)
        args = replace(args, 'p', pass_arg)
        status,output,error = execute(args, stdin=passphrase)
        signature = output

        sig = MIMEApplication(_data=signature,
                              _subtype='pgp-signature; name="signature.asc"',
                              _encoder=encode_7or8bit)
        sig['Content-Description'] = 'signature'
        sig.set_charset('us-ascii')

        msg = MIMEMultipart('signed', micalg='pgp-sha1',
                            protocol='application/pgp-signature')
        msg.attach(body)
        msg.attach(sig)

        msg['Content-Disposition'] = 'inline'
        return msg
    def encrypt(self, header, passphrase=None):
        """
        multipart/encrypted
         +-> application/pgp-encrypted  (control information)
         +-> application/octet-stream   (body)
        """
        body = self.clearBodyPart()
        bfile = tempfile.NamedTemporaryFile()
        bfile.write(flatten(body))
        bfile.flush()

        recipients = [replace(pgp_recipient_arg, 'r', recipient)
                      for recipient in target_emails(header)]
        recipient_string = ' '.join(recipients)
        args = replace(pgp_encrypt_only_command, 'R', recipient_string)
        args = replace(args, 'f', bfile.name)
        if PGP_SIGN_AS == None:
            pgp_sign_as = '<%s>' % source_email(header)
        else:
            pgp_sign_as = PGP_SIGN_AS
        args = replace(args, 'a', pgp_sign_as)
        status,output,error = execute(args)
        encrypted = output

        enc = MIMEApplication(_data=encrypted, _subtype='octet-stream',
                              _encoder=encode_7or8bit)
        enc.set_charset('us-ascii')

        control = MIMEApplication(_data='Version: 1\n', _subtype='pgp-encrypted',
                                  _encoder=encode_7or8bit)

        msg = MIMEMultipart('encrypted', micalg='pgp-sha1',
                            protocol='application/pgp-encrypted')
        msg.attach(control)
        msg.attach(enc)

        msg['Content-Disposition'] = 'inline'
        return msg
    def signAndEncrypt(self, header, passphrase=None):
        """
        multipart/encrypted
         +-> application/pgp-encrypted  (control information)
         +-> application/octet-stream   (body)
        """
        passphrase,pass_arg = self.passphrase_arg(passphrase)
        body = self.sign(header, passphrase)
        body.__delitem__('Bcc')
        bfile = tempfile.NamedTemporaryFile()
        bfile.write(flatten(body))
        bfile.flush()

        recipients = [replace(pgp_recipient_arg, 'r', recipient)
                      for recipient in target_emails(header)]
        recipient_string = ' '.join(recipients)
        args = replace(pgp_encrypt_only_command, 'R', recipient_string)
        args = replace(args, 'f', bfile.name)
        if PGP_SIGN_AS == None:
            pgp_sign_as = '<%s>' % source_email(header)
        else:
            pgp_sign_as = PGP_SIGN_AS
        args = replace(args, 'a', pgp_sign_as)
        args = replace(args, 'p', pass_arg)
        status,output,error = execute(args, stdin=passphrase)
        encrypted = output

        enc = MIMEApplication(_data=encrypted, _subtype='octet-stream',
                              _encoder=encode_7or8bit)
        enc.set_charset('us-ascii')

        control = MIMEApplication(_data='Version: 1\n',
                                  _subtype='pgp-encrypted',
                                  _encoder=encode_7or8bit)

        msg = MIMEMultipart('encrypted', micalg='pgp-sha1',
                            protocol='application/pgp-encrypted')
        msg.attach(control)
        msg.attach(enc)

        msg['Content-Disposition'] = 'inline'
        return msg

def test():
    import doctest
    doctest.testmod()


if __name__ == '__main__':
    from optparse import OptionParser

    parser = OptionParser(usage=usage)
    parser.add_option('-t', '--test', dest='test', action='store_true',
                      help='Run doctests and exit')

    parser.add_option('-H', '--header-file', dest='header_filename',
                      help='file containing email header', metavar='FILE')
    parser.add_option('-B', '--body-file', dest='body_filename',
                      help='file containing email body', metavar='FILE')

    parser.add_option('-P', '--passphrase-file', dest='passphrase_file',
                      help='file containing gpg passphrase', metavar='FILE')
    parser.add_option('-p', '--passphrase-fd', dest='passphrase_fd',
                      help='file descriptor from which to read gpg passphrase (0 for stdin)',
                      type="int", metavar='DESCRIPTOR')

    parser.add_option('--mode', dest='mode', default='sign',
                      help="One of 'sign', 'encrypt', 'sign-encrypt', or 'plain'.  Defaults to %default.",
                      metavar='MODE')

    parser.add_option('-a', '--sign-as', dest='sign_as',
                      help="The gpg key to sign with (gpg's -u/--local-user)",
                      metavar='KEY')

    parser.add_option('--output', dest='output', action='store_true',
                      help="Don't mail the generated message, print it to stdout instead.")

    (options, args) = parser.parse_args()

    stdin_used = False

    if options.passphrase_file != None:
        PASSPHRASE = file(options.passphrase_file, 'r').read()
    elif options.passphrase_fd != None:
        if options.passphrase_fd == 0:
            stdin_used = True
            PASSPHRASE = sys.stdin.read()
        else:
            PASSPHRASE = os.read(options.passphrase_fd)

    if options.sign_as:
        PGP_SIGN_AS = options.sign_as

    if options.test == True:
        test()
        sys.exit(0)

    header = None
    if options.header_filename != None:
        if options.header_filename == '-':
            assert stdin_used == False
            stdin_used = True
            header = sys.stdin.read()
        else:
            header = file(options.header_filename, 'r').read()
    if header == None:
        raise Exception, "missing header"
    headermsg = header_from_text(header)
    body = None
    if options.body_filename != None:
        if options.body_filename == '-':
            assert stdin_used == False
            stdin_used = True
            body = sys.stdin.read()
        else:
            body = file(options.body_filename, 'r').read()
    if body == None:
        raise Exception, "missing body"

    m = PGPMimeMessageFactory(body)
    if options.mode == "sign":
        bodymsg = m.sign(header)
    elif options.mode == "encrypt":
        bodymsg = m.encrypt(header)
    elif options.mode == "sign-encrypt":
        bodymsg = m.signAndEncrypt(header)
    elif options.mode == "plain":
        bodymsg = m.plain()
    else:
        raise Exception("unrecognized mode '%s'" % options.mode)

    message = attach_root(headermsg, bodymsg)
    if options.output == True:
        message = flatten(message)
        print message
    else:
        mail(message, sendmail)
bugs-everywhere-1.1.1/interfaces/web/000077500000000000000000000000001205171247600175425ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/web/.hgignore000066400000000000000000000000551205171247600213450ustar00rootroot00000000000000syntax: glob
*.pyc
.DS_Store
*.log
*.tmproj

bugs-everywhere-1.1.1/interfaces/web/.hgtags000066400000000000000000000001361205171247600210200ustar00rootroot000000000000008d8c7f52f3afb6026dd47d7303a7f6a734b3177d alpha
abfe7aa4bdf3cd019ad1d51278c293a4e008b397 alpha
bugs-everywhere-1.1.1/interfaces/web/LICENSE000066400000000000000000000021471205171247600205530ustar00rootroot00000000000000
copyrev: 566007698e1bb8a4f0bc4929a68ecc068ab28890
copy: LICENSE.txt

Copyright (c) 2009 Steve Losh

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

bugs-everywhere-1.1.1/interfaces/web/README000066400000000000000000000020511205171247600204200ustar00rootroot00000000000000-*- markdown -*-

Cherry Flavored Bugs Everywhere
===============================

CFBE is a quick web interface to [BugsEverywhere](http://bugseverywhere.org/).  It's still very much a work-in-progress.

Installing
----------

I intend to streamline the installation once I'm satisfied with the interface itself.  For now, the install process goes something like this:

* Install [CherryPy](http://cherrypy.org/) if you don't have it.
* Install [Jinja2](http://jinja.pocoo.org/2/) if you don't have it.
* Install [BugsEverywhere](http://bugseverywhere.org/) if you don't have it.
* Download a zip/tar of CFBE (or hg clone) from the [Mercurial repository](http://bitbucket.org/sjl/cherryflavoredbugseverywhere/).
* Unzip (if you grabbed a zip) and put the folder in your Python site-packages directory (or put it anywhere and symlink it to site-packages).
* Symlink `site-packages/cherryflavoredbugseverywhere/cfbe.py` to `/usr/local/bin/cfbe`
* Use `cfbe [project_root]` to start up the web interface for that project.
* Visit http://localhost:8080/ in a browser.
bugs-everywhere-1.1.1/interfaces/web/__init__.py000066400000000000000000000000001205171247600216410ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/web/cfbe.py000077500000000000000000000022111205171247600210120ustar00rootroot00000000000000#!/usr/bin/env python

import cherrypy
import web
from optparse import OptionParser
from os import path

module_dir = path.dirname(path.abspath(web.__file__))
template_dir = path.join(module_dir, 'templates')

def build_parser():
    """Builds and returns the command line option parser."""
    
    usage = 'usage: %prog bug_directory'
    parser = OptionParser(usage)
    return parser

def parse_arguments():
    """Parse the command line arguments."""
    
    parser = build_parser()
    (options, args) = parser.parse_args()
    
    if len(args) != 1:
        parser.error('You need to specify a bug directory.')
    
    return { 'bug_root': args[0], }


config = path.join(module_dir, 'cfbe.config')
options = parse_arguments()

WebInterface = web.WebInterface(path.abspath(options['bug_root']), template_dir)

cherrypy.config.update({
        'tools.encode.on': True,
        'tools.encode.encoding': 'utf8',
        'tools.staticdir.root': path.join(module_dir, 'static'),
        })
app_config = { '/static': { 'tools.staticdir.on': True,
                            'tools.staticdir.dir': '', } }
cherrypy.quickstart(WebInterface, '/', app_config)
bugs-everywhere-1.1.1/interfaces/web/static/000077500000000000000000000000001205171247600210315ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/web/static/scripts/000077500000000000000000000000001205171247600225205ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/web/static/scripts/jquery.corners.min.js000066400000000000000000000171451205171247600266410ustar00rootroot00000000000000/*
 * jQuery Corners 0.3
 * Copyright (c) 2008 David Turnbull, Steven Wittens
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */
jQuery.fn.corners=function(C){var N="rounded_by_jQuery_corners";var V=B(C);var F=false;try{F=(document.body.style.WebkitBorderRadius!==undefined);var Y=navigator.userAgent.indexOf("Chrome");if(Y>=0){F=false}}catch(E){}var W=false;try{W=(document.body.style.MozBorderRadius!==undefined);var Y=navigator.userAgent.indexOf("Firefox");if(Y>=0&&parseInt(navigator.userAgent.substring(Y+8))<3){W=false}}catch(E){}return this.each(function(b,h){$e=jQuery(h);if($e.hasClass(N)){return }$e.addClass(N);var a=/{(.*)}/.exec(h.className);var c=a?B(a[1],V):V;var j=h.nodeName.toLowerCase();if(j=="input"){h=O(h)}if(F&&c.webkit){K(h,c)}else{if(W&&c.mozilla&&(c.sizex==c.sizey)){M(h,c)}else{var d=D(h.parentNode);var f=D(h);switch(j){case"a":case"input":Z(h,c,d,f);break;default:R(h,c,d,f);break}}}});function K(d,c){var a=""+c.sizex+"px "+c.sizey+"px";var b=jQuery(d);if(c.tl){b.css("WebkitBorderTopLeftRadius",a)}if(c.tr){b.css("WebkitBorderTopRightRadius",a)}if(c.bl){b.css("WebkitBorderBottomLeftRadius",a)}if(c.br){b.css("WebkitBorderBottomRightRadius",a)}}function M(d,c){var a=""+c.sizex+"px";var b=jQuery(d);if(c.tl){b.css("-moz-border-radius-topleft",a)}if(c.tr){b.css("-moz-border-radius-topright",a)}if(c.bl){b.css("-moz-border-radius-bottomleft",a)}if(c.br){b.css("-moz-border-radius-bottomright",a)}}function Z(k,n,l,a){var m=S("table");var i=S("tbody");m.appendChild(i);var j=S("tr");var d=S("td","top");j.appendChild(d);var h=S("tr");var c=T(k,n,S("td"));h.appendChild(c);var f=S("tr");var b=S("td","bottom");f.appendChild(b);if(n.tl||n.tr){i.appendChild(j);X(d,n,l,a,true)}i.appendChild(h);if(n.bl||n.br){i.appendChild(f);X(b,n,l,a,false)}k.appendChild(m);if(jQuery.browser.msie){m.onclick=Q}k.style.overflow="hidden"}function Q(){if(!this.parentNode.onclick){this.parentNode.click()}}function O(c){var b=document.createElement("a");b.id=c.id;b.className=c.className;if(c.onclick){b.href="javascript:";b.onclick=c.onclick}else{jQuery(c).parent("form").each(function(){b.href=this.action});b.onclick=I}var a=document.createTextNode(c.value);b.appendChild(a);c.parentNode.replaceChild(b,c);return b}function I(){jQuery(this).parent("form").each(function(){this.submit()});return false}function R(d,a,b,c){var f=T(d,a,document.createElement("div"));d.appendChild(f);if(a.tl||a.tr){X(d,a,b,c,true)}if(a.bl||a.br){X(d,a,b,c,false)}}function T(j,i,k){var b=jQuery(j);var l;while(l=j.firstChild){k.appendChild(l)}if(j.style.height){var f=parseInt(b.css("height"));k.style.height=f+"px";f+=parseInt(b.css("padding-top"))+parseInt(b.css("padding-bottom"));j.style.height=f+"px"}if(j.style.width){var a=parseInt(b.css("width"));k.style.width=a+"px";a+=parseInt(b.css("padding-left"))+parseInt(b.css("padding-right"));j.style.width=a+"px"}k.style.paddingLeft=b.css("padding-left");k.style.paddingRight=b.css("padding-right");if(i.tl||i.tr){k.style.paddingTop=U(j,i,b.css("padding-top"),true)}else{k.style.paddingTop=b.css("padding-top")}if(i.bl||i.br){k.style.paddingBottom=U(j,i,b.css("padding-bottom"),false)}else{k.style.paddingBottom=b.css("padding-bottom")}j.style.padding=0;return k}function U(f,a,d,c){if(d.indexOf("px")<0){try{console.error("%s padding not in pixels",(c?"top":"bottom"),f)}catch(b){}d=a.sizey+"px"}d=parseInt(d);if(d-a.sizey<0){try{console.error("%s padding is %ipx for %ipx corner:",(c?"top":"bottom"),d,a.sizey,f)}catch(b){}d=a.sizey}return d-a.sizey+"px"}function S(b,a){var c=document.createElement(b);c.style.border="none";c.style.borderCollapse="collapse";c.style.borderSpacing=0;c.style.padding=0;c.style.margin=0;if(a){c.style.verticalAlign=a}return c}function D(b){try{var d=jQuery.css(b,"background-color");if(d.match(/^(transparent|rgba\(0,\s*0,\s*0,\s*0\))$/i)&&b.parentNode){return D(b.parentNode)}if(d==null){return"#ffffff"}if(d.indexOf("rgb")>-1){d=A(d)}if(d.length==4){d=L(d)}return d}catch(a){return"#ffffff"}}function L(a){return"#"+a.substring(1,2)+a.substring(1,2)+a.substring(2,3)+a.substring(2,3)+a.substring(3,4)+a.substring(3,4)}function A(h){var a=255;var d="";var b;var e=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;var f=e.exec(h);for(b=1;b<4;b++){d+=("0"+parseInt(f[b]).toString(16)).slice(-2)}return"#"+d}function B(b,d){var b=b||"";var c={sizex:5,sizey:5,tl:false,tr:false,bl:false,br:false,webkit:true,mozilla:true,transparent:false};if(d){c.sizex=d.sizex;c.sizey=d.sizey;c.webkit=d.webkit;c.transparent=d.transparent;c.mozilla=d.mozilla}var a=false;var e=false;jQuery.each(b.split(" "),function(f,j){j=j.toLowerCase();var h=parseInt(j);if(h>0&&j==h+"px"){c.sizey=h;if(!a){c.sizex=h}a=true}else{switch(j){case"no-native":c.webkit=c.mozilla=false;break;case"webkit":c.webkit=true;break;case"no-webkit":c.webkit=false;break;case"mozilla":c.mozilla=true;break;case"no-mozilla":c.mozilla=false;break;case"anti-alias":c.transparent=false;break;case"transparent":c.transparent=true;break;case"top":e=c.tl=c.tr=true;break;case"right":e=c.tr=c.br=true;break;case"bottom":e=c.bl=c.br=true;break;case"left":e=c.tl=c.bl=true;break;case"top-left":e=c.tl=true;break;case"top-right":e=c.tr=true;break;case"bottom-left":e=c.bl=true;break;case"bottom-right":e=c.br=true;break}}});if(!e){if(!d){c.tl=c.tr=c.bl=c.br=true}else{c.tl=d.tl;c.tr=d.tr;c.bl=d.bl;c.br=d.br}}return c}function P(f,d,h){var e=Array(parseInt("0x"+f.substring(1,3)),parseInt("0x"+f.substring(3,5)),parseInt("0x"+f.substring(5,7)));var c=Array(parseInt("0x"+d.substring(1,3)),parseInt("0x"+d.substring(3,5)),parseInt("0x"+d.substring(5,7)));r="0"+Math.round(e[0]+(c[0]-e[0])*h).toString(16);g="0"+Math.round(e[1]+(c[1]-e[1])*h).toString(16);d="0"+Math.round(e[2]+(c[2]-e[2])*h).toString(16);return"#"+r.substring(r.length-2)+g.substring(g.length-2)+d.substring(d.length-2)}function X(f,a,b,d,c){if(a.transparent){G(f,a,b,c)}else{J(f,a,b,d,c)}}function J(k,z,p,a,n){var h,f;var l=document.createElement("div");l.style.fontSize="1px";l.style.backgroundColor=p;var b=0;for(h=1;h<=z.sizey;h++){var u,t,q;arc=Math.sqrt(1-Math.pow(1-h/z.sizey,2))*z.sizex;var c=z.sizex-Math.ceil(arc);var w=Math.floor(b);var v=z.sizex-c-w;var o=document.createElement("div");var m=l;o.style.margin="0px "+c+"px";o.style.height="1px";o.style.overflow="hidden";for(f=1;f<=v;f++){if(f==1){if(f==v){u=((arc+b)*0.5)-w}else{t=Math.sqrt(1-Math.pow(1-(c+1)/z.sizex,2))*z.sizey;u=(t-(z.sizey-h))*(arc-w-v+1)*0.5}}else{if(f==v){t=Math.sqrt(1-Math.pow((z.sizex-c-f+1)/z.sizex,2))*z.sizey;u=1-(1-(t-(z.sizey-h)))*(1-(b-w))*0.5}else{q=Math.sqrt(1-Math.pow((z.sizex-c-f)/z.sizex,2))*z.sizey;t=Math.sqrt(1-Math.pow((z.sizex-c-f+1)/z.sizex,2))*z.sizey;u=((t+q)*0.5)-(z.sizey-h)}}H(z,o,m,n,P(p,a,u));m=o;var o=m.cloneNode(false);o.style.margin="0px 1px"}H(z,o,m,n,a);b=arc}if(n){k.insertBefore(l,k.firstChild)}else{k.appendChild(l)}}function H(c,a,e,d,b){if(d&&!c.tl){a.style.marginLeft=0}if(d&&!c.tr){a.style.marginRight=0}if(!d&&!c.bl){a.style.marginLeft=0}if(!d&&!c.br){a.style.marginRight=0}a.style.backgroundColor=b;if(d){e.appendChild(a)}else{e.insertBefore(a,e.firstChild)}}function G(c,o,l,h){var f=document.createElement("div");f.style.fontSize="1px";var a=document.createElement("div");a.style.overflow="hidden";a.style.height="1px";a.style.borderColor=l;a.style.borderStyle="none solid";var m=o.sizex-1;var j=o.sizey-1;if(!j){j=1}for(var b=0;bbody {font-size: 14px;}

img {display: inline-block; vertical-align: bottom;}

h1,h2,h3,h4,h5,h6,strong,b,dt,th {font-weight: 700;}
address,cite,em,i,caption,dfn,var {font-style: italic;}

h1 {margin: 0 0 0.75em; font-size: 2em;}
h2 {margin: 0 0 1em; font-size: 1.5em;}
h3 {margin: 0 0 1.286em; font-size: 1.167em;}
h4 {margin: 0 0 1.5em; font-size: 1em;}
h5 {margin: 0 0 1.8em; font-size: .834em;}
h6 {margin: 0 0 2em; font-size: .75em;}

p,ul,ol,dl,blockquote,pre {margin: 0 0 1.5em;}

li ul,li ol {margin: 0;}
ul {list-style: outside disc;}
ol {list-style: outside decimal;}
li {margin: 0 0 0 2em;}
dd {padding-left: 1.5em;}
blockquote {padding: 0 1.5em;}

a {text-decoration: underline;}
a:hover {text-decoration: none;}
abbr,acronym {border-bottom: 1px dotted; cursor: help;}
del {text-decoration: line-through;}
ins {text-decoration: overline;}
sub {font-size: .834em; line-height: 1em; vertical-align: sub;}
sup {font-size: .834em; line-height: 1em; vertical-align: super;}

tt,code,kbd,samp,pre {font-size: 1em; font-family: "Courier New", Courier, monospace;}

/* Table styles */
table {border-collapse: collapse; border-spacing: 0; margin: 0 0 1.5em;}
caption {text-align: left;}
th, td {padding: .25em .5em;}
tbody td, tbody th {border: 1px solid #000;}
tfoot {font-style: italic;}

/* Form styles */
fieldset {clear: both;}
legend {padding: 0 0 1.286em; font-size: 1.167em; font-weight: 700;}
fieldset fieldset legend {padding: 0 0 1.5em; font-size: 1em;}
* html legend {margin-left: -7px;}
*+html legend {margin-left: -7px;}

form .field, form .buttons {clear: both; margin: 0 0 1.5em;}
form .field label {display: block;}
form ul.fields li {list-style-type: none; margin: 0;}
form ul.inline li, form ul.inline label {display: inline;}
form ul.inline li {padding: 0 .75em 0 0;}

input.radio, input.checkbox {vertical-align: top;}
label, button, input.submit, input.image {cursor: pointer;}
* html input.radio, * html input.checkbox {vertical-align: middle;}
*+html input.radio, *+html input.checkbox {vertical-align: middle;}

textarea {overflow: auto;}
input.text, input.password, textarea, select {margin: 0; font: 1em/1.3 Helvetica, Arial, "Liberation Sans", "Bitstream Vera Sans", sans-serif; vertical-align: bottom;}
input.text, input.password, textarea {border: 1px solid #444; border-bottom-color: #666; border-right-color: #666; padding: 2px;}

* html button {margin: 0 .34em 0 0;}
*+html button {margin: 0 .34em 0 0;}

form.horizontal .field {padding-left: 150px;}
form.horizontal .field label {display: inline; float: left; width: 140px; margin-left: -150px;}

/* Useful classes */
img.left {display: inline; float: left; margin: 0 1.5em .75em 0;}
img.right {display: inline; float: right; margin: 0 0 .75em .75em;}bugs-everywhere-1.1.1/interfaces/web/static/style/cfbe.css000066400000000000000000000057601205171247600236120ustar00rootroot00000000000000/* @override http://localhost:8080/static/style/cfbe.css */

body {
    background-color: #eee;
}

div#main-pane {
    width: 960px;
    margin: 3em auto;
    border: 1px solid #888;
    background-color: #fcfcfc;
}
.inside-main-pane {
    padding: 0em 3em;
}

div#header {
    background-color: #D8004A;
    height: 6em;
}
div#header h1 {
    font-size: 4em;
    line-height: 1.5em;
    margin-bottom: 0em;
    color: #fff;
    font-weight: normal;
    font-family: "Helvetica Neue Ultra Light", "HelveticaNeue-UltraLight", "Helvetica", "Arial", sans-serif;
    letter-spacing: 1px;
}

div#navigation {
    height: 3em;
    line-height: 3em;
    border-bottom: 1px solid #888;
}
div#content-pane {
    margin: 1.5em 0em 3em;
}

div#filter-pane {
    display: none;
    border-bottom: 1px solid #888;
    line-height: 3em;
    text-align: right;
}
ul.filter-items {
    list-style-type: none;
    margin: 0em;
    padding: 0em;
}
ul.filter-items li {
    display: inline;
    margin-left: 1.5em;
}

div#footer {
    text-align: center;
    height: 3em;
    border-top: 1px solid #888;
}
div#footer p {
    font-size: 0.9em;
    line-height: 3.333em;
}

span#filters {
    float: right;
}
span#filters a {
    margin-left: 1.5em;
}

a:link, a:visited, a:active {
    color: #d03; text-decoration: none; font-weight: bold;
}
a:hover {
    color: #60b305;
}

.header-with-link {
    display: inline-block;
}
.header-link {
    margin-left: 1em;
}

table#bug-list {
    width: 100%; border-collapse: collapse; border: 0.084em solid #ccc;
}
table#bug-list td, table#bug-list th {
    border: 0em; border-bottom: 0.084em solid #ccc; text-align: left;
}
table tr td, table tr th {
    padding: 0px 5px;
}
table tr td {
    line-height: 2.832em; padding-bottom: 0.084em;
}
table tr th {
    line-height: 2.916em;
}
table {
    margin-bottom: 1.417em;
}
tr.stripe {
    background-color: #fcecf8;
}

div#assignees, div#targets, div#tags {
    display: none;
}

p.creation-info {
    color: #888;
}
span.detail-field-header {
    font-weight: 700;
    width: 7.5em;
    padding-right: 1em;
    display: inline-block;
    text-align: right;
}

div.bug-comment {
    margin-left: 2em;
}
p.bug-comment-body {
    white-space: pre;
    margin: 0em 0em 0em 0em;
}
p.bug-comment-footer {
    margin: 0em 0em; color: #888;
}
h4.bug-comment-header {
    margin: 1.5em 0em 0em;
}

#create-form {
    display: none;
}
#create-form fieldset {
    clear: none;
}
#create-form input#create-summary {
    width: 20em;
    border: 1px solid #888;
    margin-right: 1.5em;
}
#create-button {
    margin: 0em;
}

form#add-comment-form {
    display: none;
    margin-top: 1.5em;
}
p#add-comment-link {
    margin-top: 1.5em;
}

form#bug-details-edit-form {
    display: none;
}
form#bug-details-edit-form label {
    font-weight: 700;
    width: 7.5em;
    margin-left: 0em;
    margin-right: 1em;
    text-align: right;
}
form#bug-details-edit-form .field {
    padding-left: 0em;
}

form#bug-summary-edit-form {
    display: none;
}
input#bug-summary-edit-body {
    width: 95%;
}
bugs-everywhere-1.1.1/interfaces/web/templates/000077500000000000000000000000001205171247600215405ustar00rootroot00000000000000bugs-everywhere-1.1.1/interfaces/web/templates/base.html000066400000000000000000000113701205171247600233420ustar00rootroot00000000000000


    
        Cherry Flavored Bugs Everywhere!

        
        

        

        

        

        {% block script %}{% endblock %}
    

    
        

{% block page_title %} {% endblock %}

{% block content %}{% endblock %}
bugs-everywhere-1.1.1/interfaces/web/templates/bug.html000066400000000000000000000151361205171247600232110ustar00rootroot00000000000000{% extends "base.html" %} {% block page_title %} Bug {{ bug.id.user() }} – {{ bug.summary|truncate(70) }} {% endblock %} {% block script %} {% endblock %} {% block content %}

Created on {{ bug.time|datetimeformat }} by {{ bug.creator|e }}

edit

Status: {{ bug.status }}
Severity: {{ bug.severity }}
Scheduled for: {{ target }}
Assigned to: {{ assignee|e }}
Permanent ID: {{ bug.uuid }}

edit

{{ bug.summary }}

Comments

{% for comment in bug.comments() %}

{{ comment.author|striptags|e }} said:

{{ comment.body|trim|e }}

{% endfor %}
{% endblock %} bugs-everywhere-1.1.1/interfaces/web/templates/empty-list.html000066400000000000000000000002341205171247600245340ustar00rootroot00000000000000{% extends "base.html" %} {% block page_title %} {{ label }} {% endblock %} {% block content %}

No matching bugs.

{% endblock %} bugs-everywhere-1.1.1/interfaces/web/templates/list.html000066400000000000000000000011751205171247600234050ustar00rootroot00000000000000{% extends "base.html" %} {% block page_title %} {{ label }} {% endblock %} {% block content %} {% for bug in bugs %} {% endfor %}
ID Summary Status Assigned To
{{ bug.id.user() }} {{ bug.summary|e|truncate(70) }} {{ bug.status }} {{ bug.assigned|striptags }}
{% endblock %} bugs-everywhere-1.1.1/interfaces/web/web.py000066400000000000000000000177751205171247600207120ustar00rootroot00000000000000from datetime import datetime from urllib import urlencode from jinja2 import Environment, FileSystemLoader import cherrypy from libbe import storage from libbe import bugdir from libbe.command.depend import get_blocked_by, get_blocks from libbe.command.target import add_target, remove_target from libbe.command.target import bug_from_target_summary, bug_target from libbe.command.util import bugdir_bug_comment_from_user_id from libbe.storage.util import settings_object import libbe.command.tag EMPTY = settings_object.EMPTY def datetimeformat(value, format='%B %d, %Y at %I:%M %p'): """Takes a timestamp and revormats it into a human-readable string.""" return datetime.fromtimestamp(value).strftime(format) class WebInterface: """The web interface to CFBE.""" def __init__(self, bug_root, template_root): """Initialize the bug repository for this web interface.""" self.bug_root = bug_root store = storage.get_storage(self.bug_root) store.connect() version = store.storage_version() print version self.bd = bugdir.BugDir(store, from_storage=True) self.repository_name = self.bug_root.split('/')[-1] self.env = Environment(loader=FileSystemLoader(template_root)) self.env.filters['datetimeformat'] = datetimeformat def get_common_information(self): """Returns a dict of common information that most pages will need.""" possible_assignees = list(set( [unicode(bug.assigned) for bug in self.bd if bug.assigned != EMPTY])) possible_assignees.sort(key=unicode.lower) possible_targets = list(set( [unicode(bug.summary.rstrip("\n")) for bug in self.bd \ if bug.severity == u"target"])) possible_targets.sort(key=unicode.lower) possible_statuses = [u'open', u'assigned', u'test', u'unconfirmed', u'closed', u'disabled', u'fixed', u'wontfix'] possible_severities = [u'minor', u'serious', u'critical', u'fatal', u'wishlist'] return {'possible_assignees': possible_assignees, 'possible_targets': possible_targets, 'possible_statuses': possible_statuses, 'possible_severities': possible_severities, 'tags': libbe.command.tag.get_all_tags(self.bd), 'repository_name': self.repository_name,} def filter_bugs(self, status, assignee, target, tag): """Filter the list of bugs to return only those desired.""" bugs = [bug for bug in self.bd if bug.status in status] if assignee != '': assignee = None if assignee == 'None' else assignee bugs = [bug for bug in bugs if bug.assigned == assignee] if tag != '' and tag != 'None': bugs = [bug for bug in bugs if tag in libbe.command.tag.get_tags(bug)] if target != '': target = None if target == 'None' else target if target == None: # Return all bugs that don't block any targets. return [bug for bug in bugs if not bug_target(self.bd, bug)] else: # Return all bugs that block the supplied target. targetbug = bug_from_target_summary(self.bd, target) if targetbug == None: return [] bugs = [bug for bug in get_blocked_by(self.bd, targetbug) if bug.active] return bugs @cherrypy.expose def index(self, status='open', assignee='', target='', tag=''): """The main bug page. Bugs can be filtered by assignee or target. The bug database will be reloaded on each visit.""" self.bd.load_all_bugs() if status == 'open': status = ['open', 'assigned', 'test', 'unconfirmed', 'wishlist'] label = 'All Open Bugs' elif status == 'closed': status = ['closed', 'disabled', 'fixed', 'wontfix'] label = 'All Closed Bugs' if assignee != '': label += ' Currently Unassigned' if assignee == 'None' \ else ' Assigned to %s' % (assignee,) if target != '': label += ' Currently Unscheduled' if target == 'None' \ else ' Scheduled for %s' % (target,) if tag != '' and tag != 'None': label += ' Tagged %s' % (tag,) bugs = self.filter_bugs(status, assignee, target, tag) if len(bugs) == 0: template = self.env.get_template('empty-list.html') else: template = self.env.get_template('list.html') common_info = self.get_common_information() return template.render(bugs=bugs, bd=self.bd, label=label, assignees=common_info['possible_assignees'], targets=common_info['possible_targets'], statuses=common_info['possible_statuses'], severities=common_info['possible_severities'], repository_name=common_info['repository_name'], tags=common_info['tags'], urlencode=urlencode) @cherrypy.expose def bug(self, id=''): """The page for viewing a single bug.""" self.bd.load_all_bugs() bugdir, bug, comment = bugdir_bug_comment_from_user_id( {self.bd.uuid: self.bd}, id) template = self.env.get_template('bug.html') common_info = self.get_common_information() # Determine which targets a bug has. # First, is this bug blocking any other bugs? targets = '' blocks = get_blocks(self.bd, bug) for targetbug in blocks: # Are any of those blocked bugs targets? blocker = self.bd.bug_from_uuid(targetbug.uuid) if blocker.severity == "target": targets += "%s " % blocker.summary return template.render(bug=bug, bd=self.bd, assignee='' if bug.assigned == EMPTY else bug.assigned, target=targets, assignees=common_info['possible_assignees'], targets=common_info['possible_targets'], statuses=common_info['possible_statuses'], severities=common_info['possible_severities'], repository_name=common_info['repository_name']) @cherrypy.expose def create(self, summary): """The view that handles the creation of a new bug.""" if summary.strip() != '': self.bd.new_bug(summary=summary).save() raise cherrypy.HTTPRedirect('/', status=302) @cherrypy.expose def comment(self, id, body): """The view that handles adding a comment.""" bug = self.bd.bug_from_uuid(id) if body.strip() != '': bug.comment_root.new_reply(body=body) bug.save() raise cherrypy.HTTPRedirect( '/bug?%s' % urlencode({'id':bug.id.long_user()}), status=302) @cherrypy.expose def edit(self, id, status=None, target=None, assignee=None, severity=None, summary=None): """The view that handles editing bug details.""" bug = self.bd.bug_from_uuid(id) if summary != None: bug.summary = summary else: bug.status = status if status != 'None' else None bug.assigned = assignee if assignee != 'None' else None bug.severity = severity if severity != 'None' else None if target: current_target = bug_target(self.bd, bug) if current_target: remove_target(self.bd, bug) if target != "None": add_target(self.bd, bug, target) else: add_target(self.bd, bug, target) bug.save() raise cherrypy.HTTPRedirect( '/bug?%s' % urlencode({'id':bug.id.long_user()}), status=302) bugs-everywhere-1.1.1/libbe/000077500000000000000000000000001205171247600157175ustar00rootroot00000000000000bugs-everywhere-1.1.1/libbe/__init__.py000066400000000000000000000033301205171247600200270ustar00rootroot00000000000000# Copyright (C) 2005-2012 Aaron Bentley # Chris Ball # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . """The libbe module does all the legwork for bugs-everywhere_ (BE). .. _bugs-everywhere: http://bugseverywhere.org To facilitate faster loading, submodules are not imported by default. The available submodules are: * :py:mod:`libbe.bugdir` * :py:mod:`libbe.bug` * :py:mod:`libbe.comment` * :py:mod:`libbe.command` * :py:mod:`libbe.diff` * :py:mod:`libbe.error` * :py:mod:`libbe.storage` * :py:mod:`libbe.ui` * :py:mod:`libbe.util` * :py:mod:`libbe.version` * :py:mod:`libbe._version` """ TESTING = False """Flag controlling test-suite generation. To reduce module load time, test suite generation is turned of by default. If you *do* want to generate the test suites, set ``TESTING=True`` before loading any :py:mod:`libbe` submodules. Examples -------- >>> import libbe >>> libbe.TESTING = True >>> import libbe.bugdir >>> 'SimpleBugDir' in dir(libbe.bugdir) True """ bugs-everywhere-1.1.1/libbe/bug.py000066400000000000000000001131641205171247600170540ustar00rootroot00000000000000# Copyright (C) 2008-2012 Chris Ball # Gianluca Montecchi # Niall Douglas (s_sourceforge@nedprod.com) # Robert Lehmann # Thomas Habets # Valtteri Kokkoniemi # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . """Define :py:class:`Bug` for representing bugs. """ import copy import os import os.path import errno import sys import time import types try: # import core module, Python >= 2.5 from xml.etree import ElementTree except ImportError: # look for non-core module from elementtree import ElementTree import xml.sax.saxutils import libbe import libbe.util.id from libbe.storage.util.properties import Property, doc_property, \ local_property, defaulting_property, checked_property, cached_property, \ primed_property, change_hook_property, settings_property import libbe.storage.util.settings_object as settings_object import libbe.storage.util.mapfile as mapfile import libbe.comment as comment import libbe.util.utility as utility if libbe.TESTING == True: import doctest ### Define and describe valid bug categories # Use a tuple of (category, description) tuples since we don't have # ordered dicts in Python yet http://www.python.org/dev/peps/pep-0372/ # in order of increasing severity. (name, description) pairs severity_def = ( ("target", "The issue is a target or milestone, not a bug."), ("wishlist","A feature that could improve usefulness, but not a bug."), ("minor","The standard bug level."), ("serious","A bug that requires workarounds."), ("critical","A bug that prevents some features from working at all."), ("fatal","A bug that makes the package unusable.")) # in order of increasing resolution # roughly following http://www.bugzilla.org/docs/3.2/en/html/lifecycle.html active_status_def = ( ("unconfirmed","A possible bug which lacks independent existance confirmation."), ("open","A working bug that has not been assigned to a developer."), ("assigned","A working bug that has been assigned to a developer."), ("test","The code has been adjusted, but the fix is still being tested.")) inactive_status_def = ( ("closed", "The bug is no longer relevant."), ("fixed", "The bug should no longer occur."), ("wontfix","It's not a bug, it's a feature.")) ### Convert the description tuples to more useful formats severity_values = () severity_description = {} severity_index = {} def load_severities(severity_def): global severity_values global severity_description global severity_index if severity_def == None: return severity_values = tuple([val for val,description in severity_def]) severity_description = dict(severity_def) severity_index = {} for i,severity in enumerate(severity_values): severity_index[severity] = i load_severities(severity_def) active_status_values = [] inactive_status_values = [] status_values = [] status_description = {} status_index = {} def load_status(active_status_def, inactive_status_def): global active_status_values global inactive_status_values global status_values global status_description global status_index if active_status_def == None: active_status_def = globals()["active_status_def"] if inactive_status_def == None: inactive_status_def = globals()["inactive_status_def"] active_status_values = tuple([val for val,description in active_status_def]) inactive_status_values = tuple([val for val,description in inactive_status_def]) status_values = active_status_values + inactive_status_values status_description = dict(tuple(active_status_def) + tuple(inactive_status_def)) status_index = {} for i,status in enumerate(status_values): status_index[status] = i load_status(active_status_def, inactive_status_def) class Bug (settings_object.SavedSettingsObject): """A bug (or issue) is a place to store attributes and attach :py:class:`~libbe.comment.Comment`\s. In mailing-list terms, a bug is analogous to a thread. Bugs are normally stored in :py:class:`~libbe.bugdir.BugDir`\s. >>> b = Bug() >>> print b.status open >>> print b.severity minor There are two formats for time, int and string. Setting either one will adjust the other appropriately. The string form is the one stored in the bug's settings file on disk. >>> print type(b.time) >>> print type(b.time_string) >>> b.time = 0 >>> print b.time_string Thu, 01 Jan 1970 00:00:00 +0000 >>> b.time_string="Thu, 01 Jan 1970 00:01:00 +0000" >>> b.time 60 >>> print b.settings["time"] Thu, 01 Jan 1970 00:01:00 +0000 """ settings_properties = [] required_saved_properties = [] _prop_save_settings = settings_object.prop_save_settings _prop_load_settings = settings_object.prop_load_settings def _versioned_property(settings_properties=settings_properties, required_saved_properties=required_saved_properties, **kwargs): if "settings_properties" not in kwargs: kwargs["settings_properties"] = settings_properties if "required_saved_properties" not in kwargs: kwargs["required_saved_properties"]=required_saved_properties return settings_object.versioned_property(**kwargs) @_versioned_property(name="severity", doc="A measure of the bug's importance", default="minor", check_fn=lambda s: s in severity_values, require_save=True) def severity(): return {} @_versioned_property(name="status", doc="The bug's current status", default="open", check_fn=lambda s: s in status_values, require_save=True) def status(): return {} @property def active(self): return self.status in active_status_values @_versioned_property(name="creator", doc="The user who entered the bug into the system") def creator(): return {} @_versioned_property(name="reporter", doc="The user who reported the bug") def reporter(): return {} @_versioned_property(name="assigned", doc="The developer in charge of the bug") def assigned(): return {} @_versioned_property(name="time", doc="An RFC 2822 timestamp for bug creation") def time_string(): return {} def _get_time(self): if self.time_string == None: self._cached_time_string = None self._cached_time = None return None if (not hasattr(self, '_cached_time_string') or self.time_string != self._cached_time_string): self._cached_time_string = self.time_string self._cached_time = utility.str_to_time(self.time_string) return self._cached_time def _set_time(self, value): if not hasattr(self, '_cached_time') or value != self._cached_time: self.time_string = utility.time_to_str(value) self._cached_time_string = self.time_string self._cached_time = value time = property(fget=_get_time, fset=_set_time, doc="An integer version of .time_string") def _extra_strings_check_fn(value): return utility.iterable_full_of_strings(value, \ alternative=settings_object.EMPTY) def _extra_strings_change_hook(self, old, new): self.extra_strings.sort() # to make merging easier self._prop_save_settings(old, new) @_versioned_property(name="extra_strings", doc="Space for an array of extra strings. Useful for storing state for functionality implemented purely in becommands/.py.", default=[], check_fn=_extra_strings_check_fn, change_hook=_extra_strings_change_hook, mutable=True) def extra_strings(): return {} @_versioned_property(name="summary", doc="A one-line bug description") def summary(): return {} def _get_comment_root(self, load_full=False): if self.storage != None and self.storage.is_readable(): return comment.load_comments(self, load_full=load_full) else: return comment.Comment(self, uuid=comment.INVALID_UUID) @Property @cached_property(generator=_get_comment_root) @local_property("comment_root") @doc_property(doc="The trunk of the comment tree. We use a dummy root comment by default, because there can be several comment threads rooted on the same parent bug. To simplify comment interaction, we condense these threads into a single thread with a Comment dummy root.") def comment_root(): return {} def __init__(self, bugdir=None, uuid=None, from_storage=False, load_comments=False, summary=None): settings_object.SavedSettingsObject.__init__(self) self.bugdir = bugdir self.storage = None self.uuid = uuid self.id = libbe.util.id.ID(self, 'bug') if from_storage == False: if uuid == None: self.uuid = libbe.util.id.uuid_gen() self.time = int(time.time()) # only save to second precision self.summary = summary dummy = self.comment_root if self.bugdir != None: self.storage = self.bugdir.storage if from_storage == False: if self.storage != None and self.storage.is_writeable(): self.save() def __repr__(self): return "Bug(uuid=%r)" % self.uuid def __str__(self): return self.string(shortlist=True) def __cmp__(self, other): return cmp_full(self, other) # serializing methods def _setting_attr_string(self, setting): value = getattr(self, setting) if value == None: return "" if type(value) not in types.StringTypes: return str(value) return value def string(self, shortlist=False, show_comments=False): if shortlist == False: if self.time == None: timestring = "" else: htime = utility.handy_time(self.time) timestring = "%s (%s)" % (htime, self.time_string) info = [("ID", self.uuid), ("Short name", self.id.user()), ("Severity", self.severity), ("Status", self.status), ("Assigned", self._setting_attr_string("assigned")), ("Reporter", self._setting_attr_string("reporter")), ("Creator", self._setting_attr_string("creator")), ("Created", timestring)] for estr in self.extra_strings: info.append(('Extra string', estr)) longest_key_len = max([len(k) for k,v in info]) infolines = [" %*s : %s\n" %(longest_key_len,k,v) for k,v in info] bugout = "".join(infolines) + "%s" % self.summary.rstrip('\n') else: statuschar = self.status[0] severitychar = self.severity[0] chars = "%c%c" % (statuschar, severitychar) bugout = "%s:%s: %s" % (self.id.user(),chars,self.summary.rstrip('\n')) if show_comments == True: self.comment_root.sort(cmp=libbe.comment.cmp_time, reverse=True) comout = self.comment_root.string_thread(flatten=False) output = bugout + '\n' + comout.rstrip('\n') else : output = bugout return output def xml(self, indent=0, show_comments=False): """ >>> bugA = Bug(uuid='0123', summary='Need to test Bug.xml()') >>> bugA.uuid = 'bugA' >>> bugA.time_string = 'Thu, 01 Jan 1970 00:00:00 +0000' >>> bugA.creator = u'Frank' >>> bugA.extra_strings += ['TAG: very helpful'] >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'commA' >>> commA.date = 'Thu, 01 Jan 1970 00:01:00 +0000' >>> commB = commA.new_reply(body='comment B') >>> commB.uuid = 'commB' >>> commB.date = 'Thu, 01 Jan 1970 00:02:00 +0000' >>> commC = commB.new_reply(body='comment C') >>> commC.uuid = 'commC' >>> commC.date = 'Thu, 01 Jan 1970 00:03:00 +0000' >>> print(bugA.xml(show_comments=True)) # doctest: +REPORT_UDIFF bugA /bug minor open Frank Thu, 01 Jan 1970 00:00:00 +0000 Need to test Bug.xml() TAG: very helpful commA /bug/commA Thu, 01 Jan 1970 00:01:00 +0000 text/plain comment A commB /bug/commB commA Thu, 01 Jan 1970 00:02:00 +0000 text/plain comment B commC /bug/commC commB Thu, 01 Jan 1970 00:03:00 +0000 text/plain comment C >>> print(bugA.xml(show_comments=True, indent=2)) ... # doctest: +REPORT_UDIFF bugA /bug minor open Frank Thu, 01 Jan 1970 00:00:00 +0000 Need to test Bug.xml() TAG: very helpful commA /bug/commA Thu, 01 Jan 1970 00:01:00 +0000 text/plain comment A commB /bug/commB commA Thu, 01 Jan 1970 00:02:00 +0000 text/plain comment B commC /bug/commC commB Thu, 01 Jan 1970 00:03:00 +0000 text/plain comment C """ if self.time == None: timestring = "" else: timestring = utility.time_to_str(self.time) info = [('uuid', self.uuid), ('short-name', self.id.user()), ('severity', self.severity), ('status', self.status), ('assigned', self.assigned), ('reporter', self.reporter), ('creator', self.creator), ('created', timestring), ('summary', self.summary)] lines = [''] for (k,v) in info: if v is not None: lines.append(' <%s>%s' % (k,xml.sax.saxutils.escape(v),k)) for estr in self.extra_strings: lines.append(' %s' % estr) if show_comments == True: comout = self.comment_root.xml_thread(indent=indent+2) if comout: comout = comout[indent:] # strip leading indent spaces lines.append(comout) lines.append('') istring = ' '*indent sep = '\n' + istring return istring + sep.join(lines).rstrip('\n') def from_xml(self, xml_string, preserve_uuids=False, verbose=True): u""" Note: If a bug uuid is given, set .alt_id to it's value. >>> bugA = Bug(uuid="0123", summary="Need to test Bug.from_xml()") >>> bugA.date = "Thu, 01 Jan 1970 00:00:00 +0000" >>> bugA.creator = u'Fran\xe7ois' >>> bugA.extra_strings += ['TAG: very helpful'] >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commB = bugA.comment_root.new_reply(body='comment B') >>> commC = commA.new_reply(body='comment C') >>> xml = bugA.xml(show_comments=True) >>> bugB = Bug() >>> bugB.from_xml(xml, verbose=True) >>> bugB.xml(show_comments=True) == xml False >>> bugB.uuid = bugB.alt_id >>> for comm in bugB.comments(): ... comm.uuid = comm.alt_id ... comm.alt_id = None >>> bugB.xml(show_comments=True) == xml True >>> bugB.explicit_attrs # doctest: +NORMALIZE_WHITESPACE ['severity', 'status', 'creator', 'time', 'summary'] >>> len(list(bugB.comments())) 3 >>> bugC = Bug() >>> bugC.from_xml(xml, preserve_uuids=True) >>> bugC.uuid == bugA.uuid True """ if type(xml_string) == types.UnicodeType: xml_string = xml_string.strip().encode('unicode_escape') if hasattr(xml_string, 'getchildren'): # already an ElementTree Element bug = xml_string else: bug = ElementTree.XML(xml_string) if bug.tag != 'bug': raise utility.InvalidXML( \ 'bug', bug, 'root element must be ') tags=['uuid','short-name','severity','status','assigned', 'reporter', 'creator','created','summary','extra-string'] self.explicit_attrs = [] uuid = None estrs = [] comments = [] for child in bug.getchildren(): if child.tag == 'short-name': pass elif child.tag == 'comment': comm = comment.Comment(bug=self) comm.from_xml( child, preserve_uuids=preserve_uuids, verbose=verbose) comments.append(comm) continue elif child.tag in tags: if child.text == None or len(child.text) == 0: text = settings_object.EMPTY else: text = xml.sax.saxutils.unescape(child.text) if not isinstance(text, unicode): text = text.decode('unicode_escape') text = text.strip() if child.tag == 'uuid' and not preserve_uuids: uuid = text continue # don't set the bug's uuid tag. elif child.tag == 'created': if text is not settings_object.EMPTY: self.time = utility.str_to_time(text) self.explicit_attrs.append('time') continue elif child.tag == 'extra-string': estrs.append(text) continue # don't set the bug's extra_string yet. attr_name = child.tag.replace('-','_') self.explicit_attrs.append(attr_name) setattr(self, attr_name, text) elif verbose == True: print >> sys.stderr, 'Ignoring unknown tag %s in %s' \ % (child.tag, comment.tag) if uuid != self.uuid: if not hasattr(self, 'alt_id') or self.alt_id == None: self.alt_id = uuid self.extra_strings = estrs self.add_comments(comments, ignore_missing_references=True) def add_comment(self, comment, *args, **kwargs): """ Add a comment too the current bug, under the parent specified by comment.in_reply_to. Note: If a bug uuid is given, set .alt_id to it's value. >>> bugA = Bug(uuid='0123', summary='Need to test Bug.add_comment()') >>> bugA.creator = 'Jack' >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'commA' >>> commB = comment.Comment(body='comment B') >>> commB.uuid = 'commB' >>> bugA.add_comment(commB) >>> commC = comment.Comment(body='comment C') >>> commC.uuid = 'commC' >>> commC.in_reply_to = commA.uuid >>> bugA.add_comment(commC) >>> print bugA.xml(show_comments=True) # doctest: +ELLIPSIS 0123 /012 minor open Jack ... Need to test Bug.add_comment() commA /012/commA ... text/plain comment A commC /012/commC commA ... text/plain comment C commB /012/commB ... text/plain comment B """ self.add_comments([comment], **kwargs) def add_comments(self, comments, default_parent=None, ignore_missing_references=False): """ Convert a raw list of comments to single root comment. If a comment does not specify a parent with .in_reply_to, the parent defaults to .comment_root, but you can specify another default parent via default_parent. """ uuid_map = {} if default_parent == None: default_parent = self.comment_root for c in list(self.comments()) + comments: assert c.uuid != None assert c.uuid not in uuid_map uuid_map[c.uuid] = c if c.alt_id != None: uuid_map[c.alt_id] = c uuid_map[None] = self.comment_root uuid_map[comment.INVALID_UUID] = self.comment_root if default_parent != self.comment_root: assert default_parent.uuid in uuid_map, default_parent.uuid for c in comments: if c.in_reply_to == None \ and default_parent.uuid != comment.INVALID_UUID: c.in_reply_to = default_parent.uuid elif c.in_reply_to == comment.INVALID_UUID: c.in_reply_to = None try: parent = uuid_map[c.in_reply_to] except KeyError: if ignore_missing_references == True: print >> sys.stderr, \ 'Ignoring missing reference to %s' % c.in_reply_to parent = default_parent if parent.uuid != comment.INVALID_UUID: c.in_reply_to = parent.uuid else: raise comment.MissingReference(c) c.bug = self parent.append(c) def merge(self, other, accept_changes=True, accept_extra_strings=True, accept_comments=True, change_exception=False): """ Merge info from other into this bug. Overrides any attributes in self that are listed in other.explicit_attrs. >>> bugA = Bug(uuid='0123', summary='Need to test Bug.merge()') >>> bugA.date = 'Thu, 01 Jan 1970 00:00:00 +0000' >>> bugA.creator = 'Frank' >>> bugA.extra_strings += ['TAG: very helpful'] >>> bugA.extra_strings += ['TAG: favorite'] >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'uuid-commA' >>> bugB = Bug(uuid='3210', summary='More tests for Bug.merge()') >>> bugB.date = 'Fri, 02 Jan 1970 00:00:00 +0000' >>> bugB.creator = 'John' >>> bugB.explicit_attrs = ['creator', 'summary'] >>> bugB.extra_strings += ['TAG: very helpful'] >>> bugB.extra_strings += ['TAG: useful'] >>> commB = bugB.comment_root.new_reply(body='comment B') >>> commB.uuid = 'uuid-commB' >>> bugA.merge(bugB, accept_changes=False, accept_extra_strings=False, ... accept_comments=False, change_exception=False) >>> print bugA.creator Frank >>> bugA.merge(bugB, accept_changes=False, accept_extra_strings=False, ... accept_comments=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would change creator "Frank"->"John" for bug 0123 >>> print bugA.creator Frank >>> bugA.merge(bugB, accept_changes=True, accept_extra_strings=False, ... accept_comments=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would add extra string "TAG: useful" for bug 0123 >>> print bugA.creator John >>> print bugA.extra_strings ['TAG: favorite', 'TAG: very helpful'] >>> bugA.merge(bugB, accept_changes=True, accept_extra_strings=True, ... accept_comments=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would add comment uuid-commB (alt: None) to bug 0123 >>> print bugA.extra_strings ['TAG: favorite', 'TAG: useful', 'TAG: very helpful'] >>> bugA.merge(bugB, accept_changes=True, accept_extra_strings=True, ... accept_comments=True, change_exception=True) >>> print bugA.xml(show_comments=True) # doctest: +ELLIPSIS 0123 /012 minor open John ... More tests for Bug.merge() TAG: favorite TAG: useful TAG: very helpful uuid-commA /012/uuid-commA ... text/plain comment A uuid-commB /012/uuid-commB ... text/plain comment B """ if hasattr(other, 'explicit_attrs'): for attr in other.explicit_attrs: old = getattr(self, attr) new = getattr(other, attr) if old != new: if accept_changes: setattr(self, attr, new) elif change_exception: raise ValueError( ('Merge would change {0} "{1}"->"{2}" for bug {3}' ).format(attr, old, new, self.uuid)) for estr in other.extra_strings: if not estr in self.extra_strings: if accept_extra_strings == True: self.extra_strings += [estr] elif change_exception == True: raise ValueError, \ 'Merge would add extra string "%s" for bug %s' \ % (estr, self.uuid) for o_comm in other.comments(): try: s_comm = self.comment_root.comment_from_uuid(o_comm.uuid) except KeyError, e: try: s_comm = self.comment_root.comment_from_uuid(o_comm.alt_id) except KeyError, e: s_comm = None if s_comm == None: if accept_comments == True: o_comm_copy = copy.copy(o_comm) o_comm_copy.bug = self o_comm_copy.id = libbe.util.id.ID(o_comm_copy, 'comment') self.comment_root.add_reply(o_comm_copy) elif change_exception == True: raise ValueError, \ 'Merge would add comment %s (alt: %s) to bug %s' \ % (o_comm.uuid, o_comm.alt_id, self.uuid) else: s_comm.merge(o_comm, accept_changes=accept_changes, accept_extra_strings=accept_extra_strings, change_exception=change_exception) # methods for saving/loading/acessing settings and properties. def load_settings(self, settings_mapfile=None): if settings_mapfile == None: settings_mapfile = self.storage.get( self.id.storage('values'), '{}\n') try: settings = mapfile.parse(settings_mapfile) except mapfile.InvalidMapfileContents, e: raise Exception('Invalid settings file for bug %s\n' '(BE version missmatch?)' % self.id.user()) self._setup_saved_settings(settings) def save_settings(self): mf = mapfile.generate(self._get_saved_settings()) self.storage.set(self.id.storage('values'), mf) def save(self): """ Save any loaded contents to storage. Because of lazy loading of comments, this is actually not too inefficient. However, if self.storage.is_writeable() == True, then any changes are automatically written to storage as soon as they happen, so calling this method will just waste time (unless something else has been messing with your stored files). """ assert self.storage != None, "Can't save without storage" if self.bugdir != None: parent = self.bugdir.id.storage() else: parent = None self.storage.add(self.id.storage(), parent=parent, directory=True) self.storage.add(self.id.storage('values'), parent=self.id.storage(), directory=False) self.save_settings() if len(self.comment_root) > 0: comment.save_comments(self) def load_comments(self, load_full=True): if load_full == True: # Force a complete load of the whole comment tree self.comment_root = self._get_comment_root(load_full=True) else: # Setup for fresh lazy-loading. Clear _comment_root, so # next _get_comment_root returns a fresh version. Turn of # writing temporarily so we don't write our blank comment # tree to disk. w = self.storage.writeable self.storage.writeable = False self.comment_root = None self.storage.writeable = w def remove(self): self.storage.recursive_remove(self.id.storage()) # methods for managing comments def uuids(self): for comment in self.comments(): yield comment.uuid def comments(self): for comment in self.comment_root.traverse(): yield comment def new_comment(self, body=None): comm = self.comment_root.new_reply(body=body) return comm def comment_from_uuid(self, uuid, *args, **kwargs): return self.comment_root.comment_from_uuid(uuid, *args, **kwargs) # methods for id generation def sibling_uuids(self): if self.bugdir != None: return self.bugdir.uuids() return [] # The general rule for bug sorting is that "more important" bugs are # less than "less important" bugs. This way sorting a list of bugs # will put the most important bugs first in the list. When relative # importance is unclear, the sorting follows some arbitrary convention # (i.e. dictionary order). def cmp_severity(bug_1, bug_2): """ Compare the severity levels of two bugs, with more severe bugs comparing as less. >>> bugA = Bug() >>> bugB = Bug() >>> bugA.severity = bugB.severity = "wishlist" >>> cmp_severity(bugA, bugB) == 0 True >>> bugB.severity = "minor" >>> cmp_severity(bugA, bugB) > 0 True >>> bugA.severity = "critical" >>> cmp_severity(bugA, bugB) < 0 True """ if not hasattr(bug_2, "severity") : return 1 return -cmp(severity_index[bug_1.severity], severity_index[bug_2.severity]) def cmp_status(bug_1, bug_2): """ Compare the status levels of two bugs, with more "open" bugs comparing as less. >>> bugA = Bug() >>> bugB = Bug() >>> bugA.status = bugB.status = "open" >>> cmp_status(bugA, bugB) == 0 True >>> bugB.status = "closed" >>> cmp_status(bugA, bugB) < 0 True >>> bugA.status = "fixed" >>> cmp_status(bugA, bugB) > 0 True """ if not hasattr(bug_2, "status") : return 1 val_2 = status_index[bug_2.status] return cmp(status_index[bug_1.status], status_index[bug_2.status]) def cmp_attr(bug_1, bug_2, attr, invert=False): """ Compare a general attribute between two bugs using the conventional comparison rule for that attribute type. If ``invert==True``, sort *against* that convention. >>> attr="severity" >>> bugA = Bug() >>> bugB = Bug() >>> bugA.severity = "critical" >>> bugB.severity = "wishlist" >>> cmp_attr(bugA, bugB, attr) < 0 True >>> cmp_attr(bugA, bugB, attr, invert=True) > 0 True >>> bugB.severity = "critical" >>> cmp_attr(bugA, bugB, attr) == 0 True """ if not hasattr(bug_2, attr) : return 1 val_1 = getattr(bug_1, attr) val_2 = getattr(bug_2, attr) if val_1 == None: val_1 = None if val_2 == None: val_2 = None if invert == True : return -cmp(val_1, val_2) else : return cmp(val_1, val_2) # alphabetical rankings (a < z) cmp_uuid = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "uuid") cmp_creator = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "creator") cmp_assigned = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "assigned") cmp_reporter = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "reporter") cmp_summary = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "summary") cmp_extra_strings = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "extra_strings") # chronological rankings (newer < older) cmp_time = lambda bug_1, bug_2 : cmp_attr(bug_1, bug_2, "time", invert=True) def cmp_mine(bug_1, bug_2): user_id = libbe.ui.util.user.get_user_id(bug_1.storage) mine_1 = bug_1.assigned != user_id mine_2 = bug_2.assigned != user_id return cmp(mine_1, mine_2) def cmp_comments(bug_1, bug_2): """ Compare two bugs' comments lists. Doesn't load any new comments, so you should call each bug's .load_comments() first if you want a full comparison. """ comms_1 = sorted(bug_1.comments(), key = lambda comm : comm.uuid) comms_2 = sorted(bug_2.comments(), key = lambda comm : comm.uuid) result = cmp(len(comms_1), len(comms_2)) if result != 0: return result for c_1,c_2 in zip(comms_1, comms_2): result = cmp(c_1, c_2) if result != 0: return result return 0 DEFAULT_CMP_FULL_CMP_LIST = \ (cmp_status, cmp_severity, cmp_assigned, cmp_time, cmp_creator, cmp_reporter, cmp_comments, cmp_summary, cmp_uuid, cmp_extra_strings) class BugCompoundComparator (object): def __init__(self, cmp_list=DEFAULT_CMP_FULL_CMP_LIST): self.cmp_list = cmp_list def __call__(self, bug_1, bug_2): for comparison in self.cmp_list : val = comparison(bug_1, bug_2) if val != 0 : return val return 0 cmp_full = BugCompoundComparator() # define some bonus cmp_* functions def cmp_last_modified(bug_1, bug_2): """ Like cmp_time(), but use most recent comment instead of bug creation for the timestamp. """ def last_modified(bug): time = bug.time for comment in bug.comment_root.traverse(): if comment.time > time: time = comment.time return time val_1 = last_modified(bug_1) val_2 = last_modified(bug_2) return -cmp(val_1, val_2) if libbe.TESTING == True: suite = doctest.DocTestSuite() bugs-everywhere-1.1.1/libbe/bugdir.py000066400000000000000000001212261205171247600175510ustar00rootroot00000000000000# Copyright (C) 2005-2012 Aaron Bentley # Alexander Belchenko # Chris Ball # Gianluca Montecchi # Oleg Romanyshyn # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . """Define :py:class:`BugDir` for storing a collection of bugs. """ import copy import errno import os import os.path import time import types try: # import core module, Python >= 2.5 from xml.etree import ElementTree except ImportError: # look for non-core module from elementtree import ElementTree import xml.sax.saxutils import libbe import libbe.storage as storage from libbe.storage.util.properties import Property, doc_property, \ local_property, defaulting_property, checked_property, \ fn_checked_property, cached_property, primed_property, \ change_hook_property, settings_property import libbe.storage.util.settings_object as settings_object import libbe.storage.util.mapfile as mapfile import libbe.bug as bug import libbe.util.utility as utility import libbe.util.id if libbe.TESTING == True: import doctest import sys import unittest import libbe.storage.base class NoBugMatches(libbe.util.id.NoIDMatches): def __init__(self, *args, **kwargs): libbe.util.id.NoIDMatches.__init__(self, *args, **kwargs) def __str__(self): if self.msg == None: return 'No bug matches %s' % self.id return self.msg class BugDir (list, settings_object.SavedSettingsObject): """A BugDir is a container for :py:class:`~libbe.bug.Bug`\s, with some additional attributes. Parameters ---------- storage : :py:class:`~libbe.storage.base.Storage` Storage instance containing the bug directory. If `from_storage` is `False`, `storage` may be `None`. uuid : str, optional Set the bugdir UUID (see :py:mod:`libbe.util.id`). Useful if you are loading one of several bugdirs stored in a single Storage instance. from_storage : bool, optional If `True`, attempt to load from storage. Otherwise, setup in memory, saving to `storage` if it is not `None`. See Also -------- SimpleBugDir : bugdir manipulation exampes. """ settings_properties = [] required_saved_properties = [] _prop_save_settings = settings_object.prop_save_settings _prop_load_settings = settings_object.prop_load_settings def _versioned_property(settings_properties=settings_properties, required_saved_properties=required_saved_properties, **kwargs): if "settings_properties" not in kwargs: kwargs["settings_properties"] = settings_properties if "required_saved_properties" not in kwargs: kwargs["required_saved_properties"]=required_saved_properties return settings_object.versioned_property(**kwargs) @_versioned_property(name="target", doc="The current project development target.") def target(): return {} def _setup_severities(self, severities): if severities not in [None, settings_object.EMPTY]: bug.load_severities(severities) def _set_severities(self, old_severities, new_severities): self._setup_severities(new_severities) self._prop_save_settings(old_severities, new_severities) @_versioned_property(name="severities", doc="The allowed bug severities and their descriptions.", change_hook=_set_severities) def severities(): return {} def _setup_status(self, active_status, inactive_status): bug.load_status(active_status, inactive_status) def _set_active_status(self, old_active_status, new_active_status): self._setup_status(new_active_status, self.inactive_status) self._prop_save_settings(old_active_status, new_active_status) @_versioned_property(name="active_status", doc="The allowed active bug states and their descriptions.", change_hook=_set_active_status) def active_status(): return {} def _set_inactive_status(self, old_inactive_status, new_inactive_status): self._setup_status(self.active_status, new_inactive_status) self._prop_save_settings(old_inactive_status, new_inactive_status) @_versioned_property(name="inactive_status", doc="The allowed inactive bug states and their descriptions.", change_hook=_set_inactive_status) def inactive_status(): return {} def _extra_strings_check_fn(value): return utility.iterable_full_of_strings(value, \ alternative=settings_object.EMPTY) def _extra_strings_change_hook(self, old, new): self.extra_strings.sort() # to make merging easier self._prop_save_settings(old, new) @_versioned_property(name="extra_strings", doc="Space for an array of extra strings. Useful for storing state for functionality implemented purely in becommands/.py.", default=[], check_fn=_extra_strings_check_fn, change_hook=_extra_strings_change_hook, mutable=True) def extra_strings(): return {} def _bug_map_gen(self): map = {} for bug in self: map[bug.uuid] = bug for uuid in self.uuids(): if uuid not in map: map[uuid] = None self._bug_map_value = map # ._bug_map_value used by @local_property @Property @primed_property(primer=_bug_map_gen) @local_property("bug_map") @doc_property(doc="A dict of (bug-uuid, bug-instance) pairs.") def _bug_map(): return {} def __init__(self, storage, uuid=None, from_storage=False): list.__init__(self) settings_object.SavedSettingsObject.__init__(self) self.storage = storage self.id = libbe.util.id.ID(self, 'bugdir') self.uuid = uuid if from_storage == True: if self.uuid == None: self.uuid = [c for c in self.storage.children() if c != 'version'][0] self.load_settings() else: if self.uuid == None: self.uuid = libbe.util.id.uuid_gen() if self.storage != None and self.storage.is_writeable(): self.save() # methods for saving/loading/accessing settings and properties. def load_settings(self, settings_mapfile=None): if settings_mapfile == None: settings_mapfile = \ self.storage.get(self.id.storage('settings'), default='{}\n') try: settings = mapfile.parse(settings_mapfile) except mapfile.InvalidMapfileContents, e: raise Exception('Invalid settings file for bugdir %s\n' '(BE version missmatch?)' % self.id.user()) self._setup_saved_settings(settings) self._setup_severities(self.severities) self._setup_status(self.active_status, self.inactive_status) def save_settings(self): mf = mapfile.generate(self._get_saved_settings()) self.storage.set(self.id.storage('settings'), mf) def load_all_bugs(self): """ Warning: this could take a while. """ self._clear_bugs() for uuid in self.uuids(): self._load_bug(uuid) def save(self): """ Save any loaded contents to storage. Because of lazy loading of bugs and comments, this is actually not too inefficient. However, if self.storage.is_writeable() == True, then any changes are automatically written to storage as soon as they happen, so calling this method will just waste time (unless something else has been messing with your stored files). """ self.storage.add(self.id.storage(), directory=True) self.storage.add(self.id.storage('settings'), parent=self.id.storage(), directory=False) self.save_settings() for bug in self: bug.bugdir = self bug.storage = self.storage bug.save() # methods for managing bugs def uuids(self, use_cached_disk_uuids=True): if use_cached_disk_uuids==False or not hasattr(self, '_uuids_cache'): self._refresh_uuid_cache() self._uuids_cache = self._uuids_cache.union([bug.uuid for bug in self]) return self._uuids_cache def _refresh_uuid_cache(self): self._uuids_cache = set() # list bugs that are in storage if self.storage != None and self.storage.is_readable(): child_uuids = libbe.util.id.child_uuids( self.storage.children(self.id.storage())) for id in child_uuids: self._uuids_cache.add(id) def _clear_bugs(self): while len(self) > 0: self.pop() if hasattr(self, '_uuids_cache'): del(self._uuids_cache) self._bug_map_gen() def _load_bug(self, uuid): bg = bug.Bug(bugdir=self, uuid=uuid, from_storage=True) self.append(bg) self._bug_map_gen() return bg def new_bug(self, summary=None, _uuid=None): bg = bug.Bug(bugdir=self, uuid=_uuid, summary=summary, from_storage=False) self.append(bg, update=True) return bg def append(self, bug, update=False): super(BugDir, self).append(bug) if update: bug.bugdir = self bug.storage = self.storage self._bug_map_gen() if (hasattr(self, '_uuids_cache') and not bug.uuid in self._uuids_cache): self._uuids_cache.add(bug.uuid) def remove_bug(self, bug): if hasattr(self, '_uuids_cache') and bug.uuid in self._uuids_cache: self._uuids_cache.remove(bug.uuid) self.remove(bug) if self.storage != None and self.storage.is_writeable(): bug.remove() def bug_from_uuid(self, uuid): if not self.has_bug(uuid): raise NoBugMatches( uuid, self.uuids(), 'No bug matches %s in %s' % (uuid, self.storage)) if self._bug_map[uuid] == None: self._load_bug(uuid) return self._bug_map[uuid] def has_bug(self, bug_uuid): if bug_uuid not in self._bug_map: self._bug_map_gen() if bug_uuid not in self._bug_map: return False return True def xml(self, indent=0, show_bugs=False, show_comments=False): """ >>> bug.load_severities(bug.severity_def) >>> bug.load_status( ... active_status_def=bug.active_status_def, ... inactive_status_def=bug.inactive_status_def) >>> bugdirA = SimpleBugDir(memory=True) >>> bugdirA.severities >>> bugdirA.severities = (('minor', 'The standard bug level.'),) >>> bugdirA.inactive_status = ( ... ('closed', 'The bug is no longer relevant.'),) >>> bugA = bugdirA.bug_from_uuid('a') >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'commA' >>> commA.date = 'Thu, 01 Jan 1970 00:03:00 +0000' >>> print(bugdirA.xml(show_bugs=True, show_comments=True)) ... # doctest: +REPORT_UDIFF abc123 abc minor The standard bug level. closed The bug is no longer relevant. a abc/a minor open John Doe <jdoe@example.com> Thu, 01 Jan 1970 00:00:00 +0000 Bug A commA abc/a/com Thu, 01 Jan 1970 00:03:00 +0000 text/plain comment A b abc/b minor closed Jane Doe <jdoe@example.com> Thu, 01 Jan 1970 00:00:00 +0000 Bug B >>> bug.load_severities(bug.severity_def) >>> bug.load_status( ... active_status_def=bug.active_status_def, ... inactive_status_def=bug.inactive_status_def) >>> bugdirA.cleanup() """ info = [('uuid', self.uuid), ('short-name', self.id.user()), ('target', self.target), ('severities', self.severities), ('active-status', self.active_status), ('inactive-status', self.inactive_status), ] lines = [''] for (k,v) in info: if v is not None: if k in ['severities', 'active-status', 'inactive-status']: lines.append(' <{0}>'.format(k)) for vk,vv in v: lines.extend([ ' ', ' {0}'.format( xml.sax.saxutils.escape(vk)), ' {0}'.format( xml.sax.saxutils.escape(vv)), ' ', ]) lines.append(' '.format(k)) else: v = xml.sax.saxutils.escape(v) lines.append(' <{0}>{1}'.format(k, v)) for estr in self.extra_strings: lines.append(' {0}'.format(estr)) if show_bugs: for bug in self: bug_xml = bug.xml(indent=indent+2, show_comments=show_comments) if bug_xml: bug_xml = bug_xml[indent:] # strip leading indent spaces lines.append(bug_xml) lines.append('') istring = ' '*indent sep = '\n' + istring return istring + sep.join(lines).rstrip('\n') def from_xml(self, xml_string, preserve_uuids=False, verbose=True): """ Note: If a bugdir uuid is given, set .alt_id to it's value. >>> bug.load_severities(bug.severity_def) >>> bug.load_status( ... active_status_def=bug.active_status_def, ... inactive_status_def=bug.inactive_status_def) >>> bugdirA = SimpleBugDir(memory=True) >>> bugdirA.severities = (('minor', 'The standard bug level.'),) >>> bugdirA.inactive_status = ( ... ('closed', 'The bug is no longer relevant.'),) >>> bugA = bugdirA.bug_from_uuid('a') >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'commA' >>> xml = bugdirA.xml(show_bugs=True, show_comments=True) >>> bugdirB = BugDir(storage=None) >>> bugdirB.from_xml(xml) >>> bugdirB.xml(show_bugs=True, show_comments=True) == xml False >>> bugdirB.uuid = bugdirB.alt_id >>> for bug_ in bugdirB: ... bug_.uuid = bug_.alt_id ... bug_.alt_id = None ... for comm in bug_.comments(): ... comm.uuid = comm.alt_id ... comm.alt_id = None >>> bugdirB.xml(show_bugs=True, show_comments=True) == xml True >>> bugdirB.explicit_attrs # doctest: +NORMALIZE_WHITESPACE ['severities', 'inactive_status'] >>> bugdirC = BugDir(storage=None) >>> bugdirC.from_xml(xml, preserve_uuids=True) >>> bugdirC.uuid == bugdirA.uuid True >>> bugdirC.xml(show_bugs=True, show_comments=True) == xml True >>> bug.load_severities(bug.severity_def) >>> bug.load_status( ... active_status_def=bug.active_status_def, ... inactive_status_def=bug.inactive_status_def) >>> bugdirA.cleanup() """ if type(xml_string) == types.UnicodeType: xml_string = xml_string.strip().encode('unicode_escape') if hasattr(xml_string, 'getchildren'): # already an ElementTree Element bugdir = xml_string else: bugdir = ElementTree.XML(xml_string) if bugdir.tag != 'bugdir': raise utility.InvalidXML( 'bugdir', bugdir, 'root element must be ') tags = ['uuid', 'short-name', 'target', 'severities', 'active-status', 'inactive-status', 'extra-string'] self.explicit_attrs = [] uuid = None estrs = [] for child in bugdir.getchildren(): if child.tag == 'short-name': pass elif child.tag == 'bug': bg = bug.Bug(bugdir=self) bg.from_xml( child, preserve_uuids=preserve_uuids, verbose=verbose) self.append(bg, update=True) continue elif child.tag in tags: if child.text == None or len(child.text) == 0: text = settings_object.EMPTY elif child.tag in ['severities', 'active-status', 'inactive-status']: entries = [] for entry in child.getchildren(): if entry.tag != 'entry': raise utility.InvalidXML( '{0} child element {1} must be '.format( child.tag, entry)) key = value = None for kv in entry.getchildren(): if kv.tag == 'key': if key is not None: raise utility.InvalidXML( ('duplicate keys ({0} and {1}) in {2}' ).format(key, kv.text, child.tag)) key = xml.sax.saxutils.unescape(kv.text) elif kv.tag == 'value': if value is not None: raise utility.InvalidXML( ('duplicate values ({0} and {1}) ' 'in {2}' ).format( value, kv.text, child.tag)) value = xml.sax.saxutils.unescape(kv.text) else: raise utility.InvalidXML( ('{0} child element {1} must be or ' '').format(child.tag, kv)) if key is None: raise utility.InvalidXML( 'no key for {0}'.format(child.tag)) if value is None: raise utility.InvalidXML( 'no key for {0}'.format(child.tag)) entries.append((key, value)) text = entries else: text = xml.sax.saxutils.unescape(child.text) if not isinstance(text, unicode): text = text.decode('unicode_escape') text = text.strip() if child.tag == 'uuid' and not preserve_uuids: uuid = text continue # don't set the bug's uuid tag. elif child.tag == 'extra-string': estrs.append(text) continue # don't set the bug's extra_string yet. attr_name = child.tag.replace('-','_') self.explicit_attrs.append(attr_name) setattr(self, attr_name, text) elif verbose == True: sys.stderr.write('Ignoring unknown tag {0} in {1}\n'.format( child.tag, bugdir.tag)) if uuid != self.uuid: if not hasattr(self, 'alt_id') or self.alt_id == None: self.alt_id = uuid self.extra_strings = estrs def merge(self, other, accept_changes=True, accept_extra_strings=True, accept_bugs=True, accept_comments=True, change_exception=False): """Merge info from other into this bugdir. Overrides any attributes in self that are listed in other.explicit_attrs. >>> bugdirA = SimpleBugDir() >>> bugdirA.extra_strings += ['TAG: favorite'] >>> bugdirB = SimpleBugDir() >>> bugdirB.explicit_attrs = ['target'] >>> bugdirB.target = '1234' >>> bugdirB.extra_strings += ['TAG: very helpful'] >>> bugdirB.extra_strings += ['TAG: useful'] >>> bugA = bugdirB.bug_from_uuid('a') >>> commA = bugA.comment_root.new_reply(body='comment A') >>> commA.uuid = 'uuid-commA' >>> commA.date = 'Thu, 01 Jan 1970 00:01:00 +0000' >>> bugC = bugdirB.new_bug(summary='bug C', _uuid='c') >>> bugC.alt_id = 'alt-c' >>> bugC.time_string = 'Thu, 01 Jan 1970 00:02:00 +0000' >>> bugdirA.merge( ... bugdirB, accept_changes=False, accept_extra_strings=False, ... accept_bugs=False, change_exception=False) >>> print(bugdirA.target) None >>> bugdirA.merge( ... bugdirB, accept_changes=False, accept_extra_strings=False, ... accept_bugs=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would change target "None"->"1234" for bugdir abc123 >>> print(bugdirA.target) None >>> bugdirA.merge( ... bugdirB, accept_changes=True, accept_extra_strings=False, ... accept_bugs=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would add extra string "TAG: useful" for bugdir abc123 >>> print(bugdirA.target) 1234 >>> print(bugdirA.extra_strings) ['TAG: favorite'] >>> bugdirA.merge( ... bugdirB, accept_changes=True, accept_extra_strings=True, ... accept_bugs=False, change_exception=True) Traceback (most recent call last): ... ValueError: Merge would add bug c (alt: alt-c) to bugdir abc123 >>> print(bugdirA.extra_strings) ['TAG: favorite', 'TAG: useful', 'TAG: very helpful'] >>> bugdirA.merge( ... bugdirB, accept_changes=True, accept_extra_strings=True, ... accept_bugs=True, change_exception=True) >>> print(bugdirA.xml(show_bugs=True, show_comments=True)) ... # doctest: +ELLIPSIS, +REPORT_UDIFF abc123 abc 1234 TAG: favorite TAG: useful TAG: very helpful a abc/a minor open John Doe <jdoe@example.com> Thu, 01 Jan 1970 00:00:00 +0000 Bug A uuid-commA abc/a/uui Thu, 01 Jan 1970 00:01:00 +0000 text/plain comment A b abc/b minor closed Jane Doe <jdoe@example.com> Thu, 01 Jan 1970 00:00:00 +0000 Bug B c abc/c minor open Thu, 01 Jan 1970 00:02:00 +0000 bug C >>> bugdirA.cleanup() >>> bugdirB.cleanup() """ if hasattr(other, 'explicit_attrs'): for attr in other.explicit_attrs: old = getattr(self, attr) new = getattr(other, attr) if old != new: if accept_changes: setattr(self, attr, new) elif change_exception: raise ValueError( ('Merge would change {0} "{1}"->"{2}" ' 'for bugdir {3}' ).format(attr, old, new, self.uuid)) for estr in other.extra_strings: if not estr in self.extra_strings: if accept_extra_strings: self.extra_strings += [estr] elif change_exception: raise ValueError( ('Merge would add extra string "{0}" for bugdir {1}' ).format(estr, self.uuid)) for o_bug in other: try: s_bug = self.bug_from_uuid(o_bug.uuid) except KeyError as e: try: s_bug = self.bug_from_uuid(o_bug.alt_id) except KeyError as e: s_bug = None if s_bug is None: if accept_bugs: o_bug_copy = copy.copy(o_bug) o_bug_copy.bugdir = self o_bug_copy.id = libbe.util.id.ID(o_bug_copy, 'bug') self.append(o_bug_copy) elif change_exception: raise ValueError( ('Merge would add bug {0} (alt: {1}) to bugdir {2}' ).format(o_bug.uuid, o_bug.alt_id, self.uuid)) else: s_bug.merge(o_bug, accept_changes=accept_changes, accept_extra_strings=accept_extra_strings, change_exception=change_exception) # methods for id generation def sibling_uuids(self): return [] class RevisionedBugDir (BugDir): """ RevisionedBugDirs are read-only copies used for generating diffs between revisions. """ def __init__(self, bugdir, revision): storage_version = bugdir.storage.storage_version(revision) if storage_version != libbe.storage.STORAGE_VERSION: raise libbe.storage.InvalidStorageVersion(storage_version) s = copy.deepcopy(bugdir.storage) s.writeable = False class RevisionedStorage (object): def __init__(self, storage, default_revision): self.s = storage self.sget = self.s.get self.sancestors = self.s.ancestors self.schildren = self.s.children self.schanged = self.s.changed self.r = default_revision def get(self, *args, **kwargs): if not 'revision' in kwargs or kwargs['revision'] == None: kwargs['revision'] = self.r return self.sget(*args, **kwargs) def ancestors(self, *args, **kwargs): print 'getting ancestors', args, kwargs if not 'revision' in kwargs or kwargs['revision'] == None: kwargs['revision'] = self.r ret = self.sancestors(*args, **kwargs) print 'got ancestors', ret return ret def children(self, *args, **kwargs): if not 'revision' in kwargs or kwargs['revision'] == None: kwargs['revision'] = self.r return self.schildren(*args, **kwargs) def changed(self, *args, **kwargs): if not 'revision' in kwargs or kwargs['revision'] == None: kwargs['revision'] = self.r return self.schanged(*args, **kwargs) rs = RevisionedStorage(s, revision) s.get = rs.get s.ancestors = rs.ancestors s.children = rs.children s.changed = rs.changed BugDir.__init__(self, s, from_storage=True) self.revision = revision def changed(self): return self.storage.changed() if libbe.TESTING == True: class SimpleBugDir (BugDir): """ For testing. Set ``memory=True`` for a memory-only bugdir. >>> bugdir = SimpleBugDir() >>> uuids = list(bugdir.uuids()) >>> uuids.sort() >>> print uuids ['a', 'b'] >>> bugdir.cleanup() """ def __init__(self, memory=True, versioned=False): if memory == True: storage = None else: dir = utility.Dir() self._dir_ref = dir # postpone cleanup since dir.cleanup() removes dir. if versioned == False: storage = libbe.storage.base.Storage(dir.path) else: storage = libbe.storage.base.VersionedStorage(dir.path) storage.init() storage.connect() BugDir.__init__(self, storage=storage, uuid='abc123') bug_a = self.new_bug(summary='Bug A', _uuid='a') bug_a.creator = 'John Doe ' bug_a.time = 0 bug_b = self.new_bug(summary='Bug B', _uuid='b') bug_b.creator = 'Jane Doe ' bug_b.time = 0 bug_b.status = 'closed' if self.storage != None: self.storage.disconnect() # flush to storage self.storage.connect() def cleanup(self): if self.storage != None: self.storage.writeable = True self.storage.disconnect() self.storage.destroy() if hasattr(self, '_dir_ref'): self._dir_ref.cleanup() def flush_reload(self): if self.storage != None: self.storage.disconnect() self.storage.connect() self._clear_bugs() # class BugDirTestCase(unittest.TestCase): # def setUp(self): # self.dir = utility.Dir() # self.bugdir = BugDir(self.dir.path, sink_to_existing_root=False, # allow_storage_init=True) # self.storage = self.bugdir.storage # def tearDown(self): # self.bugdir.cleanup() # self.dir.cleanup() # def fullPath(self, path): # return os.path.join(self.dir.path, path) # def assertPathExists(self, path): # fullpath = self.fullPath(path) # self.failUnless(os.path.exists(fullpath)==True, # "path %s does not exist" % fullpath) # self.assertRaises(AlreadyInitialized, BugDir, # self.dir.path, assertNewBugDir=True) # def versionTest(self): # if self.storage != None and self.storage.versioned == False: # return # original = self.bugdir.storage.commit("Began versioning") # bugA = self.bugdir.bug_from_uuid("a") # bugA.status = "fixed" # self.bugdir.save() # new = self.storage.commit("Fixed bug a") # dupdir = self.bugdir.duplicate_bugdir(original) # self.failUnless(dupdir.root != self.bugdir.root, # "%s, %s" % (dupdir.root, self.bugdir.root)) # bugAorig = dupdir.bug_from_uuid("a") # self.failUnless(bugA != bugAorig, # "\n%s\n%s" % (bugA.string(), bugAorig.string())) # bugAorig.status = "fixed" # self.failUnless(bug.cmp_status(bugA, bugAorig)==0, # "%s, %s" % (bugA.status, bugAorig.status)) # self.failUnless(bug.cmp_severity(bugA, bugAorig)==0, # "%s, %s" % (bugA.severity, bugAorig.severity)) # self.failUnless(bug.cmp_assigned(bugA, bugAorig)==0, # "%s, %s" % (bugA.assigned, bugAorig.assigned)) # self.failUnless(bug.cmp_time(bugA, bugAorig)==0, # "%s, %s" % (bugA.time, bugAorig.time)) # self.failUnless(bug.cmp_creator(bugA, bugAorig)==0, # "%s, %s" % (bugA.creator, bugAorig.creator)) # self.failUnless(bugA == bugAorig, # "\n%s\n%s" % (bugA.string(), bugAorig.string())) # self.bugdir.remove_duplicate_bugdir() # self.failUnless(os.path.exists(dupdir.root)==False, # str(dupdir.root)) # def testRun(self): # self.bugdir.new_bug(uuid="a", summary="Ant") # self.bugdir.new_bug(uuid="b", summary="Cockroach") # self.bugdir.new_bug(uuid="c", summary="Praying mantis") # length = len(self.bugdir) # self.failUnless(length == 3, "%d != 3 bugs" % length) # uuids = list(self.bugdir.uuids()) # self.failUnless(len(uuids) == 3, "%d != 3 uuids" % len(uuids)) # self.failUnless(uuids == ["a","b","c"], str(uuids)) # bugA = self.bugdir.bug_from_uuid("a") # bugAprime = self.bugdir.bug_from_shortname("a") # self.failUnless(bugA == bugAprime, "%s != %s" % (bugA, bugAprime)) # self.bugdir.save() # self.versionTest() # def testComments(self, sync_with_disk=False): # if sync_with_disk == True: # self.bugdir.set_sync_with_disk(True) # self.bugdir.new_bug(uuid="a", summary="Ant") # bug = self.bugdir.bug_from_uuid("a") # comm = bug.comment_root # rep = comm.new_reply("Ants are small.") # rep.new_reply("And they have six legs.") # if sync_with_disk == False: # self.bugdir.save() # self.bugdir.set_sync_with_disk(True) # self.bugdir._clear_bugs() # bug = self.bugdir.bug_from_uuid("a") # bug.load_comments() # if sync_with_disk == False: # self.bugdir.set_sync_with_disk(False) # self.failUnless(len(bug.comment_root)==1, len(bug.comment_root)) # for index,comment in enumerate(bug.comments()): # if index == 0: # repLoaded = comment # self.failUnless(repLoaded.uuid == rep.uuid, repLoaded.uuid) # self.failUnless(comment.sync_with_disk == sync_with_disk, # comment.sync_with_disk) # self.failUnless(comment.content_type == "text/plain", # comment.content_type) # self.failUnless(repLoaded.settings["Content-type"] == \ # "text/plain", # repLoaded.settings) # self.failUnless(repLoaded.body == "Ants are small.", # repLoaded.body) # elif index == 1: # self.failUnless(comment.in_reply_to == repLoaded.uuid, # repLoaded.uuid) # self.failUnless(comment.body == "And they have six legs.", # comment.body) # else: # self.failIf(True, # "Invalid comment: %d\n%s" % (index, comment)) # def testSyncedComments(self): # self.testComments(sync_with_disk=True) class SimpleBugDirTestCase (unittest.TestCase): def setUp(self): # create a pre-existing bugdir in a temporary directory self.dir = utility.Dir() self.storage = libbe.storage.base.Storage(self.dir.path) self.storage.init() self.storage.connect() self.bugdir = BugDir(self.storage) self.bugdir.new_bug(summary="Hopefully not imported", _uuid="preexisting") self.storage.disconnect() self.storage.connect() def tearDown(self): if self.storage != None: self.storage.disconnect() self.storage.destroy() self.dir.cleanup() def testOnDiskCleanLoad(self): """ SimpleBugDir(memory==False) should not import preexisting bugs. """ bugdir = SimpleBugDir(memory=False) self.failUnless(bugdir.storage.is_readable() == True, bugdir.storage.is_readable()) self.failUnless(bugdir.storage.is_writeable() == True, bugdir.storage.is_writeable()) uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == ['a', 'b'], uuids) bugdir.flush_reload() uuids = sorted(bugdir.uuids()) self.failUnless(uuids == ['a', 'b'], uuids) uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == [], uuids) bugdir.load_all_bugs() uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == ['a', 'b'], uuids) bugdir.cleanup() def testInMemoryCleanLoad(self): """ SimpleBugDir(memory==True) should not import preexisting bugs. """ bugdir = SimpleBugDir(memory=True) self.failUnless(bugdir.storage == None, bugdir.storage) uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == ['a', 'b'], uuids) uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == ['a', 'b'], uuids) bugdir._clear_bugs() uuids = sorted(bugdir.uuids()) self.failUnless(uuids == [], uuids) uuids = sorted([bug.uuid for bug in bugdir]) self.failUnless(uuids == [], uuids) bugdir.cleanup() unitsuite =unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) suite = unittest.TestSuite([unitsuite, doctest.DocTestSuite()]) # def _get_settings(self, settings_path, for_duplicate_bugdir=False): # allow_no_storage = not self.storage.path_in_root(settings_path) # if allow_no_storage == True: # assert for_duplicate_bugdir == True # if self.sync_with_disk == False and for_duplicate_bugdir == False: # # duplicates can ignore this bugdir's .sync_with_disk status # raise DiskAccessRequired("_get settings") # try: # settings = mapfile.map_load(self.storage, settings_path, allow_no_storage) # except storage.NoSuchFile: # settings = {"storage_name": "None"} # return settings # def _save_settings(self, settings_path, settings, # for_duplicate_bugdir=False): # allow_no_storage = not self.storage.path_in_root(settings_path) # if allow_no_storage == True: # assert for_duplicate_bugdir == True # if self.sync_with_disk == False and for_duplicate_bugdir == False: # # duplicates can ignore this bugdir's .sync_with_disk status # raise DiskAccessRequired("_save settings") # self.storage.mkdir(self.get_path(), allow_no_storage) # mapfile.map_save(self.storage, settings_path, settings, allow_no_storage) bugs-everywhere-1.1.1/libbe/command/000077500000000000000000000000001205171247600173355ustar00rootroot00000000000000bugs-everywhere-1.1.1/libbe/command/__init__.py000066400000000000000000000032131205171247600214450ustar00rootroot00000000000000# Copyright (C) 2005-2012 Aaron Bentley # Chris Ball # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . import base UserError = base.UserError UsageError = base.UsageError UnknownCommand = base.UnknownCommand get_command = base.get_command get_command_class = base.get_command_class commands = base.commands Option = base.Option Argument = base.Argument Command = base.Command InputOutput = base.InputOutput StdInputOutput = base.StdInputOutput StringInputOutput = base.StringInputOutput UnconnectedStorageGetter = base.UnconnectedStorageGetter StorageCallbacks = base.StorageCallbacks UserInterface = base.UserInterface __all__ = [UserError, UsageError, UnknownCommand, get_command, get_command_class, commands, Option, Argument, Command, InputOutput, StdInputOutput, StringInputOutput, StorageCallbacks, UnconnectedStorageGetter, UserInterface] bugs-everywhere-1.1.1/libbe/command/assign.py000066400000000000000000000072741205171247600212050ustar00rootroot00000000000000# Copyright (C) 2005-2012 Aaron Bentley # Chris Ball # Gianluca Montecchi # Marien Zwart # Robert Lehmann # Thomas Gerigk # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . import libbe import libbe.command import libbe.command.util class Assign (libbe.command.Command): u"""Assign an individual or group to fix a bug >>> import sys >>> import libbe.bugdir >>> bd = libbe.bugdir.SimpleBugDir(memory=False) >>> io = libbe.command.StringInputOutput() >>> io.stdout = sys.stdout >>> ui = libbe.command.UserInterface(io=io) >>> ui.storage_callbacks.set_storage(bd.storage) >>> cmd = Assign(ui=ui) >>> bd.bug_from_uuid('a').assigned is None True >>> ui._user_id = u'Fran\xe7ois' >>> ret = ui.run(cmd, args=['-', '/a']) >>> bd.flush_reload() >>> bd.bug_from_uuid('a').assigned u'Fran\\xe7ois' >>> ret = ui.run(cmd, args=['someone', '/a', '/b']) >>> bd.flush_reload() >>> bd.bug_from_uuid('a').assigned 'someone' >>> bd.bug_from_uuid('b').assigned 'someone' >>> ret = ui.run(cmd, args=['none', '/a']) >>> bd.flush_reload() >>> bd.bug_from_uuid('a').assigned is None True >>> ui.cleanup() >>> bd.cleanup() """ name = 'assign' def __init__(self, *args, **kwargs): libbe.command.Command.__init__(self, *args, **kwargs) self.args.extend([ libbe.command.Argument( name='assigned', metavar='ASSIGNED', default=None, completion_callback=libbe.command.util.complete_assigned), libbe.command.Argument( name='bug-id', metavar='BUG-ID', default=None, repeatable=True, completion_callback=libbe.command.util.complete_bug_id), ]) def _run(self, **params): assigned = parse_assigned(self, params['assigned']) bugdirs = self._get_bugdirs() for bug_id in params['bug-id']: bugdir,bug,comment = ( libbe.command.util.bugdir_bug_comment_from_user_id( bugdirs, bug_id)) if bug.assigned != assigned: bug.assigned = assigned if bug.status == 'open': bug.status = 'assigned' return 0 def _long_help(self): return """ Assign a person to fix a bug. Assigneds should be the person's Bugs Everywhere identity, the same string that appears in Creator fields. Special assigned strings: "-" assign the bug to yourself "none" un-assigns the bug """ def parse_assigned(command, assigned): """Standard processing for the 'assigned' Argument. """ if assigned == 'none': assigned = None elif assigned == '-': assigned = command._get_user_id() return assigned bugs-everywhere-1.1.1/libbe/command/base.py000066400000000000000000000525331205171247600206310ustar00rootroot00000000000000# Copyright (C) 2009-2012 Chris Ball # Phil Schumm # Robert Lehmann # W. Trevor King # # This file is part of Bugs Everywhere. # # Bugs Everywhere is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 2 of the License, or (at your option) any # later version. # # Bugs Everywhere is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # Bugs Everywhere. If not, see . import codecs import optparse import os.path import StringIO import sys import urlparse import libbe import libbe.storage import libbe.storage.util.mapfile import libbe.ui.util.user import libbe.util.encoding import libbe.util.http import libbe.util.plugin class UserError (Exception): "An error due to improper BE usage." pass class UsageError (UserError): """A serious parsing error due to invalid BE command construction. The distinction between `UserError`\s and the more specific `UsageError`\s is that when displaying a `UsageError` to the user, the user is pointed towards the command usage information. Use the more general `UserError` if you feel that usage information would not be particularly enlightening. """ def __init__(self, command=None, command_name=None, message=None): super(UsageError, self).__init__(message) self.command = command if command_name is None and command is not None: command_name = command.name self.command_name = command_name self.message = message class UnknownCommand (UsageError): def __init__(self, command_name, message=None): uc_message = "Unknown command '%s'" % command_name if message is None: message = uc_message else: message = '%s\n(%s)' % (uc_message, message) super(UnknownCommand, self).__init__( command_name=command_name, message=message) def get_command(command_name): """Retrieves the module for a user command >>> try: ... get_command('asdf') ... except UnknownCommand, e: ... print e Unknown command 'asdf' (No module named asdf) >>> repr(get_command('list')).startswith(">> import_xml_mod = get_command('import-xml') >>> import_xml = get_command_class(import_xml_mod, 'import-xml') >>> repr(import_xml) "" >>> import_xml = get_command_class(command_name='import-xml') >>> repr(import_xml) "" """ if module == None: module = get_command(command_name) try: cname = command_name.capitalize().replace('-', '_') cmd = getattr(module, cname) except ImportError, e: raise UnknownCommand(command_name) return cmd def modname_to_command_name(modname): """Little hack to replicate >>> import sys >>> def real_modname_to_command_name(modname): ... mod = libbe.util.plugin.import_by_name( ... 'libbe.command.%s' % modname) ... attrs = [getattr(mod, name) for name in dir(mod)] ... commands = [] ... for attr_name in dir(mod): ... attr = getattr(mod, attr_name) ... try: ... if issubclass(attr, Command): ... commands.append(attr) ... except TypeError, e: ... pass ... if len(commands) == 0: ... raise Exception('No Command classes in %s' % dir(mod)) ... return commands[0].name >>> real_modname_to_command_name('new') 'new' >>> real_modname_to_command_name('import_xml') 'import-xml' """ return modname.replace('_', '-') def commands(command_names=False): for modname in libbe.util.plugin.modnames('libbe.command'): if modname not in ['base', 'util']: if command_names == False: yield modname else: yield modname_to_command_name(modname) class CommandInput (object): def __init__(self, name, help=''): self.name = name self.help = help def __str__(self): return '<%s %s>' % (self.__class__.__name__, self.name) def __repr__(self): return self.__str__() class Argument (CommandInput): def __init__(self, metavar=None, default=None, type='string', optional=False, repeatable=False, completion_callback=None, *args, **kwargs): CommandInput.__init__(self, *args, **kwargs) self.metavar = metavar self.default = default self.type = type self.optional = optional self.repeatable = repeatable self.completion_callback = completion_callback if self.metavar == None: self.metavar = self.name.upper() class Option (CommandInput): def __init__(self, callback=None, short_name=None, arg=None, *args, **kwargs): CommandInput.__init__(self, *args, **kwargs) self.callback = callback self.short_name = short_name self.arg = arg if self.arg == None and self.callback == None: # use an implicit boolean argument self.arg = Argument(name=self.name, help=self.help, default=False, type='bool') self.validate() def validate(self): if self.arg == None: assert self.callback != None, self.name return assert self.callback == None, '%s: %s' (self.name, self.callback) assert self.arg.name == self.name, \ 'Name missmatch: %s != %s' % (self.arg.name, self.name) assert self.arg.optional == False, self.name assert self.arg.repeatable == False, self.name def __str__(self): return '--%s' % self.name def __repr__(self): return '