/srv/irclogs.ubuntu.com/2008/05/27/#bzr.txt

antoranzhttp://www.pastebin.ca/103050300:00
spivAh, you need "from bzrlib.workingtree import WorkingTree"00:01
antoranzoh, ok00:02
antoranzlet me try00:02
antoranzok.... I got another error mesage... let's see where I get to. :-)00:03
antoranzOK.... I got the working tree.... how could I ask for added files?00:12
jmlis there a "getting started with Bazaar" doc that I'm missing?00:13
antoranzin bazaar's docs you can see the five minute intro doc... which is a nice crash course00:13
spivantoranz: maybe take a look at how bzrlib.status.show_tree_status is implemented, or how bzrlib.builtins.cmd_added is implemented.00:14
antoranzwell.... that's quite reasonable.. let me see the show_tree_status00:15
jmlis it possible to set the public_branch on a branch using the CLI?00:54
mwhudsonjml: the help for bzr send claims that it will remember the public branch, i think00:55
jmlmwhudson: it appears that my trunk has no public branch set.00:55
mwhudsonjml: bzr send ../trunk http://whatever --remember00:56
mwhudsonand then it will00:56
mwhudsonif the docs are correct anyway :)00:56
jmlmwhudson: so the public_branch arg to 'send' is the public_branch of the submit branch?00:56
jmlnot the public branch of the branch being sent?00:56
mwhudsonjml: oh i see00:58
mwhudsoni guess you can run send -o/dev/null in  the trunk branch to set it00:58
mwhudsonor maybe there's some more sensible way00:58
antoranzgot it!01:06
* jml does the up-thread; commit dance01:06
antoranzbut I worry about the way the working tree tells me about changed files01:06
jmlantoranz: how so?01:07
antoranzLet me paste the code in the pastebin so you can see.01:07
antoranzhttp://www.pastebin.ca/103055001:10
antoranzI get the filename from an array01:11
antoranzI wonder if that structure changes often. I think an object would be more "elegant"01:12
antoranzjml: see what I mean?01:13
jmlantoranz: kind of.01:13
jmlantoranz: the return type doesn't change very often at all (grep NEWS for iter_changes)01:14
spivantoranz: unfortunately, objects are considerably slower than tuples :(01:15
jmlright.01:15
antoranzwell... speed is a nice explanaition for it... the code is working though. :-)01:15
jmlall things being equal, I'd use an object instead of a tuple. However, given that this is performance critical code, there'd need to be some obvious benefit for using an object.01:15
antoranzhow's the code? A1? :-D01:16
antoranzconsidering it's my first python program01:16
Odd_BlokeOTOH, in Python 2.5 (I think), you can 'name' the fields of a tuple.  So eventually, perhaps... :p01:16
jmlantoranz: it's ok.01:17
antoranzok01:17
antoranzwill ./ work in windows?01:17
jmlantoranz: if you bump into a really big file, you'll have memory problems.01:17
antoranzor is there a straight way to get the pwd?01:17
jmlantoranz: os.getcwd()01:18
antoranzwell.... file are not so big right now.... so I guess it's ok for the foreseeable future01:18
jmlantoranz: also, you want to make sure you don't run convert2unix on binary files.01:18
antoranzif file start to grow, II'll change it to process line by line instead of loading the whole file into memory01:18
jmlantoranz: there's no need for the exit(0) at the end also,01:18
antoranzis there a piece of information that tells me if the file is binary?01:19
spivOdd_Bloke: 2.6 has collections.namedtuple01:19
antoranzI guess "kind".... but what are the possible values?01:21
jmlantoranz: not that I know of. (but I'm pretty ignorant in this area)01:21
spivantoranz: "kind" is for distinguishing files/directories/symlinks etc01:21
antoranzalso, I shouldn't work on directories.01:22
antoranzit's cambio[6][1]01:22
spivThere's nothing in bzr at the moment that tracks if a file is meant to be "text" vs. "binary".  igc is working on adding a feature like that, though.01:22
antoranzok.... I'm working on text file for now... so I guess that's not a problem actually.01:23
Odd_Blokespiv: Ah, perhaps that's what I meant.01:25
Odd_BlokeI just remember being given some code which used them and it not working for me.01:25
Odd_BlokeWhich suggests that it wouldn't work in 2.5, now I reflect on it.01:25
spivOdd_Bloke: :)01:25
antoranzhow do you say "!=" in python?01:26
spivJust like that.01:27
antoranzok... the problem was that I'm forgetting about using ":" at the end of the conditional.01:28
jmlantoranz: oh, that reminds me: use 'fileName is None' rather than 'fileName == None'01:31
jmlfor reasons that have long since escaped my mind.01:31
antoranzok01:33
spivFaster, more precise, less punctuation.01:33
jmlspiv: thanks.01:34
igcpoolie: any thoughts on whether filtering ought to be applied to .bzr* files?01:34
spiv(In particular, it's immune to a weird __eq__ or __cmp__ that might claim that a non-None object is equal to None)01:34
igcabentley asked in his review whether it ought to be skipped for .bzrignore01:35
igcI wonder whether Windows users would expect .bzrignore to have crlf or not01:35
TheSheepigc: make a compromise, use crlf every second line ;)01:40
mwhudsonor go for the annoy everyone approach, and just use \r :)01:41
igcTheSheep, mwhudson: interesting ideas. That ought to maximise the confusion. Maybe we could combine those ideas ...01:42
igcand have lf, crlf, cr alternating01:42
igcor make it random at the end of each line - better still  :-)01:43
antoranzguys, thanks 4 ur kind help01:43
antoranzC ya later!01:44
poolieigc, i would say it probably should be applied for consistency; if the user configures it to be broken it's their responsibility01:45
poolieuh, we should probably accept either separator in those files01:45
pooliespiv, just trying to wrap up here then will leave01:45
* beuno waves01:47
beunohi everyone01:47
mwhudsonhi beuno01:48
beunoLP code scanner still seems lagged01:49
pooliehello beuno01:49
pooliehello mwhudson01:49
beunoI wonder how big the branches that where added really are...01:49
beunohello poolie01:50
beunoso...  mwhudson...  I've been thinking performance all day01:51
beunoaside from switching the templating engine, I've been thinking that, even if we improve the cost of rendering, it will still be rather expensive for some operations01:52
beunoso it got me thinking how we can avoid that cost01:52
beunoanyway, what do you think of adding a json generator, that we can can ask for via ajax, and refresh the screen's information with that?01:54
beunowe would only render the HTML once, and the client will render from then on01:54
beunoit can be added to the current code base, and used optionally  (we would still be able to render all pages)01:55
beunoand cache the jsons on the client side, so once he retrieves a set of information, we can avoid as much as possible to hit the server again01:56
jmlbeuno: do you know that roundtrips are the main bottleneck?01:57
beunoand, if performance still is a bottle-neck for repeated request for the same screen, we can still implement a server side cache01:57
beunojml, I have no information at all of what the real bottlenecks are, just guesses from playing around with the code01:58
beunoit's almost as expensive to render an annotated file than it is to annotate it with bzr01:58
beunothat seems like something we need to solve01:58
beuno(no information on LP, that is)01:59
jmlbeuno: sure. That said, it's worth spending some time profiling to be certain that you are solving the right problem.01:59
beunojml, right, I have been profiling the code, and rendering *is* the main problem curently01:59
beunojust not what specifically is bashing the LP so hard02:00
jmlok.02:00
beunoso, while we may find a better templating engine, it will still be a cost we will pay02:01
jml*nod*02:01
beunoand we can generate json files without rendering them through it, and serve them (maybe even avoiding turbogears, and get one step closer to get rid of so many dependencies)02:02
mwhudsonbeuno: it's certainly an interesting idea :)02:07
beunomwhudson, :)   so, my next still is profiling with different templating engines, unless you have a different request02:09
mwhudsonbeuno: i think that's sensible yes02:10
jmlwhat should I do to work around this? bzr: ERROR: Repository KnitPackRepository('file:///home/jml/Code/gtimelog/.bzr/repository/') is not compatible with repository SvnRepository('http://mg.pov.lt/gtimelog/svn')02:24
jmloh, I see, there's a Subversion repo format now02:25
jmlhas that always been there?02:26
Pengjml: bzr-svn?02:28
jmlPeng: yes.02:28
Pengjml: I dunno. It's been there as long as I can remember, but that's only a few months.02:28
rockstarThe Bazaar slogan should be "Make like a tree and branch"02:34
spivjml: probably "bzr upgrade --rich-root-pack"02:35
Pengrockstar: Heh.02:40
Pengrockstar: I'm not sure that's a very good slogan, but I definitely like it. :)02:41
rockstarPeng, what's so bad about it?  :)02:42
PengWait a minute. Slogans don't need to be a pile of information. Never mind about not thinking it's a good slogan. :)02:45
PengBut it could say more about bzr's focus.02:45
jmlthe error I get now is: http://pastebin.ubuntu.com/14954/02:46
jmlSubversionException: ("REPORT request failed on '/gtimelog/svn/!svn/vcc/default'", 0)02:47
spivjml: random guess: retry02:49
jmlspiv: it's happened 3/3 times02:51
spivjml: bzr -Dtransport -Dhttp perhaps.02:53
spivjml: but basically I think you're in bug report territory.02:53
jmlok.02:53
jmlI'm using whatever bzr-svn that 'bzr branch lp:bzr-svn' gives me. Is there another branch I should be using? (maybe the one called 'trunk'?)02:54
Pengjml: Try using a release. (bzr revert -r tag:bzr-svn-0.4.10)02:55
beunoabentley, I sent a merge request which was rather large (1.7mb), and it seems BB hasn't picked it up yet.  https://lists.ubuntu.com/archives/bazaar/2008q2/042455.html02:58
spivjml: I strongly recommend sticking to released versions, or at least the "stable" branch.02:59
jmlspiv: it's not clear what the "stable" branch is, looking at lp.net/bzr-svn03:00
PengThere isn't a stable branch, really.03:01
jelmer0.4 is the stable branch03:01
jelmer(most of the time)03:01
PengYeah, but wasn't it unstable from 0.4.9 to 0.4.10? Like, for 6 weeks?03:02
jelmeryeah, it tends to regress from time to time03:02
PengI run bzr.dev, but bzr-svn 0.4.10.03:02
jelmerat the moment, the 0.4 branch passes all tests though so it should be considered stable03:03
jmljelmer: does http://pastebin.ubuntu.com/14954/03:10
jelmerjml: hmm, that is a regression03:12
jelmerI have a local clone of gtimelog here made with an earlier release of bzr-svn03:13
jelmerunfortunately the testsuite doesn't catch this as we don't test svn over http (because it requires setting up apache)03:13
jelmerthat shouldn't matter as the subversion libraries promise one API for all three protocols, but there are subtle differences03:14
jelmerjml: please file a bug03:14
jmljelmer: will do.03:14
=== mwhudson__ is now known as mwhudson
chmacIs there a trac equivalent for bazaar? I found the bzr-trac plugin, but I wondered if there was something different03:31
pooliechmac: there's also 'cart'03:55
chmacpoolie: Sweet, thanks, I'll check it out03:56
chmacpoolie: Any idea how far along it is?03:57
uniscrip1given a .bzr repository, is it possible to find out what branches are in it?03:59
Penguniscrip1: You can use the heads plugin to see the current heads.04:02
uniscrip1Thanks for that. I notice that if I delete subdir branches from a repo they become dead04:12
uniscrip1is there any way to revive them?04:12
Penguniscrip1: Find the revid, and bzr branch -r revid:...04:13
* igc lunch04:15
uniscrip1Peng: returns "ERROR: Not a branch"04:16
Penguniscrip1: You need to do it from a branch.04:16
uniscrip1and lists the path to where I want to put the new (old) branch under the repo04:16
uniscrip1I have a repo with a bunch of dead branches how do I revive one (get it out into a full branch)?04:17
uniscrip1if I have no branch how do I 'do it from a branch'?04:17
bob2cd /repo ; bzr branch -r revid:23890174kj234h1k2j34hk1l24h12kj4123l47897 /somewhere/to/put/it04:19
uniscrip1 bzr branch -r  revid:mhosken@sil-mh4-20080527025333-o3z49yp16xykkwg6 ../test_branch04:20
uniscrip1bzr: ERROR: Not a branch: "/home/mhosken/Work/dev/shorts/repos/repo_test/test_branch/".04:20
uniscrip1same if I change ../test_branch to fred04:20
uniscrip1or . fred04:20
uniscrip1bzr 1.3.1 btw04:21
bob2oops04:22
spivIdeally that should work.  Probably worth a bug report.  In the meantime, do it from any branch in the repo (even if you just create an empty one with "bzr init").04:23
uniscrip1OK. Thanks for that04:24
abentleybeuno: Appears to have been caught by my spam filter.  I don't get much legitimate email in spanish.04:45
beunoabentley, lol, understandable04:52
abentleybeuno: I should have it processed in the next few hours04:52
beunoabentley, thanks04:53
* igc pick up kids05:52
mwhudsonbeuno: so i checked out the latest version of your branch, it looks fine05:55
mwhudsonwell, apart from using log._strip_NULL_ghosts05:56
Rhamphoryncus"bzr check" has been stuck in "checking versionedfile" for several hours.  Should I leave it for a couple days? ;)07:21
jameshRhamphoryncus: how big a branch is it, and how are you accessing it?07:26
Rhamphoryncusprevious step said 40000.  Fairly large project07:27
Rhamphoryncuslocal files07:28
Rhamphoryncusoh, current step says 0/1072707:32
* igc dinner08:35
=== yacc_ is now known as yacc
* gour likes --lightweight checkouts with treeless repo and using 'switch' to change working branches10:32
Jc2kgour: is there a good description of that online somewhere?10:43
gourJc2k: see paragraph in http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html#checkouts section10:43
Jc2kgour: can this work like Gits branches? or is there still a directory for each branch?10:45
gourJc2k: i created (for a test) shared repo (--no-trees), then one branch within it and then did some 'hacking' in another dir after checking out. created another 'feature' branch and then was able to 'switch' between the two.10:45
gourJc2k: no idea. git is not on my todo list...i'm coming from darcs10:46
luksJc2k: still one directory per branch, but you normally don't see those directories10:46
gourJc2k: there is only one 'working' directory and bzr switch populates it with appropriate working tree10:46
Jc2kbackground here is that i'm wanting to extend the Bazaar/GNOME documentation, and Git people cite this as something important to them10:47
Jc2kluks: where would the directories be?10:47
Jc2krepo/branch1, repo/branch2, repo/working_copy ?10:48
gourrepo/working can be anywhere10:48
=== weigon_ is now known as weigon
luksJc2k: anywhere under the shared repository10:49
luksJc2k: you can put them to a dotted directory and never see them10:49
Jc2kso i could:10:50
Jc2kbzr init-repo .10:50
Jc2kbzr branch some/branch .10:51
Jc2kwhoops10:51
Jc2ki meant10:51
Jc2kbzr branch some/branch .branches/trunk10:51
Jc2kbzr co --lightweight-command-foo .branches/trunk .10:51
Jc2kso the repo and working copy are in same folder10:51
luksyou can do that, but it's probably not the best layout10:52
luksbetter to have the repo with branches outside of the working copy10:52
gourJc2k: i'd keep working dir out of shared repo10:52
Jc2ki agree10:52
Jc2kthe git people likely won't buy it, though :)10:53
gourJc2k: you buy it ;)10:53
Jc2kit would be nice for jhbuild integration their way, though10:54
gourany news about emacs' adoption of bzr?10:55
trepcaits integrated into it already ?11:01
trepcaat least i can use it easily11:01
trepcawell, except for diffs11:02
jmlgour: nothing yet. I think they are waiting on savannah and a couple of specific performance improvements.11:02
gourjml: let's hope it will happen soon11:03
jmltrepca: I use dvc in emacs with bzr and use it to get diffs all the time.11:03
trepcaoh!11:05
trepcahow did you install it11:05
trepcai use aquamacs11:06
trepcadidn't manage to get it working11:06
jmltrepca: I just dropped it into my load-path11:06
trepcadamn11:07
jml(load-file "/home/jml/Code/dvc/++build/dvc-load.el")11:07
jmltrepca: I just have that in my .emacs11:07
jmltrepca: and followed whatever build instructions were in the tarball.11:07
mwhudsonis aquamacs any good?11:08
mwhudsoni've always been quite suspicious of it on principle11:08
trepcahm, there is not dvc-load in my tarball11:09
trepcaaquamacs works great for me11:09
trepcajml: btw, where did you get the tarball ... seemed to me that you can only checkout the source form the DVC site11:11
gourhmm, i put: checkout=checkout --lightweight in ALIASES section of conf file. however, if i use bzr co it is not in effect although i might expect it to be?11:12
jmltrepca: by "tarball", I meant "checkout" it appears. "bzr branch http://bzr.xsteve.at/dvc/"11:12
trepcamhm11:14
jmltrepca: I just pulled the latest -- './configure; make' builds a dvc-load.el in the top-level directory for me11:16
trepcawoohoo! works!11:25
trepcathanks!11:25
trepcajml: how do you view the log with dvc ?11:43
jmltrepca: uhh, I don't generally.11:44
trepcaok11:44
james_whey jml11:45
jmljames_w: hi11:45
james_wdid you get back ok?11:45
jmljames_w: sorry I had to bolt before your set the other day11:45
james_wno problem.11:45
jmljames_w: yeah, I got back fine. Had to fight a couple of bears to get past the checkin desk, but that's no big deal11:46
trepcajml: what about creating diffs with another revision...not head11:54
jmltrepca: I use the command line for that too :)11:54
jmltrepca: basically, both of those ops are outside my normal dev cycle.11:55
jmltrepca: so I don't mind switching out of emacs11:55
trepcaso what is the purpose of dvc then :) ?11:55
=== sabdf1 is now known as sabdfl
* gour is fetching emacs from bzr repo12:56
=== Pilky_ is now known as Pilky
awilkinsLast night I asked about the Python installers for bzr/win32 : since I had most of the dependencies anyway I built my own ; would they be wanted/trusted for the downloads page?13:36
james_wawilkins: I'm not sure, though I don't see why not.13:55
james_wperhaps mailing to the list first would be a good idea.13:55
lamalexHey guys, I'm trying to push to launchpad, but I keep getting a message about being unable to obtain a lock, and that it's help by me on "host vostok"14:02
lamalexhow can I get rid of that lock, and why did that happen14:02
bimberilamalex: bzr break-lock [LOCATION]14:08
lamalexmerci beaucoup14:16
lamalexis there a way to check if it's locked? I just tried to push again and it still said it was locked14:32
=== kiko-afk is now known as kiko
james_wlamalex: launchpad is a bit weird here14:44
james_wyou probably need to run the break-lock command a few times.14:44
james_wand use sftp:// rather than bzr+ssh:// as well I believe.14:45
* bimberi takes note - for next time :)14:47
lamalexweird14:47
lamalexI'll try that14:47
lamalexit's not even showing up as locked in bzr info14:47
lamalexso just s/bzr+ssh/sftp14:48
asabiliirc you need to run break-lock twice14:49
asabiland it doesn't matter if using sftp or bzr+ssh14:49
lamalexIs that a bug?14:52
asabildon't know14:53
lamalexsounds like it14:53
lamalexthere we go, it's pushing now. Thanks guys14:54
* lamalex wants to kill bzr15:02
lamalexIt's telling me the branches have diverged, and to merge, but when I do a merge, it says nothing to do15:02
KinnisonAre the two branches public, can we see?15:03
lamalexthe one branch is local on my hd15:04
lamalexdo you want the output of bzr info or somethign?15:04
KinnisonIt was more for me to try the pull/merge/diverge check15:05
luksare you sure you are merging from the same branch you are trying to push to?15:05
Kinnisoncan you please run 'bzr missing url-to-push-location' ?15:05
lamalexI fixed it, I don't know how this happened but it dropped /trunk off of the url15:05
lamalexpushed now :) thanks guys. I really love how helpful #bzr is, compared to many other freesoftware irc channels15:07
igcnight all15:36
=== kiko is now known as kiko-phone
=== kiko-phone is now known as kiko
visik7why I've to commit to use bzr upload -r <revnumber ?>16:08
visik7make no sens16:08
jelmervisik7, please file a bug16:09
visik7where ?16:09
jelmerhttps://launchpad.net/bzr-upload I think16:10
beunovisik7, well, there is a specific reason for that16:10
beunoah, well, no16:10
visik7why ?16:10
beunonot for -r16:10
beunoas jelmer says, file a bug, we'll get it fixed  :)16:10
beunomy mistake, misread too fast16:10
weigonjelmer: I have a small problem with pushing into a svn-tree (bzr-svn 0.4.10)16:12
weigonbzr: ERROR: Tags not supported by SvnBranch(...)16:12
weigon$ bzr info16:13
weigonStandalone tree (format: dirstate-with-subtree)16:13
jelmerweigon: bzr-svn doesn't support tags16:13
jelmer(yet)16:13
weigonthat's fine16:14
visik7lp: use a specific port ?16:14
weigonbut how can I move in from there ?16:14
weigonjelmer: looks like this happens at the end of the push16:15
jelmerweigon: you're trying to push a branch with tags into svn16:16
weigonyep, can I remove the tags somehow and get a successful push ?16:16
jelmerbzr tag --delete <name>16:19
visik7could you get http://bazaar.launchpad.net/~bzr-upload-devs/bzr-upload/ working ?16:21
visik7I can't16:21
weigonjelmer: thanks16:27
beunovisik7, loggerhead must be down again16:29
beunooh, it's not: http://bazaar.launchpad.net/~bzr-upload-devs/bzr-upload/trunk/files16:30
beunovisik7, what are you trying to find?16:30
visik7pull from http16:30
visik7'couse lp: is firewalled16:30
visik7here16:30
beunovisik7, try:  http://bazaar.launchpad.net/%7Ebzr-upload-devs/bzr-upload/trunk/16:33
visik7yes16:33
beunovisik7, did you get around to filing that bug?   I can look at it after work if you do  :)16:35
visik7yes patch added16:36
visik7check if it's correct16:36
weigonjelmer: $ for t in `bzr tags | awk '{print $1}'`; do bzr tag --delete $t; done does the trick16:36
jelmerweigon: :-)16:36
visik7beuno: is ok ?16:38
beunovisik7, you rock  :)16:39
visik7:)16:39
visik7it's damn easy with python and bzr16:39
visik7combo killer16:39
beunovisik7, do you think you can use bzr send, so you can get attribution for you work?16:39
visik7yes I maybe need to setup bzr for launchapd16:40
luksbeuno: commit has an --author option exactly for this :)16:42
visik7but anyway I'm behind a firewall that suck16:42
visik7and doesn't work for lp:16:42
beunoluks, ah, right, thanks16:43
beunovisik7, I'll use that and make it easier for you16:43
beunothanks a lot. You'll see it i trunk in a while16:43
visik7thanks16:45
visik7is there a way to commit into a branch only some files ?16:45
visik7yes16:45
visik7stupid me16:45
awilkinsjelmer: Where bzr-svn has changed it's mind about file-id values is there a way of upgrading a branch to the new file-id mapping?16:49
jelmerawilkins: bzr-svn shouldn't change its mind about file ids, that would be a critical bug16:49
Pilkyanybody know why when I commit a checkout to launchpad it doesn't update on the launchpad pages? (does update in loggerhead)16:49
beunoPilky, code scanning is behind16:50
beunoso it will take a while for LP to pick it up16:50
awilkinsjelmer: Well then, I think I may have hit a bug....16:50
awilkinsjelmer: What about revision-ids which is what aI actually meant ...16:50
jelmerawilkins: they shouldn't change either, unless you change the branching scheme or are branching from a different path16:51
LarstiQwhich happens rather frequently16:51
Pilkybeuno: well it's showing my last commit as revision 9, 3 days ago. I switched to using checkouts with revision 10 and it never updated, and I just commited revision 11 about 10 minutes ago16:51
awilkinsjelmer: Ah, I changed the branching scheme, because the structure of the repo was confusing the auto-scheme code16:51
Pilky(revision 10 was committed 2 days ago)16:51
awilkinsjelmer: Problem was that I had a vendor-branch folder, which itself was a container for a project/branch tree, as well as a root level project/branch hierarchy16:54
=== kiko is now known as kiko-fud
Chris12349will bzr let me replicate data between two bazaar servers?17:00
PengChris12349: Well, that's what "push" and "pull" are for, but they only operate on single branches.17:01
Chris12349Peng: gotcha, thanks17:01
beunoPilky, it will get fixed, don't worrk17:37
beuno*worry17:37
=== mw is now known as mw|food
=== kiko-fud is now known as kiko
=== mw|food is now known as mw
visik7beuno: good modification to my patch I would suggest it to you20:22
beunovisik7, you're fast  :)20:23
beunoI thought it would be clearer20:23
visik7good good20:23
beunoI hope I got your name right, it isn't very clear in LP20:24
visik7CamelCase20:24
visik7:)20:24
beunoyes, I guessed as much, but I wasn't sure if it was FirstnameLastname20:25
beunoor the other way around20:25
visik7the other :P my fault20:25
beunoaaah, I suspected20:25
beunothanks for the bug report/fix, btw20:26
visik7you know I've never commited a bugreport/fix but with LP and python and bzr it's dead easy20:27
visik7great tools20:27
bratscheIs there a way to find out the nearest ancestor branch for a branch you're working in?21:25
bratscheLike, I have branch A and then I create branch B from A.  And later on inside B I want to do "bzr diff -r ancestor:A"21:27
bratscheI do this type of thing -all- the time, and I don't want to have to type in the URL for A.  Is there an obvious way to get that URL from bzr?21:28
radixI do it all the time too, where "A" is something like "../otherbranch"21:29
radixso it doesn't seem so bad21:29
bratscheMine is remote, and at the moment I just have a bash script setup to do "bdiff --repo-A" or something to tell it which repo to diff against.21:32
bratscheBut I'd rather not even have to do that much by hand.. if I could get bzr to return the nearest ancestor branch then the script could figure out where to diff against for me.21:33
radixbratsche: "bzr info" shows the parent branch, btw21:33
radixI don't know how to get that out in a simple way to include on the command line21:33
radixor to include in `` or whatever21:33
Jc2kbratsche: bzr help revisionspec ?21:33
bratscheradix: It doesn't always show it.21:33
bratscheOh, I want submit:21:34
bratscheI didn't know about that.  Thanks.21:34
bratscheOh, it doesn't seem to always work though.21:35
Jc2knp21:35
Jc2kyou probably need to pull from the remote branch once21:35
Jc2kso that it stores the parent branch21:35
Jc2ki dont know why parent isnt set when you branch, tho21:35
bratschebzr: ERROR: No submit branch available for branch "/home/bratsche/bzr/my-branch"21:35
Jc2kright. it says it falls back to parent branch. so is there a parent branch in bzr info?21:36
bratscheI'll play with this some more later and see if I can figure out why this is happening.21:36
bratscheNo.21:36
Jc2kif not, you can set it with bzr pull --remember <remote-location>21:36
bratscherepository checkout root: .21:36
bratschecheckout of branch: sftp://path/to/branch/21:37
bratscheshared repository: /home/bratsche/path/to/repo21:37
Jc2kgood luck21:37
bratscheOkay thanks.21:37
awilkinsjel21:50
awilkinsmer21:50
awilkinsDang, he isn't here21:51
halsteadIs there an easy way to export a read-only svn repository from a bzr branch?21:51
awilkinshalstead: Not as far as I know21:53
awilkinshalstead: You could try configuring a read-only empty repo and pushing branches to it, but I don't know how well that works.21:54
* awilkins tries pushing to an empty SVN repo21:57
halsteadIf I try to push to an empty repo I'm warned, ERROR: These branches have diverged.  Try using "merge" and then "push"21:57
awilkinsHmmph, my error is more impressive than yours "tuple index out of range"21:58
* awilkins updates to a more recent build of bzr-svn21:58
Jc2kare you using bzr push or bzr svn-push?22:08
awilkinshas I am running into different but no less annoying problems on a 1.5 / HEAD of 0.4 combo22:08
halsteadI was using bzr push. I will try the other.22:08
* Jc2k isn't sure when svn-push should be used tbh22:10
awilkinsHmm. Trying to branch it in was less than successful ; I seem to have ended up with an SVN repo containing raw bits of bzr branch.22:10
halsteadHmm..22:10
halsteadIt asks me to merge them first but then refuses to merge because they lack a common ancestor.22:11
awilkinshalstead: I managed to push to an empty branch but ran into an error22:38
halsteadawilkins, How did you?22:38
awilkinssvn-push22:38
awilkinsTarget URI was a subfolder of an empty project-level folder22:39
awilkinsIt's running into an assertion when it tries to add a file.22:40
beunomwhudson, ping22:41
PengIs it just me, or is making 165 360-byte range requests for signatures.knit when making a branch kind of wasteful?22:41
mwhudsonbeuno: hi there22:41
beunomwhudson, you wake up pretty early, don't you?22:41
halsteadThank you, I didn't try an empty sub directory. That works great for me. :)22:41
awilkinsPeng: How big is signatures.knit? (small, I'll wager)22:42
mwhudsonbeuno: it's 09:41 here22:42
mwhudsonbeuno: so not really...22:42
Pengawilkins: Almost 60 KB.22:42
beunomwhudson, oh?  I thought you where in australia, but it seems you're not  :)22:42
awilkinsPeng: Ooooh, scary. Maybe they should just download all of it :-)22:42
Peng...It would've used slightly less bandwidth if it downloaded the whole thing once.22:43
mwhudsonbeuno: no, new zealand22:43
PengOr, I could upgrade to packs. ;)22:43
mwhudsonPeng: which bzr version?22:43
beunomwhudson, I'll have to add new zealand to my gnome-clock too then  :p22:43
Pengmwhudson: Launchpad, so 1.3.22:43
beunomwhudson, did you see the loggerhead file-view yet?22:43
mwhudsoni have this recollection that some bugs in this area have been fixed22:44
PengYeah.22:44
mwhudsonPeng: but this is a client thing22:44
Pengmwhudson: Launchpad was mirroring my branch.22:44
mwhudsonPeng: oooh22:44
mwhudsonyeah, we'll be upgrading soon...22:44
mwhudsonbeuno: yes!22:44
mwhudsonbeuno: basically fine, apart from:22:45
mwhudson1) the drwxrwxrwx nonsense should be replaced with an icon for file, executable file, directory or symlink22:45
mwhudson2) why have the link icons after the file name and revision number in the table?22:46
mwhudson3) what does the clipboard icon do?22:46
PengWhat are .bzr/branch/pull and x-pull?22:46
PengBwahaha.22:48
beunomwhudson, 1) I agree, although out of the initial scope (it requieres programming). I can probably add that after we finish this.22:48
PengYeah, there have been major improvements since then. Now it downloads signatures.kndx again before downloading each range of signatures.knit!22:48
beuno2) We're trying to be consistant with what is a link and what's not. So we added an icon to represent it. We can remove it if it's confusing rather than helpful22:49
PengActually, I don't know WTF it's doing. But it downloads revisions.kndx and signatures.kndx a hell of a lot.22:49
beunomwhudson, 3) First attempt at an icon for "log". We also added a "Help" tab, which will explain all icons22:49
mwhudsontooltips for the icons would be good i guess22:50
beunoyeah, I'll make sure to make a note of that for the HTML/CSS stage22:50
mwhudsoni guess for 2) i'd like to play with it before thinking to hard22:50
mwhudsonit's not a difficult thing to change is it?22:51
beunono, it's not. I can do it if you think it really makes a difference22:52
mwhudsonlet's leave it for now22:52
beunowe can (and will) always change it later on22:52
beunoas for the _strip_NULL_ghosts, which I can clearly see there is a comment saying "don't use it", it's a bit of a problem, as if I don't loggerhead blows up. I may have to take a different approach22:54
mwhudsonyeah, would be good to get some proper advice here22:56
mwhudsoni think loggerhead need it for the same reason log needs it though: to give stuff to merge_sort22:56
beunoyeap yeap, I'll send a mail to the list22:57
beunowe may have to change that whole block of code, but it seemed like an overkill at the time22:58
mwhudsonyeah22:58
libwilliamI am sure every time I log into this channel everyone goes "sighhh".... I am trying to use the  Inventory.entries() method to get a list of the versioned files. The API's description is "Return list of (path, ie) for all entries except the root. "... I understand how to use the C/Python API so I don't need any help on using it, but I need help with is what type of data the returned list contains.22:59
libwilliamIt says it contains (path,ie) but I don't know if it those are elements are a set, tuple, list, etc22:59
mwhudsoni did a little thinking about how you could do loggerhead without any ahead of time caching22:59
mwhudsoni think the graph api is getting mostly there22:59
=== mark3 is now known as markh
james_wlibwilliam: path is a string23:00
mwhudsonthough i don't really see how you can do "page 102 of 300" of the changelog view efficiently without preserving some state23:00
mwhudsonlibwilliam: why not try it interactively?23:00
james_wlibwilliam: ie is an InventoryEntry object23:00
beunomwhudson, yeah, I have a few ideas floating around in my head too. I keep thinking the sqlite cache is evil23:01
libwilliamI figured it was a string, the part I am unsure on is it is returning a list of those two objects stuck together. What is the type that keeps the path and ie together?23:01
mwhudsonbeuno: eh, i don't think that's particularly relevant here?23:02
libwilliamlike a list of sets, or list of tuples, I am very unfamiliar with python23:02
mwhudsonphone, brb23:02
james_wlibwilliam: it's a tuple23:02
libwilliamjames_w: thank you!23:03
beunomwhudson, well, yes and no. We're already caching with sqlite, and that *does* give as an overhead I think we can either, get rid of, or replace with a much better one23:03
mwhudsonbeuno: but the code we're talking about replacing is all about the relationship between revisions23:03
mwhudsonwhat is cached is (mostly) data _about_ revisions23:03
mwhudson(i'm sure i said this yesterday :)23:04
beunoright, sorry for drifting away. I understood it, just mixed in something else I had in my head  :)23:04
mwhudson:)23:04
beunowell, the latest graph work jam introduce seems to make it cheaper to do what we do now, so yes. I'd have to compare them, and, on the other hand, if showing the parent is costing us a lot, we may want to show just the revision info first, and fetch the rest if it's requested23:06
beunoI've been thinking about that behaviour a lot23:06
jamI have been summoned?23:06
beunoah, jam, hello  :)23:06
beunowell, since your here...  want to talk graphs?23:07
awilkinshalstead: Yay, I think I may have fixed the bug I was hitting.23:07
halsteadawilkins, What was it?23:07
awilkinsPart of the code wasn't passing a baton (basically a null pointer but SVN code team calls them "batons" because they get passed a lot)23:08
beunomwhudson, if we could fetch through ajax the details of each revision, and not by default, browsing through logs will be much cheaper23:08
jambeuno: I would like nothing better, I guess23:08
mwhudsonin fact, if you cached the data in a way that was less of an abuse of an rdbms you could do all sorts of interesting things...23:08
awilkinshalstead: This is bzr 1.5 and the HEAD of the 0.4 branch of bzr-svn23:08
mwhudsonbeuno: perhaps23:08
jambeuno: the sqlite cache is evidence that we are doing something inefficiently23:08
jamcertainly we should be able to have primary access through bzr23:09
jam*should*23:09
mwhudsonbeuno: but... emacs is 80000 revisions of mainline history23:09
jamif we can't then we need to think about why not23:09
mwhudsonif you want to get revision 20000 ...23:09
mwhudsonjam: the big inefficiency is files changed between revisions in a large tree23:09
halsteadawilkins, I was having success with bzr 1.5 and bzr-svn 4.10.23:10
awilkinsI don't think 0.4.10 is too far from the HEAD.23:10
beunomwhudson, as I understand it, now, we're getting *all* revisions everytime we fire up loggerhead, so that clearly doesn't work well on deep-history repos23:10
jammwhudson: does 'item_keys_introduced_by' work for you?23:10
jamor is the problem about deleted files23:11
jamwhich iirc don't show up there23:11
beunoif you accessed bzr directly, we would just grab what we're going to show23:11
jamcertainly having to do a diff for 100 revisions to compute the changed files is a bit problematic23:11
jamBut I think that shows something up in bzr itself that we should be dealing with23:11
mwhudsonjam: maybe, i don't know what that is :)23:12
jammwhudson: Reopository.item_keys_introduced_by is what we use for fetch23:13
jamyou pass in a list of revision_ids23:13
jamand it returns (file_id, revision_id), or (inventory, revision_id) etc23:13
* mwhudson is on the phone23:13
jam:returns: An iterable producing tuples of (knit-kind, file-id,23:13
jam    versions).  knit-kind is one of 'file', 'inventory', 'signatures',23:13
jam    'revisions'.  file-id is None unless knit-kind is 'file'.23:13
jammwhudson: fine, run away :)23:13
beunolol23:14
jambeuno: what is the graph question23:14
beunojam, loggerhead was using deprecated methods, which I replaced for a new one23:14
beunolet me find the diff...23:14
jambeuno: get_revision_graph()?23:15
beunoright, loggerhead is currently unusable in LP23:15
beunoactually,  repository.get_graph(23:15
* mwhudson thinks perhaps multiple issues are getting confused here23:15
jambeuno: repository.get_graph() shouldn't be deprecated23:16
jamit is the recommended route23:16
jamyou just have to have a locked repo23:16
jammwhudson: you were saying that getting the list of 'modified' is expensive, and for fetch() we use that function23:16
jamit may not be sufficient for what you want for 'log'23:16
beunojam, no no, that's the one I replaced it with, sorry23:17
mwhudsonjam: hm yes that does look interesting23:17
beunoyes, it was using get_revision_graph23:17
jamyeah, I think in dev get_revision_graph() was completely nuked by lifeless23:17
jamit was "evil" but it had its uses23:17
jambeuno: if you *need* to grab the whole revision graph, that is something to re-evaluate if possible23:18
mwhudsonjam: right23:18
beunojam, yes, that's what we are looking into23:18
mwhudsoni think with the newer bzrlib apis there is less and less need to do whole history stuff when loggerhead starts up23:18
beunologgerhead reloads this everytime you start it23:18
jamUnfortunately, I haven't found a way to do dotted revnos without the whole graph :*23:18
jam:(23:18
mwhudsonyeah, i think we'll still need to cache revid_to_revno_map23:19
jambeuno: "on startup" or as part of looking at a branch, or what?23:19
beunojam, on startup currently23:19
jambeuno: so it does it for all branches under its control or what?23:19
mwhudsonyes23:19
jammwhudson: yeah... I can think of ways to partition it to be somewhat more efficient than having 80k rows for every branch23:19
beunoI then do  graph.iter_ancestry, but I'm forced to use _strip_NULL_ghosts, which has strong warnings not to use23:19
jambeuno: I don't know _strip_NULL_ghosts, but I can describe how iter_ancestry returns ghosts23:20
jam(entry, None) is a ghost23:20
mwhudsonDEB [20080528-10:20:25.575] loggerhead.bzr_dev: Reload branch history...23:20
mwhudson/home/mwh/src/loggerhead/trunk/loggerhead/history.py:205: DeprecationWarning: bzrlib.repofmt.pack_repo.KnitPackRepository.get_revision_graph was deprecated in version 1.4.23:20
mwhudson  self._revision_graph = branch.repository.get_revision_graph(self._last_revid)23:20
mwhudsonINF [20080528-10:20:31.185] loggerhead.bzr_dev: built revision graph cache: 5.3389949798583984 secs23:20
mwhudsonis what loggerhead/trunk says on startup, pointed at launchpad, currently23:21
mwhudsonjam: i don't think we really care about stripping ghosts, per se23:21
mwhudsonjam: we just want something we can safely feed to merge_sort23:22
jammwhudson: just that passing ghosts to merge_sort causes graph cycle failures, right?23:22
mwhudson(which explodes if you give it a graph containing referencing ghosts)23:22
mwhudsonyeah23:22
beunowell, we could probably skip them as we loop...23:22
mwhudson-containing23:22
jambeuno: _strip_NULL_parents should blow up for iter_ancestry23:23
jambecause the node returns None for parents23:23
mwhudsoni think for the short term maybe we should just duplicate _strip_NULL_ghosts in launchpad23:23
jamwhich isn't iterable23:23
beunojam, I apply it after, and it doesn't23:23
beunowell, wait23:23
jambeuno: there *is* _old_get_graph()23:23
beunoI do something else23:23
jamwhich has the same warnings (I'm sure from robert)23:24
beunoparent_map = dict(((key, value) for key, value in graph.iter_ancestry([self._last_revid]) if value is not None))23:24
beuno3121 def _old_get_graph(repository, revision_id):23:24
beuno3122     """DO NOT USE. That is all. I'm serious."""23:24
beuno:)23:24
jambeuno: you could do23:24
* mwhudson observes that the loggerhead instance running on launchpad is wedged yet again23:25
jamwell, you could reproduce the two fnuctions23:25
jamfunctions23:25
jambut you would essentially just be doing the same thing23:25
jamand just not re-using the bzr functions for it23:25
beunoyeah, I just thought that I was taking the wrong approach23:25
mwhudsonwell, we are23:25
jambeuno: if it makes you feel better 'bzr log' does exactly the same thing inline23:25
mwhudsonwhole-history operations are bad23:26
beunoheh, yes23:26
jampart of Robert's push to get rid of get_revision_graph23:26
mwhudsonunfortunately......23:26
jamwithout actually getting rid of it :)23:26
jammwhudson: james_w and I talked about possibly doing a lazy merge_sort that doesn't require whole history23:26
mwhudsonthe issues loggerhead has to solve are very similar to the issues faced by log23:26
jamthe difficulty is it still required an awful lot of history23:26
beunomwhudson, from your experience, do you think getting the basic data  we show currently on screen with the new set of APIs (not the expanded one) from bzr directly will decrease performance too much?23:27
jammwhudson, beuno: If all you want is the revisions that are merged (as sort of a big set) I can give that to you23:27
jamgraph.find_unique_ancestors(tip, [others])23:27
james_wI wrote one that is about the same speed for full history, and to produce the first revision on the bzr branch, but lightning quick on the emacs one due to the linear history.23:27
jamHowever, if you want to *number* them, it gets tricky23:28
PengWhy does BzrError inherit from StandardError?23:28
james_whowever, I didn't propose it as I wasn't confident that the behaviour would hold for all branches.23:28
jamjames_w:  did you get away from traversing the entire left-hand-history?23:28
jamor is that just the one that goes linearly backwards and ignores revnos23:28
james_wjam: yes, for linear history, but not if there was merges.23:28
jamPeng: what would you have it inherit from?23:28
mwhudsonbeuno: i think this is worth investigating23:29
jamjames_w: I'm saying you worked a bit on lazy dotted revnos, I know you also worked on 'git-log' or whatever it was called23:29
james_wjam: and yes, this was without generating revnos, which was the other reason for not proposing it.23:29
Pengjam: Not sure. Exception, I think.23:29
mwhudsonit will probably make things a bit slower23:29
jamPeng: is StandardError a problem for you somehow?23:29
mwhudsonas jam says, numbering the revisions will be the the hard part23:29
jamPeng: class StandardError(Exception)23:29
jam |  Base class for all standard Python exceptions that do not represent23:29
jam |  interpreter exiting.23:29
jamseems reasonable to me23:29
PengThe library reference says "The base class for all built-in exceptions except StopIteration, [etc.]".23:30
PengBzrError isn't built-in.23:30
jamPeng:  so why not class BaseException(__builtin__.object)23:31
jam |  Common base class for all exceptions23:31
jamAnyway, I don't know if poolie had a specific reason or not23:31
beunomwhudson, I'd like to try it. If it's a bit slower, but scales well, then a static html cache may be better than a sql one23:31
jamIt hasn't ever been an issue23:31
jambeuno: any problem with a simple squid proxy?23:31
mwhudsonbeuno: can we please stop talking about the sql cache?23:32
jamI suppose you could more easily determine when the cache was out of date23:32
mwhudsonbeuno: it's really a separate issue23:32
beunojam, well, first, that would be a LP-specific solution, I think. Second, we want to start using revnos as URLs, which will change the content for the same URL23:32
jambeuno: well, rarely for most projects, but sure23:33
jamI don't really know how you tell squid when things are / are not changed23:33
jamor HTTP proxies in general23:33
james_wjam: yeah, the dotted revno stuff stalled as my algorithm produced different results to the existing one, and I couldn't exactly justify it, and I couldn't see an easy way to produce the same results23:34
jamjames_w: I don't know if I mentioned it to you, but I had changed that specific case as well23:34
jamit is rather 'edge' and didn't seem like it had a valid counting either way23:34
jamThe bigger problem is that it wouldn't really help emacs23:34
james_wlet me dig up the mail to refresh.23:34
jamwith 80,000 linear revisions23:34
jammy bigger issue with your work is that it wasn't "resumable"23:35
james_wah, true.23:35
jamin that you could compute some numbers, but you couldn't then ask it to incrementally compute some more23:35
jamso something like 'log'23:35
jamwhich would like to find out some numbers, go back, find some more, etc.23:35
jambut if you can even get close to something that doesn't require searching all of history, that would be a start in the right direction23:36
beunomwhudson, don't we reload the whole history at startup to make sure our current sql cache is correct?  That said, I will leave it aside, sorry for the annoyance23:36
mwhudsonbeuno: no23:36
mwhudsonwell, there's the cron-like thing that fills the cache23:37
mwhudsonbut that's a bit different, and stupid23:37
beunomwhudson, ok, I thought it did, hence my insistance.  I'll drop it and go deeper in the code23:37
mwhudson(we should just fill the cache lazily like sensible people)23:37
mwhudsonor, probably, drop the revision cache23:37
mwhudsonand bully people in here to make the first call to get_revision a bit faster :)23:38
awilkinsHeh, I'm just working out how to add a revision metadata cache to bzr-eclipse23:38
jammwhudson: now what are you hinting at?23:39
james_wjam: yep, I was hoping to extend it in that direction after the basic algorithm was worked out, but I don't know if it would even have been possible.23:39
awilkinsBecause the way the Eclipse APIs call it calls "log" for each and every file that it views23:39
mwhudsonjam: well i'm mostly paging in old neurons here23:39
mwhudsonjam: but iirc, the first time you call get_revisions() on a locked launchpad repository it takes like 300 ms23:40
jammwhudson: I would expect that repository.get_revisions() on a Pack repo to be considerably faster than a Knit repo23:40
jambecause Knits had to load the whole list of revision_ids23:40
mwhudsonhm, time to benchmark!23:40
jam(the full indexes)23:40
mwhudsonjam: you seem to be right23:41
mwhudsonwell, in that case i think we can probably just dump the sql revision cache23:42
jammwhudson: $ py -m timeit -c "from bzrlib import branch; b = branch.Branch.open('.')" "b.lock_read(); b.reposi23:42
jamtory.get_revisions([b.last_revision()]); b.unlock()"23:42
jam10 loops, best of 3: 18.8 msec per loop23:42
mwhudsonyeah23:42
jammwhudson: on my much older server running knits: 10 loops, best of 3: 352 msec per loop23:43
mwhudsonjam: and i think you want -s, not -c23:43
jammwhudson: I think i do too, but it was working :)23:43
mwhudsonjam: great, i like it when problems just evaporate23:43
jammwhudson: with -s, it is now  15.3 msec per loop23:44
jamand the same on the slow host23:44
mwhudsonhm so the revision cache makes 0.05 - 0.10 s per page difference23:51
mwhudson(on launchpad, a pretty big tree)23:52
mwhudson--> it should die23:52
mwhudson(but after we've got something more current running on launchpad)23:52
jammwhudson: wow... I guess that's the way it goes23:52
dleeNot sure why I've never thought of this approach before, though I bet someone else has  ny reason we shouldn't have a case-insensitivity (for file names/folder names) option within a repo, like we have for shared?  I'm having mucho trouble with file/folder name casing under Windows Bazaar 1.5 (and back through 1.0).23:52
jamdlee: because a lot of people on other platforms have multiple files with the same name but different cases23:53
jamotherwise I would tend to agree with you23:53
dleeYes but probably not for a repo where you'd *want* case insensitivity23:53
jamMakefile and makefile tends to be more common than you want23:53
jamdlee: the other problem is figuring out how to be 'case insensitive but preserving'23:53
jamwhich is what people really want23:53
awilkinsThe only trouble I have is that the client library has trouble renaming files in case only on *dows23:54
jamand when you do an "ls" you see different names than your stored list23:54
dleeIn other words, I thought this would give everyone their cake--could even arrange for users to be able to set the option as a default.  For me, the question is, can anyone think of a scenario where you'd want case sensitivity in only part of one repo.23:54
awilkinsBut that's a trivial fix - you just check for case-only differences and rename via an intermediate23:54
dleeI'm getting conflicts, extra "removed" files that still exist, etc.23:55
beunomwhudson, so we can scrap sqlite?  or are we caching anything else?23:55
beuno(I promise my questions will get less stupid as time goes by)23:55
igcmorning23:56
mwhudsonbeuno: the file change cache still makes a big heap of difference23:56
mwhudsonlike 12s -> 1s23:56
dleeI tried both a Unix host and a Windows host, both using bzr serve, in case that matters.  I'm not sure it does.23:56
mwhudsonbut maybe we can do something about that using more modern bzr apis too...23:56
beunook, good, this is looking better23:57
mwhudsonindeed :)23:58
beunoso, my ToDo right now is: benchmark Genshi, and if it doesn't make a big different, a different templating engine. Then, get rid of the revision cache, then, look into performance with newer bzrlib APIs for files changed23:58
beunosound sane?23:58
beunos/different/difference23:59
mwhudsonbeuno: yes, very23:59

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!