[00:02] dOxxx: I'd recommend sticking to the releases [00:04] jelmer: ok. same for bzr-svn? [00:06] jelmer: actually looks like I need to take something more recent than the 1.0.4 release of bzr-svn for it to be compatible with bzr 2.3 [00:07] jelmer: time to create a new release ? :-p [00:08] vila: yeah... [00:08] jelmer: bzr-rewrite too [00:08] I need to put some more thought into that ghost issue though :-/ [00:09] vila: I'm packaging bzr-upload v1.0.0, ok? [00:09] dOxxx: yup [00:09] dOxxx: I guess trunk is the best thing to package indeed. This is for the beta, right? [00:09] jelmer: I thought this was 2.3.0 [00:10] of bzr [00:10] vila: right? [00:10] AFAIK 2.3.0 is not out yet, is it? [00:10] jelmer: yup, 2.3b5, but we intend to package as many releases as possible for 2.3.0 [00:10] woops [00:10] dOxxx: *last* beta before 2.3.0 [00:10] vila: :) [00:11] oh well I would have found out when the build tried to download the 2.3 tarball and failed :) [00:11] dOxxx: indeed :) [00:11] I need to poke abentley about a few of his plugins too [00:11] seems a number of them have 2.3 compatibility changes on trunk but no release [00:12] also bzr-xmloutput which seems to be a free-for-all author-wise [00:12] mail would be good for that I think as he's not around anymore [00:12] vila: k [00:13] jelmer: oh, question, what's the current plan for bzr-svn version numbers? because lp:bzr/1.0's NEWS now says it's 1.1 :-) [00:13] * lp:bzr-svn/1.0 [00:14] Whilst lp:bzr-svn/1.1 is a stale branch [00:17] jelmer, vila: bzr-fastimport release would be nice too [00:18] * vila nods [00:20] vila: launchpadlib 1.9.4 ok? just released an hour ago... [00:20] dOxxx: sure thing [00:20] dOxxx: but... weren't there some missing dependencies ? [00:21] vila: such as? [00:21] dOxxx: I vaguely remember a bug about it but not if it was fixed [00:21] checking [00:22] bug 687315 [00:22] Launchpad bug 687315 in Bazaar Mac Installers "some tests from the launchpad plugin requires lazr.uri" [High,Confirmed] https://launchpad.net/bugs/687315 [00:22] subject is misleading though [00:23] still, yeah, that's a problem [00:24] dOxxx: yeah, I remember now, I tried creating a dedicated package (or whatever the name is there) and get lost [00:24] vila: a package in the installer definition which includes launchpadlib and all its dependencies? [00:26] dOxxx: yes, so we can provide it independently from pipeline [00:26] vila: so pipeline will operate without it? ok... I'll see what I can do. [00:29] dOxxx: no ! But IIRC launchpadlib is only installed with bzr-pipeline today [00:29] oh! [00:30] dOxxx: so if you don't install bzr-pipeline, you don't install launchpadlib either which is what I ended up doing to avoid the test issue [00:30] s/test/test failure/ [00:30] dOxxx: the 'clean' way to do it is to package launchpadlib *and* its dependencies which is not trivial so you may not want to try to fix that *now* :) [00:31] vila: I see. [00:31] dOxxx: I think you may have mixed up "Aaron" and "Andrew" in your mail client :) [00:31] vila: still, as it stands, the installer is not installing bzr-pipeline into a working state unless the user already has the deps for launchpadlib already installed [00:32] spiv: oh darn I thought I got it the right way round [00:32] dOxxx: well the To: line said me but the body said Aaron :) [00:32] spiv: ugh copy & paste FTL [00:32] damn... I called nmb Aaraon too. >< [00:32] Aaron* [00:33] *sigh* [00:33] Hopefully I haven't offended you too much :) [00:33] Not at all :) [00:36] * vila bbiab === Ursinha is now known as Ursinha-afk [01:13] I *really* need to get myself a hardy VM [01:15] I really need to upgrade my Hardy VMs... [01:17] hah [01:17] :-) [01:17] ooh [01:17] A volunteer to test ~bzr PPA packages on hardy? :-) [01:18] Eep! [01:19] maxb: The answer is probably no, but what are you looking for? [01:20] Gods, I last pulled bzr.dev 2010-05-14. >.> [01:31] Do you use loggerhead? If so, there's a 1.18 package in bzr/proposed to supercede the ancient 1.10 [01:31] it built, I'm quite curious whether it works at all [01:32] later there will be the bzr upgrade from python-central->python-support to test [01:34] Haha...I last pulled lp:loggerhead around 2010-05-14 too. :D [01:43] vila: hola [01:44] hmm, weird things happening here, dOxxx , did you get explanation about why the tests were failing ? [01:44] vila: which tests? [01:45] the ones mentioned in bug #687315 [01:45] Launchpad bug 687315 in Bazaar Mac Installers "some tests from the launchpad plugin requires lazr.uri" [High,Confirmed] https://launchpad.net/bugs/687315 [01:46] vila: nope, I haven't looked at that yet. [01:46] vila: are you still getting failures with all the pre-reqs installed? [01:48] dOxxx: can't remember, I restored a working env at the time [01:50] dOxxx: just checked, launchpadlib is not installed anymore on my laptop [01:50] dOxxx: well, on the OSX part of it [01:51] vila: I have bzr 2.3b5 osx 10.6 installer ready for upload [01:52] dOxxx: cool, did you push the changes ? [01:52] vila: not yet. I just want to quickly test that thq GUI stuff works [01:52] the* [01:52] dOxxx: ok, can't help you there, my 10.6 is at home *and* off :) [01:55] vila: hmm... gui stuff works but there's at least one weirdness... the dropdown/editbox for the branch URL and target folder in the branch command is very narrow. [01:56] but I suppose that's why this is a beta [01:56] dOxxx: isn't there already a bug for that ? [01:57] vila: it does seem familiar [01:58] Bug #649430 [01:58] Launchpad bug 649430 in Bazaar Explorer "text fields in qbranch are very narrow" [Undecided,Incomplete] https://launchpad.net/bugs/649430 [01:58] alas, I didn't see alexander's question until now [01:59] I had my mail filters misconfigured and they were bouncing a lot of launchpad bug emails :P [02:04] weird thing is, I don't remember bialix asking for a screenshot either... or maybe I wasn't involved in building the installers at that point :-/ [02:06] vila: anyway, I'll upload a screenshot for him now [02:06] ok [02:11] vila: pushed. I'm signing and uploading my installer now. [02:12] ok, pulling here [02:15] vila: re mergetools... the command_line getter/setter is needed by thq qbzr mp, so I can't really add it there instead. [02:16] the* [02:17] that's a nasty dependency you're introducing there, why should qbzr modified a mergetool object ? Why not setting the config option value instead ? [02:18] for the same reason qbzr doesn't modify .bzr and uses Branch instead [02:19] ? [02:19] it's used as a representation of a MergeTool [02:19] setting a config option is a public API [02:20] is the option value set from there then ? I didn't see this in your mp [02:20] the config option is set when qconfig passes the modified MergeTool object to Config.set_merge_tool [02:20] eeerk [02:21] ugh wait [02:21] my brain is not working [02:21] this damn mp has changed so many times I'm losing track [02:22] ok [02:22] config option is set directly by qbzr, basd on the contents of the modified MergeTools object. [02:23] qconfig gets MergeTool objects from config using get_merge_tools, uses them as an internal storage for it's UI, modifies them as user changes commandline, etc., and then uses the modified contents to call Config.set_user_option [02:24] keep in mind that users will still be able to set it directly in the config file, that's why I insist on not multiplying the ways to manipulate what is anyway a string [02:25] except it's two strings. :) [02:25] but I get the point. [02:25] two ? [02:26] name + commandline. [02:26] stored as one [02:26] oh, you mean the option name ? [02:26] I mean as in 'kdiff3 = /usr/bin/kdiff3 etc' [02:26] two strings [02:26] user-provided name and commandline [02:27] yeah, the option name and its value [02:27] ah yes [02:28] vila: so now I'm even wondering if we need a MergeTool class at all [02:29] perhaps the mergetools module could just contain functions for is_available and invoke, based on a string commandline given to the function [02:30] well, I said that pretty early :) But is_available, at least, needs a home and the default values too [02:31] yeah well I blame my overly-Javafied brain :) [02:31] :) [02:34] so... if MergeTool no longer exists, then config.get_merge_tools should return a dict of name -> commandline [02:34] and the qconfig stuff can deal with that instead of a list of MergeTool objects [02:35] does python have sorted dicts? [02:35] hmm meh probably not the best way to do it [02:38] vila: okay I'll hack on this some more and see if I can simplify things. [02:38] vila: osx 10.6 installer is uploaded too [02:39] dOxxx: don't go too far in the other direction :) I'm fine with your mp with the few tweaks I asked for [02:40] dOxxx: I'm sorry it was so messy regarding the new config stuff that is still not there :-/ [02:41] dOxxx: starting build here after a successful f_e -p -u [02:41] dOxxx: so if I read it right, I won't need to recompile qt after all ? [02:43] vila: you mean pyqt? [02:44] vila: I install Qt itself from a pkg downloaded from the nokia site. [02:44] vila: only pyqt is compiled during the installer build [02:44] dOxxx: yeah, I meant pyqt [02:45] vila: okay. you will have to compile that. there is a newer version. [02:46] dOxxx: err, required ? [02:46] vila: well, required in that riverbank computing don't keep anything but the must recently release tarball on their website [02:47] vila: so I'm kinda forced to update to their latest version each time I want to build the installer [02:47] vila: unless I maintain my own archive of their releases [02:50] woops [03:01] grr [03:02] dOxxx: vm froze :( [03:05] dOxxx: so I got a pyqt 4.8.2 downloaded but not rebuilt it seems :-/ [03:05] or not correctly as the build ends up with a link error in sip [03:06] dOxxx: ring any bell ? [03:06] vila: odd... [03:07] urgh, second build gave a different error :( [03:07] I had a problem with one of the tarballs I downloaded having a CRC error [03:07] so I had to zap all of them and redownload [03:07] since I wasn't sure which one [03:07] but after that it went through fine [03:09] hmm, so you rebuilt from a clean plate :-/ [03:11] vila: pretty much [03:11] ./build.py clean && ./build.py [03:12] yeah :( third build raised the same error as the first :) [03:12] be back in a .... biggy ? :D [03:12] what is it? [03:13] forget it, I ran clean and restarted the build, I let you know if it fails [03:14] it was about yyparse missing, smelly (yyparse is usually called from generated parsers) [03:15] o.O [03:23] yeah, probably not worth debugging [03:28] * maxb hugs KVM and vmbuilder [04:01] maxb: not funny >-/ [04:01] :) [04:02] I wish I could use kvm... [04:04] night all [04:05] dOxxx: g'night, build just finished successfully [04:05] yay! [04:06] :) [04:07] vila: awww.... cpu too old? [04:07] maxb: nah, gf's laptop not running ubuntu, so I need a vm to run it ! :D [04:08] oh [04:08] I have a shiny new Core i7 Quad - need to find it some work to to :-) [04:08] I wonder how many concurrent guests it could manage [04:08] maxb: I use Ubuntu on my desktops and I'm hoping to migrate to kvm asap [04:09] maxb: that's what babune is using :) [04:09] maxb: hope you got an SSD too [04:10] nah, plain old spinning magnets [04:13] maxb: ooooh at >= 7200 rpm at least ? [04:27] oh yes, 7200. I looked out for that carefully [04:27] Was very careful not to take the "free upgrade" to a bigger 5400 one [04:28] 7200? Wow, how Dark Ages... [08:45] Hello, I did a bzr branch remote local --use-existing-dir and ended up with a .bzr dir [08:45] Now I do an bzr checkout and get an Error 17 [08:45] Error 17 = file exist [08:45] anyone an idea [08:45] ? [09:32] sender: file a bug with the exact steps you did to get the error and the full traceback [09:33] you can get those from your .bzr.log which `bzr version` will tell you where to find. [09:35] mgz: thanks for the help, it seems that the branch operation never terminated succesfully as I didnt see '<> revisions ..' so it makes sense that a checkout wouldnt work. I've found a workaround. Thanks! [09:36] #java [10:34] hiya pardners :) [11:00] hello [11:00] I have to solve a conflict where a dev has modified a file and the other one has deleted it. I want to keep it deleted, how do I tell bzr to solve the conflict by removing the file? [11:07] rm -f filename; bzr resolve filename [11:34] Hi, I have a question. From years of using svn my brain automatically types version control commands as follows: "bzr -r106 revert" instead of "bzr revert -r106". bzr then complains that it doesn't know what the -r106 command is. Is there any way this can be fixed/changed/improved? [11:34] I type just about every bzr command wrongly the first time, for exactly this reason .. I find putting the options at the end very unnatural [11:35] bzr doesn't mind the argument ordering... [11:35] Which version of bzr are you using? until recently, revert didn't take a -r argument at all [11:35] bzr revert --help and see if it lists -r [11:35] [pef@caoimhe-sid:~/src/libadjoint]$ bzr revert --help | grep -- -r [11:35] -r ARG, --revision=ARG [11:35] it works when I 'bzr revert -r106' [11:36] I'm using bzr 2.3b2 [11:36] Oooh.. I see. [11:36] is this fixed in a newer version? should I upgrade? [11:36] Yes; you have to put the subcommand first, before its arguments... [11:36] bzr -rwhatever command won't work. :) [11:36] yeah [11:36] maybe it's just me -- [11:37] but I find that's the biggest usability problem with bzr [11:37] but maybe I'm just brain-damaged from years of svn [11:37] -r106 bzr revert also wouldn't work ;) [11:37] yes, but svn -r106 log works, for example [11:37] :-) [11:37] The trouble is that you can't parse the options until you know which subcommand it is. [11:37] So bzr has to know it's getting a "revert" command, before it can udnersatnd what -r106 means [11:38] true. [11:38] the main bzr command could gather all of the -options it encounters before the command, and then pass them onto it [11:38] svn subcommands take different arguments too [11:38] and I assume that is what it is doing under the hood [11:38] It couldn't do that easily, because how would it know which ones were split or not? [11:38] bzr -abc foo [11:38] IS that -a -b -c ? Or is one of them taking a value? -a -b=c -a=bc ? [11:39] it doesn't need to know [11:40] store "-abc" in a list of arguments, because "-abc" isn't a recognised command [11:40] next argument: [11:40] "foo" is a recognised command, so push "-abc" onto its argument list, along with the rest of the sys.argv [11:40] Mmm. Perhaps it could do that. Currently it does not. [11:40] .. or something like that [11:40] I mean, it's not that hard to code -- [11:40] it's just if the bzr development team actually approve of the idea [11:41] But then how might you handle bzr -m revert commit file.c [11:41] hmm [11:41] true [11:41] It's less surprising to everyone, if we know the subcommand must be first. Everyone expects to find it there. [11:41] I wonder how svn does it [11:41] Systems that are easy to predict are easy to use. [11:42] well, thanks for the discussion [11:54] actually the way svn does it is to have a single set of options for all subcommands [11:55] this is why certain options have hideously generic help - because there's only one helpstring shared for all subcommands [11:57] if's also why svn has so few single letter options - those are allocated globally too [11:57] pfarrell: ^^^ [11:57] maxb: right, thanks [11:58] I guess I'll just get used to it [11:58] it was kind of a design decision in svn to enforce maximum possible option consistency across commands; it strikes me as difficult to do with bzr's extensibility [11:58] (but what do I know) === oubiwann_ is now known as oubiwann [13:15] thank you cz [13:15] thank you cjwatson [13:29] hi [13:30] I have a branch on lp, whenever I try to push there with bzr+ssh I get readonly transport, bzr lp-login seems to return the right value, can I debug this somehow? [13:30] http://paste.ubuntu.com/555772/ [13:30] this is the last transaction in .bzr.log [13:31] bzr plugins claims I have launchpad 2.2.1 [13:31] this is maverick on arm port === oubiwann is now known as oubiwann_ [14:05] anyone? [14:07] hi. [14:08] I wonder how can I "merge" 2 repositories x and y into repo z, when both x and y will reside inside z. [14:08] both x, y may have interleaved commits in the sense of timeline. [14:08] i.e. rev2 on x may happen before rev 3 on y, and rev 4 on y may happen before rev 4 on x. [14:09] sobersabre: what do you mean by "reside inside z"? [14:09] let's assume I have a folder /bzr/repos/dir [14:09] and I have in side it 2 dirs dir1 and dir2 each is a master branch inside dir. [14:10] I want to make /bzr/repos/all - a repository with dirs dir1, dir2, and it should contain the history of both dir1 and dir2 from /bzr/repos/dir/dir1 and /bzr/repos/dir/dir2 [14:10] sobersabre: ah [14:10] zyga: do you understand me ? [14:10] you want to bzr join them [14:11] so what is the right way to do this ? [14:11] sobersabre: I think you're right [14:11] sobersabre: do any of the branches have common history? [14:11] if so you can just bzr merge them [14:11] and bzr mv them to place you want - you will retain whole history [14:11] zyga: what do you call "common history" ? [14:11] they are unrelated, like project1 and project2 [14:12] sobersabre: by common history I mean is A a branch of B, if no you will have to pass something to merge to make it work [14:12] but it will retain all history, I did something like this before [14:12] both are MASTER branches, not bound to anything, and are not derivatives of neither of the other. [14:12] zyga: what do I have to pass merge ? [14:14] sobersabre: afair -r 1 [14:15] sobersabre: bzr merge will complain that branches are unrelated and needs some 'common part', I don't remember but that helped me [14:17] there's also a merge-into plugin [14:18] if it were me I'd try both 'bzr merge-into' and 'bzr join', and see which one works more as you expect for ongoing merging over a period of time (assuming you care about ongoing merging) [14:24] hello everyone [14:26] I wondered if you know of anybody having developed a php-skript that allows uploads and commits to a bazaar branch? [14:27] dejj: why would you use php? bzr has a python library with that api [14:29] I need to plug it into a repository viewer (Trac maybe), so my users don't need to install bzr. [14:29] What's that library called? [14:29] dejj: trac? trac supports bzr out of the box AFAIR [14:30] dejj: what do you want your users to be able to do? [14:30] can you do uploads via the browser? [14:30] dejj: uploads of what? commits? [14:30] yes [14:30] dejj: trac is not designed to do that [14:31] then I need to make it do that [14:31] dejj: well then you are lucky, bzrlib and trac are both written in python, no php required [14:32] dejj: is this for source control of a software or something else? I don't understand why developers would not just use bzr directly [14:32] my users aren't developers ;-) [14:32] we're currently using Microsoft Sharepoint's web interface to organize files [14:33] dejj: are you planning to store large binary files? [14:33] unfortunately you can't move any files there and "checkout" means "lock" and it's a total mess [14:33] dejj: there is a piece of software that gives you transparent versioning on top of webdav [14:33] it's much better than web browser "forms" for doing uploads b [14:34] but I'm afraid bzr is not someting that you want to use for sharepoint replacement [14:34] why not? [14:35] sorry for that broad question [14:35] dejj: it's not designed to do that, depending on the amount of data you want to store you might not find something that will scale with your needs [14:35] bzr was designd to version source code, not random files of arbitrary size [14:36] if you want to use that btw, it's easier to just use the shell integration [14:36] so people can commit and update from right-click menu [14:37] that would be step 2 in my plan. I can't yet get them to install anything on their computers [14:37] it would certainly be easier if you want to let them share files, zero development time for you [14:38] may I ask what is the size of the dataset they will work with? [14:38] it's not enterprise-sized (yet). about 500mb should be the limit [14:39] dejj: 500 of _everything_ _ever_ or just one file that you want to store? [14:39] cjwatson: if you were talking to me, I want to migrate from having N master branches to 1 master branch, and checking it out or branching it properly. [14:39] everything ever [14:39] you may also find that http uploads are not the best way of uploading files due to the way http was designed [14:39] this would ease some deployment stuff. [14:39] dejj: in that case it will proably work fine [14:40] the problem I'm working around here is actually my users being dead-afraid of anything new in IT. [14:40] sobersabre: well, the tools I mentioned are the options I know about, anyway (though not a bzr developer) [14:40] they know web-uploads, so I have to get them there [14:40] dejj: trafficking new software via browser is not really something that different from just installing it for them [14:41] dejj: if you do this in the open (the upload-via-web) you might get some help from us [14:42] hi all [14:42] zyga: I already wrote a buggy script. I does "bzr status", then moves the file, does "bzr add" and "bzr checkin" and that's it. It still makes many assumptions to the environment [14:42] zyga: so I thought someone must've that figured out before [14:43] dejj: in php? [14:43] zyga: unfortunately I don't speak python [14:43] dejj: I would encourage you to use bzrlib directly and write this in python with one of the web frameworks [14:44] dejj: otherwise it will fall apart quickly [14:44] dejj: you need to handle several error situations [14:44] dejj: and stuff like locks, etc [14:46] zyga: indeed. and you're saying that bzrlib makes this easier than going with php? [14:46] (bzrlib + cost of learning python) that is [14:46] dejj: well bzrlib _is_ bzr [14:46] 0.o [14:46] php is most likely the bad approach [14:47] and using bzrlib you can just implement this properly, you can look at things like loggerhead to see how to build a web app that integrates with bzr repositories [14:47] so you will have lots of code to get you started [14:47] that sounds so nice [14:48] dejj: apart from a new language and learing about bzrlib enough to commit new files you will have lots of the code already done [14:51] the dark side (php) is still very tempting, as my users are currently deleting and re-inserting files in sharepoint. and when they're done they will complain to me that their changes are not consistent with each other [14:51] you said > there is a piece of software that gives you transparent versioning on top of webdav === Ursinha-afk is now known as Ursinha [14:54] zyga: which is that piece of software? === oubiwann_ is now known as oubiwann [15:17] dejj: re, sorry? which software is that? [15:23] zyga: I don't know what you were referring to when you said: "there is a piece of software that gives you transparent versioning on top of webdav". [15:23] did you mean bzrlib? [15:24] ah no [15:24] you can see variour projects like trac that intefrace with bzr repos to get you stated [15:24] I mentioned loggerhead [15:24] it's the thing that shows you bzr branches on launchpad [15:25] I personally hacked on redmine (written in ruby) to do something similar [15:25] and I could not use bzrlib so I scripted bzr invocations [15:25] loggerhead really looks nice. it's just that I have a trac set up to work with bzr that I thought of hacking into that [15:26] trac is good too [15:26] trac has bzr integration, it might be in the core or in a separate plugin [15:28] zyga: thanks for your help, I'll definitley look into how to use bzrlib to replace my php skript [16:21] zyga, you've worked on Redmine for bzr support? [16:27] sobersabre: join accomplished? Disregard bzr merge-into unless your branches are stuck in bzr 1.x formats === beuno is now known as beuno-lunch [16:59] maxb: ah, I didn't know that, sorry for the misdirection [17:07] mbt: re [17:07] mbt: I need to go out for 20 minutes [17:08] mbt: but in short, I took what upstream redmine ships and adapted it to work much better with bzr at the time [17:08] mbt: if you want to know more, stockpile questions here, I'll answer when I return === frakturfreak_ is now known as frakturfreak [17:09] zyga, absolutely, thanks [17:11] zyga, I'm trying to put together an SCM module for Redmine to use bzr shared repositories, but I'm running into a few problems. To start, I have a few comments on http://www.redmine.org/issues/2799 (starting at comment number 20: http://www.redmine.org/issues/2799#note-20) [17:17] zyga, What I have come to is that in order to make things work at all, I think redmine needs additional changes (unless those "changes" can be isolated in the model class, I'm not sure). bzr only needs one thing added to it to make it work efficiently (but it will work without it) [17:42] mbt: I need to look after my kids, let me review that ticket, what changes did you find necessary? [17:42] mbt: I think that typical shared repo can be mapped to git or svn model with more-than-one branch easily [17:44] mbt: if you want I would gladly work on a patch to redmine to get best-of-class bzr support [17:45] zyga, It seems that git allows you to pass revision identifiers directly to the repository, thereby enabling Redmine to pass a branch ID or a revision ID and git understands it and can return the requested data. [17:46] zyga, Subversion of course uses its own thing, where the repo is treated as an opaque container; that is, Redmine does not attempt to figure out what's a branch and what's a revision, and just treats the whole thing as a list of revisions. [17:47] zyga, For bzr, the git model won't work since of course certain operations cannot be performed on repositories. The Subversion model would work, but then one could not support branches as independent browsables and also this would break Redmine's expectation that a single revision number will always map to a single changeset. [17:48] What I'm trying to do is get both support for branches in a repo (using the branches dropdown in the Redmine UI for SCM systems that support it) and be able to work in the context of a branch when browsing revisions. [17:49] zyga, So, what it would seem to me is that in order to make it work in the "ideal" situation, Redmine needs to have a concept of browsing in the context of a branch, without making the assumption that a branch can be treated as a revision. [17:51] zyga, But if that happens, then it'd seem that the goal of implementing proper support for Bazaar would require working on Redmine's core, followed by updating all of the other SCM modules to work with the updated core, and then writing a Bazaar module that can support it as well. [17:51] Which I don't mind doing, or collaborating on, but I want to be absolutely sure that it's required, because that's pretty invasive work. [18:00] re [18:01] mbt: you don't need to use revisions [18:01] zyga, what do you mean? [18:01] mbt: or more accurately revnos, you should just use revids [18:01] mbt: bzr and git are identical in what they store and express [18:01] zyga, Still, same problem, you have to refer to them within the context of a branch [18:02] "bzr log" doesn't work on a repo; "git log" works on a repo [18:02] mbt: the only thing that might be confusing about bzr is that most of the time people operate on revnos - numbers - sometimes in dotted decimal notation [18:02] mbt: ah, right [18:02] mbt: but you can 1) use bzr revids to map to actual changesets [18:03] mbt: and use bzr branches or something similar to discover branches in a given shared repo [18:03] zyga, Redmine expects to be able to query the repository directly and doesn't pass along which branch the user is working in [18:03] At least as I understand it. [18:03] zyga, I noticed that there is two URL properties that Redmine can use, but the CVS modules are the only ones that use them both (root_url and url) [18:04] But it looks also like they're both expected to be static, so it's not like they could be used to work with branches, I don't think. [18:05] mbt: I don't remember that detail, I did this about a year ago (first attempt) and 6 months ago (second attempt) [18:05] mbt: but you can map the thing that redmine operates on to anything oyu want [18:05] mbt: so you can easily pass branch + revid [18:05] mbt: it's not relevant to rednime, only your scm adapter works with that [18:06] mbt: the way I set this up was: [18:06] zyga, The question is "how?". e.g., when loading a git branch "master", redmine passes "master" as the revision ID. [18:06] mbt: point the repo url to the bzr branch _OR_ bzr shared repo [18:06] Then when you browse to a changeset, Redmine passes just the changeset ID. [18:06] brb [18:06] mbt: hmm, interesting, I did not look at git implementation to be honest, perhaps it just stores that as a cookie somewhere [18:06] mbt: the key point to look at is the git scm adapter [18:07] mbt: I'm confident it can be mapped 1-to-1 to bzr operations [18:07] mbt: things like "log for repo" can be emulated as "log for each branch in repo" on the adapter [18:07] mbt: it really depends on what kind of semantics you want to have [18:08] mbt: I'm not a daily git user so I don't know what each command does from the top of my head [18:09] back. [18:10] mbt: I have a fork of redmine somewhere that fixed several annoyances I found [18:10] zyga, From reading through the git adapter, everything is just a revision ID. tag names, branch names, and revision IDs are all passed using the exact same mechanism, the revision. [18:10] mbt: and we can easily hack the missing bits (repo support et all) [18:10] The svn adapters seems to work the same way, but then again the svn adapter isn't branch aware because of the way svn users operate [18:11] mbt: in git the changeset is just the sha1 of the commit, I suspect that's all git needs, but branches are different, you can have any number of branches pointing at the exact same commit, does redmine care about that? [18:11] mbt: let me find my code first - just a moment [18:11] zyga, nope, it just pulls the revid. because git doesn't care about it, redmine doesn't have to. [18:12] pulls? do you mean when rednime scans the repository for new stuff? === beuno-lunch is now known as beuno [18:12] zyga, right, redmine just does a "git log" at the repo level [18:12] * zyga woke up the redmine server in his attic [18:13] mbt: interesting, what is the order of operations in that case? IMHO a "log" on all branches is meaningless [18:13] github does not show a log for every branch, you select the branch first [18:13] mbt: do you want to work with git or bzr now? [18:13] zyga, redmine just caches the changesets [18:13] mbt: right I know [18:14] zyga, git will happily show you the changesets for a repo it seems [18:14] or maybe that's just git defaulting to showing the changesets for only the "active" branch [18:14] mbt: bzr will do the same internally [18:15] mbt: we could even write a smarter adapter for bzr that talks directly to bzrlib [18:15] ~/Projects/redmine $ bzr log [18:15] bzr: ERROR: Not a branch: "/home/mbt/Projects/redmine/.bzr/branch/": location is a repository. [18:15] mbt: and talks to redmine over a pipe or something like that, I remember that importing bigger history was very slow [18:15] mbt: not like that, at the API level it's the repository you talk to [18:15] zyga, I started an adapter along those lines to find all branches [18:15] mbt: is your code online? [18:15] mbt: I will happily hack with you [18:16] not yet (the .py adapter to pull what's what out of a repo is, it's in Redmine Issue #2799) [18:16] Also I can push what I've been toying with but it's just Redmine trunk with a nonfunctional bzr adapter [18:16] lol [18:16] :-) [18:17] zyga, do you have ipv6? [18:17] mbt: nope [18:17] ;-) why? [18:17] because if you did I have it on an IPv6 host and could bzr serve it [18:17] but no worries [18:17] I'll push it to a host with a public IPv4 address [18:18] how do launchpad junk branches work? I should be able to do it that way right? [18:18] mbt: if it's bzr you can [18:18] exactly [18:18] it's bzr push lp:~yourlaunchpadid/+junk/anythingyouliek [18:18] k 1 sec [18:19] I found my adapter [18:19] it's really nothing special, just cosmetic changes over the trunk at the time [18:19] the better adapter (unfortunately) stayed at samsung :/ [18:20] https://code.launchpad.net/~mtrausch/+junk/redmine-bazaar-sr [18:20] give LP a few minutes to catch up with it tho lol [18:21] getting it now [18:21] no, the branch is ready, only UI is lagging [18:21] It is ugly, nonfunctional code though [18:22] is there a bzr mirror of the upstream redmine tree anywhere? [18:22] mostly just experimenting. I stopped with this to investigate how both svn and git work [18:22] I'd like to be able to rebase against that finalley [18:22] zyga, no, I have a copy that I svn-imported though [18:22] i can push that as +junk/redmine-trunk if you want [18:22] mbt: svn? AFAIR redmine used something more recent? mercurial? [18:23] zyga, no, they officially use svn with a git mirror somewhere [18:23] jelmer, what were the things i said i'd do? just clean up that code, or was there something else? [18:23] mbt: d'oh [18:23] http://redmine.rubyforge.org/svn/trunk is the svn repo [18:23] well subtract /trunk from the end of that [18:23] mbt: well the git mirror is nice then, it's better than svn :) [18:23] lol [18:23] I avoid git like the plague if I can. I can't wrap my mind around many of the things it does. [18:24] Took me 45 minutes yesterday to figure out how to actually clone with it, since clone with no args but a repo doesn't actually clone [18:24] mbt: I dont' use git daily but yeah, first encounter is hard [18:25] mbt: but bzr-git is working well enough that you can just bzr get any git repo [18:25] To figure out how redmine worked with git, I got a copy of cakephp from github and used that to stufy [18:25] *study [18:25] That's how I learned that everything is treated as a revision to redmine [18:26] It seems that the two key things are (a) revisions are expected to be repo-wide and (b) branches are expected to be revision pointers [18:26] got it, diffing my parts now [18:26] I could be, and sincerely hope I am, wrong. [18:26] On both parts. [18:26] give me a moment [18:26] kk. [18:27] first thing I noticed: i removed the concept of revno as integer (it's not) [18:28] right, it can be a 3-decimal number too [18:28] ? [18:28] 3 decimal? [18:28] x.y.z [18:28] 1.2.3.4.5.6.7.8 it can go as log as you need [18:28] (branched-from, branch-sequence-number, revision) [18:29] it's not bound AFAIR (bzr guys can correct me here) [18:29] hmm? [18:29] zyga, In older versions of bzr, you're correct [18:29] are you sure? [18:29] zyga, 1 saec [18:29] *sec [18:29] how do you assign b-seq-number [18:29] zyga, since bzr 1.2 it changed: http://doc.bazaar.canonical.com/bzr.dev/en/user-guide/zen.html#understanding-revision-numbers [18:29] on each merge? [18:30] hmm :) [18:30] * zyga learned something new today [18:31] mbt: looking at your branch [18:31] one thing that redmine messes up is commiter vs author [18:31] git has the same issue (or did last time I checked) [18:32] zyga, Also, I noticed that the current bzr handler has problems with filenames with spaces [18:32] it does not use "bzr ls --null" and the non --null output uses spaces for field separation [18:33] If only redmine were done in python... lol [18:33] hmm [18:33] heh, yeah ;-) [18:34] well my changes are not perfect, let me see how that works [18:35] It is this concept that I think is the most difficult to represent in Redmine: http://doc.bazaar.canonical.com/bzr.dev/en/user-guide/zen.html#each-branch-has-its-own-view-of-history [18:37] mbt: that's _somewhat_ the same as any other vcs? (I did not read the url yet, just looking at the title) [18:37] mbt: is it about branch is a sequence of revisions? [18:37] mbt: well alternatively you could say that each revision has its own view of history [18:38] Well, in svn revno 5 is the same across all branches. [18:38] mbt: a branch at a technical level is essentially just a record of the current tip revision-id, plus some minor details (like the 'nick' and other settings you can store in branch.conf) [18:38] In bzr, revno 5 can be different in every single branch (though often it is not). [18:39] mbt: well, forget revnos then, and just deal with revids [18:39] mbt: in bzr revision id is also the same (AFAIR) [18:39] Yes, but then there comes the question of mapping it. Redmine only allows one piece of data to be stored for a changeset in a repository, as I understand it. [18:40] mbt: exactly, revid is ~~ same as in git [18:40] mbt: and it should be revid === vila changed the topic of #bzr to: Bazaar version control | try https://answers.launchpad.net/bzr for more help | http://irclogs.ubuntu.com/ | Patch pilot: poolie | 2.3b5 is officially out! (rm vila) [18:40] IOW, using revision IDs would mean presenting them in the UI, AFAICT. [18:40] mbt: we can think how to _render_ the revid later [18:40] mbt: but that's okay, revids _ARE_ a part of bzr today [18:41] Well, first things first. [18:42] Redmine queries the repository for revisions, not each branch. Since that cannot be done in bzr directly, either the adapter has to call bzr for every branch and add to the DB if the changeset is not present, or a Python module would do effectively the same thing but simplify the Redmine adapter code. Is that right? [18:43] mbt: the adapter can map revids to branches somehow too [18:44] mbt: I'm pushing my branch to lp:~zkrynicki/+junk/redmine-bzr [18:44] Seems the bzrlib.repository.Repository class has a method all_revision_ids(self) that would be useful, but it's deprecated. [18:44] mbt: I'll need a moment to setup my working space for redmine on this system, for various reasons I'm using plain text console and no X [18:44] why not #bazaar [18:45] Ramosa, are you suggesting a change of venue for this discussion? [18:45] i was idling in there for some hours before i figured it out :-p [18:45] Ramosa: bzr is shorter, that's as good as it gets [18:46] uhm.. i type faster if i can actually pronounce it :) [18:46] I should file a bug on bzrlib.repository.Repository.find_branches [18:46] it's beeziar [18:46] for me at least ;-] [18:47] bazinga [18:47] mbt: what's the problem with that API? [18:47] For the svn-import'd redmine module, find_branches(False) takes like 4 seconds to run. But it should be able to return near-instantly. [18:47] zyga, they seem to have a policy of not storing derivable data [18:48] mbt: hmm, interesting, what does bzr store in that case? I never used bzr-svn repositories before [18:48] zyga, It's the same for all shared-repos [18:48] zyga, They probe the filesystem to find branches [18:48] mbt: I thougth that all you need to get revisions is to scan for subtrees with .bzr and figure out the type of bzrdir [18:48] zyga, Instead of storing a list of known branches in the repo's .bzr dir [18:48] mbt: right [18:48] mbt: ah I see what you mean [18:49] Well, you have to scan for subtrees and then see if they are part of the repo (e.g., using the repo for storage) [18:49] i can't decide how to use bazaar as a single developer, 2 pc's (windows) .. if to develop locally, and then somehow merge when both computers are on, or invest in a server (not online, has to be hosted at me) [18:49] mbt: it's probably more complex in that case [18:49] tis possible to have a branch within a branch that does not [18:49] mbt: git uses identical model [18:49] mbt: but just looks at one directory [18:49] i presume bzr+ssh doesnt work on windows [18:49] mbt: it's still a branch [18:49] e.g., bzr *could* explicitly store a branch list (because shared-repo branches are created by bzr or bzrlib itself) [18:50] mbt: then you need to decide if you look for _any_ branches or just branches in a shared repo [18:50] See the bzr-colo plugin, for example. [18:50] but it chooses not do, because that information can be derived from what's on the filesystem [18:50] (which colocates multiple branches in one directory, similar to how git is used) [18:50] spiv: what do you mean [18:50] spiv: right, I use it daily [18:51] spiv, goal is to add support for bzr without requiring any plugins [18:51] mbt: it's not a plugin that adds new magic foo, it's just new UI [18:51] rather without requiring any bzr plugins [18:51] mbt: the plugin uses all the existing stuff from bzr [18:51] Colocated branches of some form will become part of the core. Most of the code and APIs have already landed. [18:51] The core basically just lacks the UI at the moment. [18:52] though if it can be done with nothing other than bzrlib, shipping a helper .py module with redmine is probably not out of the question [18:52] mbt: that's exactly the case [18:52] but then what happens when you push multiple branches. [18:53] mbt: but you must define what redmine will show in that case as bzr has no 'standard' colocated format yet [18:53] Obviously that doesn't help you much if you want to stick to features already released, but in case you are comfortable with dealing with features that are coming in the near future you can rely on colo stuff. [18:53] mbt: you push multiple branches, that's all [18:53] spiv, I (personally) am not concerned with pre-2.0 compatibility [18:53] mbt: you push to a colo-ified place, it just works [18:54] zyga, without the colo plugin installed on the server side? [18:54] mbt: not really [18:54] mbt: but I'm not sure really [18:54] mbt: I don't know how bzr works on the smart server case [18:54] mbt: remember that colo does not add _any_ new features [18:54] mbt: it's just UI [18:54] I know this much: I push and pull to bzr+ssh all the time in our environment [18:55] mbt: the only tricky part is the initial repository (colo repository) layout [18:58] Being that this should work for stock setups [18:58] damn enter button. Being that this should work for stock setups, a colo repo would be good if completely transparent, but probably not otherwise [18:59] mbt: IMHO there is no need to rely on colo today [18:59] mbt: apart from ensuring that redmine will pick up the colo-ified repo and work as expected [18:59] zyga, agreed [19:00] * zyga remebers the pain of setting up redmine on ubuntu the first time [19:00] eh ruby community :/ [19:01] zyga, Getting redmine running for me was actually not bad [19:01] mbt: well you can apt-get install it easily [19:01] mbt: unless you want to run trunk that is [19:01] Running trunk is what I am doing [19:01] right out of the repo [19:01] I did not manage to get this working without using gem directly [19:01] well, branch [19:01] lol [19:01] I just aptitude installed ruby and then gem installed rails and I think that was it [19:02] hmm, I was using lucid and before that .... what was it? :-) anyway I had to update a lot of gems [19:03] My desktop is always running the latest stable or latest+1 testing releases [19:03] lol [19:04] But I'm just running in-tree with ./script/server [19:04] I'll be right back [19:04] k [19:10] I know that in the adapter, Redmine wants revisions to work at the repo level. Seems that bzrlib.repository.Repository.all_revision_ids() works, deprecation aside [19:10] So, a .py helper could easily pull all changesets. Though I'm sure that also includes ones that don't exist in any branches any longer. [19:14] when you select a branch in the redmine UI, it populates the revision field with the branch name, and submits. [19:20] zyga, welcome back lol [19:20] mbt: right ;) [19:20] mbt: it seems current trunk does not work with maverik deps, I need one more moment to setup my instance [19:20] mbt: I pushed a branch based on your work [19:20] So it's possible to query all revisions in a repo and theroetically use that information to populate Redmine's database [19:21] mbt: sure [19:21] But what's not possible (either at all, or efficiently) is to reconcile the repo's stored revisions with the database and Redmine wants the ability to check to see if a repo has new revisions or not [19:21] hmm [19:21] right that part sucked [19:22] redmine used revnos to see if there's somethinhg new [19:22] well [19:22] you can do this [19:22] for each repo [19:22] sorry, start over [19:22] git's adapter handles it by checking (based on date) the repo revisions [19:22] for each brach, for each revision, import changeset [19:23] But I see nothing in bzrlib to do the same thing at the repository level. [19:23] we can store the revid of the tree assuming that the tree does not changes (think --overwrite) [19:23] If Redmine treated branches as if they were first-class subordinates of a repository, that would work. [19:23] perhaps it's better to patch redmine more then [19:24] I don't know bzr internals that good, is it possible to efficiently terate revisions that happened after a specific revision? [19:24] But it appears that Redmine thinks of revisions as first-class subordinates of repositories, and a branch as a pointer to a changeset [19:24] if so then we can do that easily [19:24] mbt: probably because it's git/svn centric today [19:24] zyga, Within the context of a branch that appears to be the case. [19:24] Within the context of a repository it appears to be possible but only after loading all changesets and figuring out the relationships between them. [19:25] which, for a repo the size of my typical projects might not take that long, but e.g., for a repo with MySQL would probably take literally forever [19:25] mbt: are you sure, you just do the same for each branch [19:26] mbt: remember, you just _add_ changesets lazily [19:26] mbt: you iterate over them in bzr branch [19:27] Right, but I don't think Redmine uses the data in the VCS itself for display [19:27] mbt: for revision in branch.revisions_since(last_imported_revision_for_this_branch): if revision_not_in_redmine: import_revision(revision) [19:27] mbt: what do you mean [19:28] I think Redmine will use the output of the VCS tool to determine if (a) its changeset database is up to date and (b) possibly to render a tree for a specific revision [19:28] as well as for cat, diff, and annotate operations [19:28] But to display changesets I think it leans upon its own DB [19:29] you are correct [19:29] I found one issue though [19:29] for listing files it relies on bzr ls [19:29] Yes. [19:29] and that does not provide file sizes [19:29] No, it does not. [19:29] without custom python module you cannot get this information [19:30] The more and more I think about this, the more I think that proper support will (no matter what) include a helper .py [19:30] yeah, I feel the same [19:30] _OR_ [19:30] Dumb question [19:30] Can one embed Python into Ruby? [19:31] e.g., if one is using bzr, then it's a given that both Python and bzrlib are installed [19:31] a new bzr subcommand that exposes some crappy xml or other data structure as a standard bzr feature [19:31] mbt: not that I think [19:31] mbt: I think an rpc/pipe method is the best way of doing that without something that can break easily === Ursinha is now known as Ursinha-afk [19:31] Is it possible to, say, use the bazaar adapter class to load Python and "thunk" between Redmine and bzrlib? [19:31] mbt: think about the plethora of python/ruby implementations [19:31] Ruby is all new to me, so I don't know. [19:32] mbt: I'd explicitly pipe that to the helper [19:32] Before five or six days ago, I'd never looked at a single line of Ruby code. [19:32] separate process [19:32] So, maybe create something like bzr, but that can be IO.popen'ed and provide a chatty interactive session-like wrapper around bzrlib? [19:33] hmm it's also tricky [19:33] you must remember that redmine itself may run on number of servers [19:34] in various thread/process config [19:34] Right. [19:34] Which also means that it might access a bzr repo over-the-net [19:34] I'd say that to be safe and efficient the python part should run [19:34] It still requires bzr on the same host that redmine is on, which means that it's a given that python and bzrlib are available. [19:34] (just like that, like a daemon, or via apache+python, and expose simple xml/json-rpc [19:35] mbt: not really, you could even package the program as an exe file for windows, it's just something you can later call from ruby [19:35] this way you avoid spawing random number of processes [19:36] and can also scale the bzr part as you normally do with any other web app [19:36] it spawns bzr / git / svn anyway [19:36] and in the future this might be a part of something like bzr plugin that you can just bzr redmine-serve [19:36] mbt: currently, it does need to (it's actually very slow exactly because of that) [19:37] mbt: you can just call xml-rpc instead, no loading of python and processing tiny bits of data in one go [19:37] one page view of an up to date git repo calls (via shellout) git ~ 10 times [19:37] mbt: git is native, it loads faster, python will gain more speed if you keep it running [19:38] mbt: and just do 10 xml-rpc calls [19:38] * zyga runs away for another moment [19:38] i thought git was in perl with some c [19:39] kk [19:47] Well, for now, I think that any way it can be done is good. This is, IMHO, one downfall of bzrlib being written in Python; it's not terribly easy to use it from other languages. If it were just a single .so using the C ABI... [19:50] So, if a helper module is going to be required in any event, I suppose the thing to do is figure out exactly what its interface needs to be so that it supports all of the things that Redmine wants. [19:50] And in a way that redmine wants. [19:52] From my read-through, each adapter in Redmine can/should have the methods: info, entry, entries, branches, default_branch, properties, revisions, diff, cat. [19:54] Models are expected to have: branches, tags, properties, cat, diff, relative_path, latest_changeset, latest_changesets, and possibly others. === Ursinha-afk is now known as Ursinha [19:58] bzrlib.branch.Branch.revision_history() provides "[the] sequence of revision ids on this branch", so that can be used to see the ordering of the commits. [20:02] Conversion of revision-ids to revision-numbers appears to be a somewhat expensive operation as well (using Branch.revision_id_to_revno for all of the revisions in a repo) so doing that frequently would not be a good idea [20:25] mbt: re [20:27] zyga, hrm? [20:28] poolie: sorry, didn't see your message on IRC earlier [20:28] poolie: I don't think there was anything else than what you already commented in the MP. [20:36] mbt: how do you know that revno<->revid conversion is expensive? [20:37] mbt: we could cache the revid but I'm not sure it's stable [20:37] Because I am playing with the library [20:37] Getting all revids is very fast [20:37] converting a single revid to a revno is apparently fast, but doing so for nearly 4,000 revisions took long enough that I Ctrl+C'd it [20:38] It ran at 100% CPU for at least 1 minute [20:39] What I am trying to do now is see if I can write a handful of functions to go in a helper module that will do what Redmine expects, but before I can do that I have to get a little more familiar with bzrlib [20:40] i expected to use bzr but as you noted it does not output all of the info needed to work with branches w/o working trees [20:41] mbt: I see [20:41] mbt: perhaps some bzr hackers could tell us what's the best way to approach the problem [20:41] mbt: did you check if bzr log is faste than what you called? [20:41] not yet. [20:42] mbt: bzr log does convert revisions [20:42] it does but it also blocks on terminal io [20:42] mbt: or perhaps, bzr log cheats and walks a well-known tree of revids somehow, that would be nice [20:42] bzr log -n0 has to calculate the revno for every rev. [20:43] mbt: sorry about being away all the time, kids.sleep() raises exceptions ;-) [20:43] LOL i know the feeling [20:43] spiv: what is the complexity of such operation? [20:43] mine is down for a nap [20:43] spiv: and is there any way to cheat [20:45] zyga: not linear, but I can do "bzr log -n0 > /dev/null" of bzr in less than 5.5s (33787 revs, mostly in non-mainline revs from many merges, some quite large) [20:45] hrm [20:45] And log is of course doing a bunch more work than just calculating dotted revnos. [20:45] will be back @ comp in just a sec [20:46] spiv: is the number stable, once calculated? [20:46] can we just cache it [20:46] No, a revid's revno in a branch can change depending on future merges. [20:46] no, uncommit and overwrites can reorder [20:47] mbt-mobile: well, you can disallow those cases by setting append_revisions_only on a branch... [20:47] spiv: right but if overwrite or uncommit happens we can purge the cache [20:47] spiv how does a merge afect revnos? crisscrossing or something? [20:47] spiv: that's not something that happens daily [20:48] You may be interested in the bzr-history-db or bzr-historycache plugins. [20:48] hmm [20:48] (smarter) [20:48] if it caches that on bzr side it makes our interface simple and our db uncomplicated [20:48] being a single developer, would you have branches? [20:48] zyga: for the duration of a read_lock bzr caches lots of stuff [20:48] can bzr be called w/ an arbitrary plugin dir? [20:48] Ramosa: nobody talks about single developres [20:49] zyga: that makes this sort of thing pretty quick typically [20:49] spiv: I see [20:49] spiv: frankly I think that having a helper service with some rpc api will fix performance [20:49] mbt-mobile: yes, see BZR_PLUGIN_PATH and BZR_PLUGINS_AT env vars in the doc [20:49] ramosa: i use branches on solo projects all the time [20:49] spiv: running bzr for each and every revision all the time is slow [20:50] Doing things one revision at a time is slow. [20:50] spiv: well redmine scm integration for bzr is in need of love, that's the way it works currently [20:51] zyga, helper svc would be a nice improvement later i think [20:51] redmine needs tighter vcs integration, too. [20:52] mbt-mobile: what do you mean by tighter? [20:52] Calling any binary 10 times or more (or any binary once that takes a long time, like an initial page view of a git repo) adds time to each request, obviously. [20:53] zyga, I mean interfaces other than IO.popen for all of them. [20:53] mbt: right but solving that for all things in ruby is hard [20:53] mbt: I don't know of any native binding for scms and rub [20:54] mbt: I'll try to setup django xml-rpc app that gives you the same primitives as redmine requires [20:54] mbt: I'll see how that works [20:54] zyga, I know that for Python, I'd write Cython libraries as extension modules to call (at least for C-language SCMs) into the SCM library directly, for compiled ones that have an .so or can be ldopen()'d. [20:55] mbt: well ruby and python == fail [20:55] mbt: git has no c api [20:55] mbt: bzr and hg use python [20:55] mbt: svn has api so that might work but svn is the old guy that only old people talk to ;P [20:55] mbt: darcs and others are too exotic [20:56] zyga, can't C code also call Python code? [20:56] mbt: or have dedicated "export" stuff [20:56] mbt: it's not that simple [20:56] mbt: python and ruby use different gc [20:56] mbt: I'm pretty sure that attempting to bridge them would be very hard [20:57] mbt: signals, threading, gc - all of that is hard to bridge, especially since both use different methods for that [20:57] zyga, I remember reading about a (I think) Python to Ruby bridge, but that's the wrong direction anyway. [20:57] mbt: jython and jruby are closer [20:57] IDK if Redmine will run under Jruby, but bzrlib doesn't work under Jython. [20:59] zyga, mbt: I'm not sure what data you trying to get from bzr, but maybe there is a way to get what you want with one subprocess call (or at least less than ten)? [20:59] or use a deamon of sorts... [21:00] GaryvdM, Redmine could, for that matter, cache the output of a single command for the duration of a single request. A lot of these hits are the same command 8 times in a row or something insane like that. [21:00] * GaryvdM open log to get context. [21:00] GaryvdM, it'd only have to be called once if the result were cached, but that is an optimization to be made in Redmine itself, not its VCS interface, I'd think. [21:01] mbt: oh, that's not good [21:01] (e.g., Redmine could subclass IO.popen and when it notices that the same command is going to be called again, assume the call is idempotent and return the value from the last one, instead of creating a subprocess) [21:02] Or maybe whitelist certain idempotent commands. [21:02] But again, not my focus today. [21:02] lifeless: jython anyone? [21:02] ;-) [21:02] I'm sure bzr will work with jython [21:02] GaryvdM: that's our plan now [21:02] GaryvdM: wrap bzr-looking-at-one-repo-with-branches with some daemon/webservice and expose the stuff we need as rpc calls [21:02] spiv: is it safe to keep one bzrlib.branch.Branch instance for very long [21:02] mbt: right but to be safe I'd go with rpc first, you can then optimize what redmine does but redmine is a moving target [21:02] mbt: and you also cannot cache that easily without invalidation notification, something that is best done in bzr side [21:02] mbt: you'll get stale cache with that approach IMHO [21:03] * zyga makes up excuses not to write too much ruby [21:03] zyga, lol [21:03] A secondary goal is to make this something that I can "sell" to a Redmine committer. [21:03] I do *not* want to maintain a local fork if at all possible. [21:04] mbt: I think it can fly, espetially that bzr is not really well supported now [21:04] zyga, You mentioned Django earlier? [21:04] mbt: right, that's my recent job focus so I'm happy to build xml-rpc service that talks bzr [21:04] mbt: and hopefully it's going to be easy to work with xml-rpc in ruby [21:04] zyga, Would there, I presume, be a way to knock it down to one .py file that has no dependencies other than bzrlib's dependencies as a refinement? [21:05] spiv: what is the protocol that bzr serve talks? is it anything well-known over the wire or just custom? [21:05] mbt: yes, the django parts would just xmlrpc that away [21:05] mbt: the core bits would certainly need pure bzr to work [21:06] spiv: I'm asking to understand if it's easier to extend bzr serve and talk to that directly [21:06] So, I just got bitten by https://bugs.launchpad.net/bzr/+bug/673884 again in the middle of pushing a gigantic branch [21:06] zyga, plugins can extend bzr serve (e.g., loggerhead can be used as bzr serve --http) [21:07] mbt: oh, cool, I need to look at that [21:07] the help options for rebase don't really explain what -r does [21:07] mbt: okay, so the rpc bits can be dediced upon later, once we have the guts working without shelling out to bzr [21:08] zyga, I'm fine with a first "draft" shelling out to *something*, just such that it can work. [21:12] I tried to rebase onto the last dpushed revision but I'm getting a conflict on all the added files (since the point of divergence is before they were added, bzr seems to think they have different file IDs) [21:12] is there some way to ask it to do a dumb merge and just treat all the patches as patches? [21:13] all the --merge-type options just give me tracebacks. [21:14] zyga: custom [21:15] spiv: thanks [21:16] glyph: I am summoning jelmer [21:17] zyga: there are some elementary docs in the tree in doc/developers/network-protocol.txt, and bzrlib/remote.py and bzrlib/smart/client.py are probably some of the more interesting bits of the client implementation. [21:18] spiv: if it's non standard it's not much use for us in this case, the goal is to minimize the ruby part as much as possible and implementing the same protocol would probably take some time, I think that off-the-shelf rpc will work better for this [21:19] spiv: the output of '--weave', for example - http://dpaste.com/333668/ [21:19] Woot. [21:19] zyga: you may also be interested in the bzr-service plugin [21:19] spiv: that's something new [21:19] let me look it up [21:20] zyga: and maybe stuff like bzr-xmloutput etc. Tools like eclipse have some overlapping requirements with you I suspect [21:20] spiv: yeah that's true [21:20] spiv: I heard about xmloutput [21:20] spiv: I think that my future solution for using bzr offline is going to be making a gigantic patch and then manually applying it, since dpush is apparently too unreliable to use in practice :-\ [21:21] zyga: bzr devs are a bit distracted this week (we're at a sprint) so I'd ask on the mailing list as well as here on IRC [21:21] at least with the SVN servers I've tried it with, it will always crap out around the 50-revision mark (earlier if I'm using https) [21:21] spiv: dallas? [21:21] Yeah [21:21] spiv: I just left :-) [21:21] Congrats ;) [21:22] hehe, US-medival-burger-castle will forever hount my mind [21:35] Hi vila - I guess you are awake cause you are in Dallas? [21:35] GaryvdM: !!!!!!!! yeeeehaaaaaa [21:35] yeah, I'm in Dallas :) [21:36] GaryvdM: middle of the night for you thought, right ? [21:36] though [21:36] vila: nearly [21:37] vila: for the mac installer scripts - is there anything to look for new releases of plugins? [21:37] Joy, a spontaneous reboot on my phone. [21:37] GaryvdM: errr, you mean to get inspiration for the windows installers ? [21:37] vila yes [21:38] * vila checks [21:38] I manually do > for plugin in plugins: bzr tags -d lp:plugin [21:38] mbt: what phone is that [21:39] sponteaneous reboot are so fun, we should have more of them, preferably in unexpected places [21:39] zyga, nightly build of CM7 :) [21:39] CM? [21:39] unexpected but not surprising. not even beta yet lol [21:39] cyanogenmod. [21:39] ah [21:40] jdroid [21:40] GaryvdM: bzr-upload has a 1.0.0 release, hmmm, I'm not sure I properly tagged it though [21:40] mbt-mobile: out of curiosity, what is your interest in redmine, most folsk who use bzr also use lp.net [21:41] zyga: client [21:41] GaryvdM: launchpadlib has a 1.9.4 release [21:41] zyga, to make my life easier bc they wont use lp [21:42] zyga, so really for me. been using text files for too long to manage this sort of stuff. [21:42] mbt: manage what? [21:43] mbt: projects? [21:43] GaryvdM: the rest is less clear, you may look at revno 113 (the last one) in the 2.3 mac-installer branch [21:43] GaryvdM: hmm, I should be able to provide an lp url for that, just a sec [21:43] zyga, yep. Putting it all in one place is a good thing. [21:44] vila: we not yet including lauchpadlib in the windows installer. What plugin uses it? [21:44] GaryvdM: http://bazaar.launchpad.net/~bzr-mac/bzr-mac-installers/2.3/revision/113 [21:44] GaryvdM: bzr-pipeline [21:44] zyga, I'm a freelancer, and I manage a lot of proprietary things (sadly). [21:45] ah - yes [21:45] GaryvdM: but be careful that launchpadlib has a lot of depedencies and we don't (yet) carry them all [21:45] mbt: I see, thanks for telling me [21:45] GaryvdM: we (mac packagers) [21:45] vila: yes - I'll leave that for now... [21:46] i cant decide what workspace model to use.. the documentation doesn't give me enough knowledge to take a sane decision [21:46] doxxx got it Right I think by freezing on revnos for plugins that don't have proper releases or series yet (like qbzr does) [21:46] zyga, But since presently I manage things in different systems, I started hunting for something (and writing something as well). [21:46] glyph: jelmer is now sitting next to me [21:47] GaryvdM: dunno if you have the same detailed way to describe which plugin versions you embed on the windows side [21:47] zyga, I wound up finding Redmine, which is perfect except for this one thing which was already an issue in the RM tracker. [21:47] mbt: if you want I can work with you to make this happen [21:48] mbt: lp.net is perferct for hosting code but I find it lacking for project management [21:48] vila: There is - I'll get the url in a sec. [21:48] GaryvdM: cool [21:48] zyga, Absolutely. One other thing I liked about finding Redmine was that it was a lot easier to get going than a local instance of Launchpad. [21:48] hi glyph [21:48] glyph: spiv mentioned you wre having issues with dpush? [21:51] jelmer: a known issue :) [21:51] jelmer: https://bugs.launchpad.net/bzr/+bug/673884 [21:51] zyga, am reading through the log code now [21:51] jelmer: I was wondering if I could work around it [21:51] it looks like if the branch adds files, I'm pretty hosed [21:52] vila: http://bazaar.launchpad.net/~bzr/bzr-windows-installers/trunk/view/head:/bazaar_releases.py [21:53] similar idea to the mac config.py file - different in details [21:53] I have all the information that Redmine needs, I think, save for last-revision [21:53] for a list of entries, anyway [21:53] glyph: ah, hmm [21:54] can't figure out how to get the last revision for a file or directory from the list of files in a revisiontree. [21:55] GaryvdM: excellent ! [21:56] hmmm [21:56] mbt: last revision for a directory? [21:56] mbt: the "svn/cvs" like thing that you get when commiting to a tree [21:56] vila: That was written by Ian [21:56] GaryvdM: ideally we should be able to share a common file between the installers for a given series, just a thought, I don't want patches *now* ! :D [21:56] vila: yes [21:57] zyga, Yes, last revision for a dir, like http://bazaar.launchpad.net/~mtrausch/+junk/redmine-bazaar-sr/files shows [21:58] mbt: right, let me see [22:01] jelmer: any suggestions? [22:01] zyga, bzrlib.branch.Branch.get_revision_id_to_revno_map works for what I was trying earlier, and is a lot faster. [22:04] glyph: I'm looking at the bug [22:04] mbt: I used bzrlib.branch.Branch.basis_tree() to get RevisionTree instance, it has methods that seem to be able to get dir-or-file -> revision [22:05] mbt: it also has get_file_size() [22:06] yes, also if you use .list_files, you get name, type, size, and a Inventory object [22:07] I still don't see anything in Tree or RevisionTree to get the last revision for an object [22:09] mbt: got it [22:09] the inventory item has this actually [22:10] I found Tree._file_revision(revtree, file_id) but that's "private" [22:10] mbt: .revision [22:10] that's what you want [22:10] mbt: you can simply walk the list generated by list_files() [22:10] (mornin everybody) [22:11] zyga, Yep, am using "for file in revtree.list_files()" [22:11] mbt: so file is not really true, it returns a tuple of four items, the last one is inventory and it has .revision [22:12] zyga: http://pastebin.com/78Q6Ne5A [22:14] Still takes ½ second to run (on my system) when > /dev/null [22:14] mbt: line 18 is expensive, just walk the list, it's a generator [22:14] ah [22:14] mbt: takes how many seconds? [22:14] 1/2 [22:14] 0.5 [22:15] removing the comprehension saves 0.02 seconds [22:15] mbt: how about the same without using idmap at all? [22:15] mbt: that's zippy ;-) [22:15] mbt: that's _all_ redmine needs to import chagesets into its own db [22:15] removing idmap cuts 0.05 seconds [22:16] this is just listing the whole contents of a single revision [22:17] mbt: hmm refresh my memory, does redmine store files of each changeset too? [22:17] don't think so, let me look [22:17] mbt: AFAIR this is interactive operation that you'd trigger when looking at the repository section [22:18] mbt: so this 0.5 second delay would be something you get when clicking on the page [22:18] right [22:18] i think that's right, but one sec [22:18] (at least it's not the ~4 second delay that branch discovery takes, but that too is every page load [22:18] ) [22:20] redmine stores repository_id (foreign key), revision, committer, committed on, comments, commit date, scmid (foreign key I think), user_id (??) [22:20] in its changesets table [22:20] along with an autoincrementing / serial identifier for the changeset that Redmine uses [22:20] Or rather that I assume it uses. [22:21] also it has a "changes" table that has id, changeset_id, action, path, from_path, from_revision, revision, branch [22:23] hmmm [22:23] changeset_id refers to changeset table? [22:23] from_path and path are used for moves? [22:23] revision is just to see what the previous revision was [22:24] branch is a string or a foregign key to something [22:24] sorry for not checking this myself but I'm looking at other parts [22:24] branch is probably a string and empty for vcses that dont expose branches [22:25] those tables are populated via fetch_changesets i think [22:26] oh! [22:27] maybe that column can be select distinct for a repo to get a branch list. thatd be much faster than calling bazaar at page load time. [22:27] rather bzrlib [22:28] then when script/runner is called to update changesets at post-commit time, the work is all done then [22:29] mbt: yeah that would work [22:29] smart [22:29] then when browsing in redmine the only thing that has to be done is get the revid > revno map [22:29] for the branch [22:29] so if we want to cache that too we can keep it local [22:30] hmm [22:30] no wait, what about actual files [22:30] we don't store that ;-) [22:30] path/size [22:30] well [22:31] the only thing that has to be done at runtime is when entries() is called in the bazaar scm adapter class, it runs something like I pastebin'd. [22:31] but more efficient even then that, because entries only needs for the current dir [22:32] it'll get called again and again as the ajax interface updates, if i understand how it works correctly [22:34] yes, entries gets the directory listing [22:35] so in git's case for the master branch it calls shellout with "git --git-dir /path ls-tree -l 'master:'" [22:38] if a revision ID is passed as the identifier, though we still have the problem of which branch. We can confirm the revision ID presence in the repo, but we then have to search the branches to do anything with that revision ID [22:38] jml: https://code.launchpad.net/~spiv/bzr/concurrent-pack-race-701940-2.2/+merge/46847 is on its way to PQM [22:39] Or maybe not. [22:40] Nevermind, all that comes from the repo [22:40] spiv: Awesome. [22:41] mbt: I'll try to apply some of that, I'll write a small helper that can talk bzrlib and ruby [22:41] a standalone branch can be opened with bzrlib.repository.Repository.open() [22:41] but a branch in a shared-repo cannot [22:42] hmm, why not, what happens? [22:42] bzrlib.errors.NoRepositoryPresent is thrown [22:42] but that's ok [22:42] what do you open exactly? [22:42] because when you open a branch its repo is opened for you and accessible via .repository [22:43] So, the python code that gets the entries can always open the URL given by redmine as a repository [22:44] because the URL that the user points at in the SCM configuration will always contain a repo, but does not necessarily have to contain a branch [22:44] hmm [22:44] right [22:44] so we allways open the repostitory and work from that [22:44] jam: http://bazaar.launchpad.net/~jelmer/bzr/versionedfilestore-noweave [22:44] grr [22:44] jam: deb http://ppa.launchpad.net/gwibber-bugs/unstable/ubuntu natty main [22:44] you'd probably want maverick [22:44] zyga, right, open the repo, get the revision tree and walk it [22:45] is that right? we never have to open the branch except as part of the post-commit? [22:46] I'm not absolutely sure, I think we should find the branches inside the repo to see branch history in any way [22:47] mbt, how do you find branches by walking revision tree alone? [22:47] Let's see. I branch from url://path/to/trunk, I commit a few times, I push back to url://path/to/trunk. The post-commit hook gets called on the client, but could be nothing there, and then on the server (I think). the hook tells RM that there are new revisions available. [22:47] RM opens the branch, gets the new revision IDs and gets their changeset from the shared-repo [22:48] mbt: post commit hook to populate redmine db? [22:48] So all RM needs the branch for is to get the commits in chronological order [22:48] mbt: that requires your branch to live on the same system which might not work, how would this work in on-demand scanner scenario [22:49] mbt: you have to scan the repo, possibly remotely [22:49] mbt: you cannot avoid walking each branch [22:50] what requires it to live on the same system? [22:50] and also need the branch for revid->revno mapping [22:50] grr [22:50] mbt: the post commit hook? how would you set it to work remotely [22:51] that won't work if the branch is not known [22:51] mbt: let's slow down [22:51] zyga, you'd call wget or curl or some other process to alert the server to run script/runner [22:51] mbt: let's try to get current stuff better first [22:51] zyga, a detail that currently doesn't matter [22:51] zyga, we still have the problem of not knowing what branch to scan [22:51] mbt: uh, that's ugly, I'd prefer something that would also work when the code is hosted on something dumb or something like lp.net where you cannot get triggers [22:52] zyga, you can opt to do it at runtime too [22:52] mbt: what about this idea: we scan _all_ branches and populate the branch with the repo-relative path to the branch [22:52] zyga, and redmine *will* update changesets at runtime if it finds a newer revision when browsing than the one it knows about [22:52] *than the latest one it knows about [22:53] huh? [22:53] do you mean the on-demant load thing that redmine does [22:54] the thing that pokes the repo whenenever you look at the repository part [22:54] let's slow down [22:54] can we turn the problem arouund [22:54] zyga, yes, it will fetch changesets as a result of a Web browsing request if they're out of date. that can take a long time, so RM provides a script hook to update them without having to web-browse to the repository. [22:54] what can we do correctly/fast/easily [22:54] and how to make redmine like it [22:54] mbt: right, you can explicitly disable that [22:55] zyga, We're still trying to figure that out. We haven't really left the first step, which is when entries(path, id) is called with a revision id or number, we haven't a way to tell which branch is the context! [22:55] ergo id->revno mapping cannot be done, because it could be different for every branch [22:56] we could scan to see which branches contain the revid, and if only 1 branch does we can pick that branch [22:56] mbt: I would prefer to look at step zero - work with bzrlib and redmine efficiently [22:56] but if more than one branch contains the revid, we have to guess [22:56] mbt: then solve step 0.5, adapt existing code [22:56] mbt: then step 1, fix repo support [22:57] so just have something that guesses at first? [22:57] cuz it looks like to do better than that, we have to dig a lot deeper into redmine [22:57] no, currently we don't have this problem [22:57] and once we have something better than what's currently inside we can ask people around [22:57] and the bzr sprint will finish so everyone will be back here [22:58] glyph: So, the short version is that rebase sucks and we should fix it. [22:58] I don't follow [22:58] mbt: current redmine does _not_ support repositories [22:58] correct [22:58] mbt: we can just improve the implementation to be faster [22:58] mbt: and _then_ start to solve the problem [22:58] glyph: I have some ideas [22:59] zyga, the current implementation is fast enough given that it calls bzr for very small things (aside from initial loading of the changesets database) [23:00] though I think we're talking about two slightly different things [23:00] right but we both agree that to improve it we need to talk with bzrlib [23:00] jelmer: please have ideas faster :) [23:00] so rewriting the current code is a prerequisite [23:00] I was working from the perspective of keeping the current bazaar-standalone-branch model & adapter [23:00] jelmer: looks like for this branch I'm going to be using 'bzr export' and some other nastiness to get something I can commit to svn. [23:00] and writing a new model & adapter that handles the repositories [23:01] hmm [23:01] because there are enough things different about the two that I'm not sure we can (easily) support both use cases in a single class [23:01] I did not consider this [23:01] I think it could be handled by single code [23:01] but that's not really relevant, it can be done both ways [23:02] zyga, I made the assumption that if one class can do both then it'd be easy enough to drop the new one over-top the old one [23:02] brb real fast, coffee [23:02] k [23:04] back [23:06] I have http://mike.trausch.us/wiki/RM-SCM-module which I wrote (just copy-pasted it into my public wiki from my private one) while trying to figure out what's what. It probably isn't 100% accurate yet [23:07] let me see [23:07] darn running redmine on arm is slow ;] [23:07] glyph: spiv and I are brainstorming :-) [23:08] zyga, ARM, eh? Only ARM thing I have in the house are the cell phones lol [23:08] :-) [23:09] mbt: I'm sure that will change in few years [23:09] zyga, probably not, don't plan on replacing any computers for the next 4 or so years, all of 'em are pretty new [23:10] mbt: well you will get a new one one day [23:10] That and I like AMD :) [23:12] anyway, i suppose thats why i am looking at this from the bottom up; wasnt thinking about moding the current module, but replacing it completely. [23:14] its starting to look like we should use the svn model though instead of the git one. [23:15] the svn model is broken (admittedly by necessity on svn's part), but the git model wont apparently work without improvements to redmine core and patches to all other scm modules [23:16] mbt: I don't have an opinion on that, I'd need to read the svn module first [23:16] mbt: I'll start working on the python adapter [23:16] at least with the svn model the branch is known as it is part of the path [23:16] and see what we can do later [23:16] the svn module is the one used on remine.org [23:17] no pull down menu for the branches and no branches function in the adapter [23:17] heh [23:18] it's part of the git/svn philosophy [23:18] in place ;-] [23:18] with the svn model, both repos and trees could be supported because the URL repo would be e.g., /home/mbt/Projects/redmine and the path passed to the SCM adapter would be relative from that [23:20] then you just try to open as a branch the URL + dirname(path) and go up in the directory tree until opening a branch works [23:20] mbt: you can use bzrlib.branch.Branch.open_containing to do just that [23:22] oh, well, then. [23:22] does that work with a branch w/o working trees? [23:24] 1 sec and I'll find out I guess [23:25] mbt: mmm, nope [23:25] mbt: but please check, I don't remember what failed for me, I did something similar lately [23:26] zyga, yes it does! [23:26] I do believe that might be the key. [23:26] At least to a first implementation. [23:26] Wonder if it works over the net [23:26] 1 sec [23:29] poolie: Hey! My machine died on Sunday/Monday and I've been playing catch-up since then, but the loggerhead work is at the top of my list now. [23:30] It does not; running "br = Branch.open_containing('lp:~mtrausch/+junk/redmine-bazaar-sr/app')" yields: bzrlib.errors.PermissionDenied: Permission denied: "Cannot create 'app'. Only Bazaar branches are allowed." [23:31] Which looks like it attempted to create the branch? [23:31] mbt: hmm, that's now how lp works [23:31] mbt: yes [23:31] Ah, not part of the call [23:31] mbt: AFAIR lp has some magic scheme [23:31] mbt: and you cannot create a repo on the far side [23:32] 1 sec will try on a network-local bzr+ssh branch [23:32] mbt: you can test this with bzr+ssh and some local server [23:32] It does work with bzr+ssh [23:32] mbt: lp has special meaning to pathnames [23:32] so with lp: an exception must be caught and one directory level should be removed to try again [23:33] until it works [23:33] but for everything else it looks like it can figure it out... maybe. will try sftp [23:33] Yep that works too [23:33] mbt: I don't think you need to do that for lp, there is no way to use lp with shared repos [23:34] mbt: it's a bit of a bug that lp returns a PermissionDenied rather than a NoSuchFile in that case [23:34] no but if you specify it as a branch [23:34] redmine can be setup to allow all URL schemes that bzr knows about, including a remote branch on lp [23:34] though I suppose that can also be excluded === Ursinha is now known as Ursinha-afk === Ursinha-afk is now known as Ursinha [23:35] So, if the SVN model is used that means that the ambiguities all disappear [23:36] Unless I am missing something, that would make it possible to support Bazaar shared repositories without having to extend the Redmine "framework" in any way. [23:37] While at the same time supporting branches. Because all that is needed is Branch.open_containing and the returned tuple has the Branch object and from that the Repository object can be reached [23:38] *supporting standalone branches [23:38] whoa [23:38] found a bug in bzr i think [23:39] http://pastebin.com/7WQdfz3t [23:41] mbt: that looks familiar, I think it may have been fixed since 2.2.1 [23:41] k [23:43] will check real quick [23:49] vila: on babune, the windows test are running with "-x TestBreakin". Is that permanent? [23:52] spiv, same crash using bzr from lp:bzr [23:53] mbt: ok, thanks for checking. File a bug (or me too an existing report if you find it's reported already...) [23:56] spiv, reported as bug 705189 [23:56] Launchpad bug 705189 in Bazaar "crash when "bzr ls" against a file in a branch w/o working tree" [Undecided,New] https://launchpad.net/bugs/705189 [23:57] mbt: apparently we'll need very recent bzr to work at all ;-) [23:57] zyga, it's not an issue when using open_containing [23:57] zyga, thankfully [23:58] the script that I pastebin'd earlier works on that same branch so we're good