/srv/irclogs.ubuntu.com/2011/05/30/#bzr.txt

pooliehi spiv00:20
spivHi poolie.01:08
pooliehi there01:24
=== poolie changed the topic of #bzr to: Bazaar version control <http://bazaar.canonical.com> | try https://answers.launchpad.net/bzr for
=== poolie changed the topic of #bzr to: Bazaar version control <http://bazaar.canonical.com> | try https://answers.launchpad.net/bzr for more help | http://irclogs.ubuntu.com/ | Patch pilot: jam
fullermdAaugh, I'm channelling vila.  I just spent a good 30 seconds wondering how my bzr got broken so it didn't recognize the 'renvo' command.02:08
poolie:)02:08
pooliethere is a bzr-autocorrect plugin02:08
fullermdI'm holding off 'till it corrects bugs in the commits.02:09
poolie:)02:14
pooliespiv i might pull in jml's try_import idea02:22
spivpoolie: ooh, that might be quite nice02:23
pooliemgz: hello?07:24
poolieoh actually i wanted martin vg07:39
poolieso many of them07:39
vilafullermd: glad to see you back ;)07:49
vilafullermd: you want https://launchpad.net/bzr-guess so you get:07:49
vila$ bzr renvo07:49
vilaCommand 'renvo' not found, perhaps you meant 'revno'? [y/n]:07:49
viladoesn't work for urls so I still needs hhtp to be defined in /etc/services though07:50
bob2hahaha07:51
=== Ursinha-afk is now known as Ursinha
pooliebonjour vila08:50
vilapoolie: hellllo !08:51
poolievila, are you actually the pp this week? or was that for last week?08:51
pooliewow i like the pqm queue length graph08:52
vilalast week, sorry I wanted to send the mail earlier but...08:52
pooliei think i understand now08:52
poolienp08:52
pooliei was thinking of doing a patch that takes jml's try_import function into bzr08:52
vilahehe yeah, the pqm one is funny to look at for the spikes ;)08:52
poolieprobably just copying that file (which is MIT-licenced)08:52
vilahmm, good idea (for the feature), I'm a bit at a loss for the license issues though...08:53
pooliei puzzled about it for a while08:53
vilayou can include MIT-licensed stuff in a GPL project ?08:53
pooliei'm pretty sure you can08:53
poolieaccording to wp08:54
vilayeah, it would make sense (but who is wp ?)08:56
pooliewikipedia08:56
pooliethe mit licence text is a bit apparently selfcontradictory08:57
vilabah of course :)08:57
pooliealso it's not actually labelled as "this is the MIT licenec"08:57
pooliei recognize the general type of course08:57
vilaby the way, could you have a look at my two config-lock mps which are blocking 3 other mps to land ?08:58
poolieyeah08:59
pooliei'm going to stop in a bit; i'll do that now08:59
pooliewhat are you intending for this week?08:59
vilahmm, good question :)08:59
pooliealso, which two branches? i see several09:00
vilaconfig-locks and config-lock-branch09:00
vilathe three other are approved but have these ones as pre-requisites09:00
poolieok09:01
vilasp this week I have a couple of mps I should keep reviewing, a patch-needswork bug, a bit more work on babune, windows corrupts the subunit stream, maverick is still hanging (I suspect paramiko there and/or some subprocess that needs its stderr handled with spiv's last trick), there is also a resolve --take-other bug or two09:03
vilas/sp// wth ?09:04
vilaha, s/sp/so/ gee I can't even understand my tyops no ? I blame fullermd09:04
pooliedid you ever see http://hyperboleandahalf.blogspot.com/2010/04/alot-is-better-than-you-at-everything.html :)09:04
vilas/no/now/ eeerk09:04
poolie(just cause you had 'abit' in your comment)09:05
pooliemaverick in the chroot is hanging?09:05
vilahehe, yeah I read a bit a while ago09:05
vilayees09:05
vilathere is a bug filed for that, let me see09:05
vilaand hardy is hanging too lately (but that's a vm)09:06
vilabug 78823509:06
ubot5Launchpad bug 788235 in Bazaar "blackbox.test_serve.TestBzrServe.test_bzr_serve_port_(readwrite|readonly) hangs on maverick " [High,Confirmed] https://launchpad.net/bugs/78823509:06
vilaand it's either paramiko IPv6 issue or a full stderr pipe09:07
vilamwhudson: ping, AIUI you have some experience with using openID for jenkins, I have a couple of related questions09:08
pooliewhy do the tests use threads?09:09
pooliewell, i suppose because you want to check that the lock guards the entire write operation?09:11
vilato test concurrency09:11
poolie:/09:11
pooliei quite dislike thread tests09:11
pooliethey seem to often have spurious failures or hangs09:11
vilaI want to test things that are occurring during the lock09:11
vilapoolie: I'd like to debug this thread disliking :)09:11
poolieand i'm not convinced they are always a reliable test of the real case09:11
poolie:)09:12
vilaconcurrency is hard, this doesn't mean threads are bad09:12
poolieso threads give you concurrency that is by default uncontrolled09:13
pooliethings will serialize only as much as you specifically require09:13
vilawell yes, I test the problematic cases09:13
pooliethis means there may be different traces on different executions of the test09:13
vilaI could be wrong and miss some, but I have to start somewhere09:14
vilaI try to avoid that09:14
vila(assuming that by 'traces' you mean threads could execute the tested code in different order09:15
poolieso that's one way it seems likely to give tests that may pass or fail from one run to the next09:15
poolieanother is that our tests tend to make a fair use of monkeypatching09:15
vilathat would be a bug in the test09:15
poolieor similar techniques09:15
poolie(which may be an antipattern itself)09:15
vilaright, you need a way to inject sync points09:15
poolieand that's going to interact very poorly with threading09:15
vilanot if done with care09:15
pooliei do wonder if, if the right sync points exist, you can just do something synchronously there09:16
poolieright, i'm not saying it's impossible to use it correctly, just that it has the possibility of problems that don't occur with synchronous code09:16
vilathat's what the tests aim for, make sure one thread always wait for the other09:16
pooliemy impression is the majority of our intermittent-failure tests have been concurrency related09:16
poolieeither threads or processes09:16
poolieand also that server threads have caused a fair number of other hard-to-eliminate bugs09:17
vilamy experience is that fixing them has always mean add an explicit sync09:17
poolieright, probably09:17
vilai.e. we were using uncontrolled concurrency09:17
poolieso in these tests, for example09:18
poolieimbw but i tihnk if the background thread gets an unexpected exception, the test will just hang09:18
vilawhich ones ? config-lock-branch ?09:18
poolieconfig-locks09:19
pooliemy specific thing would be, why not just at the moment the config is saved, do the other operations in the same thread09:19
poolieif it's totally synchronous, why do you need another threda?09:19
vilahmm, generally, with synchronous code,  you can't just stop the execution exactly where you want09:20
pooliewhat do you mean?09:20
vilain test_writes_are_serialized, I want to stop when the lock is held but the write has just occurred09:21
vilain test_read_while_writing, lock held, write hasn't occurred yet09:22
vilaand so on09:22
poolieok, but by overriding the method you can stop it at exactly those points09:23
vila?09:23
vilaand how would you resume ?09:23
poolie perhaps i'm missing something09:24
pooliei was just going to say that in your c1_save code09:24
vilaperhaps me too :)09:24
poolierather than triggering the Event09:24
pooliejust actually do the inspections  or other manipulations you want to have happen, ie check that it's locked, that you get contention trying to address it from another object, that you can still read from it09:25
vilahmm09:26
vilayou may be right09:26
vilabut this has a cheating smell...09:26
poolie?09:27
vilatesting concurrency in a single thread09:28
vilanow, these tests are hard to read, some helpers are needed09:28
pooliehm09:28
poolieso the thing is the concurrency we actually care about is between different processes, quite likely on different machines09:29
vilaI was kind of waiting for more examples to find them09:29
vilaright09:29
poolieanything we do from within  a single test process is just an approximation to that09:29
* vila nods09:29
vilabut a bit closer than doing it in a single thread09:29
pooliewell09:29
pooliehow?09:30
vilaalso, if I define hook for load/save/get/set (which I must do anyway) I should be able to write clearer tests09:30
poolieyes09:30
pooliei was thinking this the other day actually09:30
pooliethat perhaps we are too much in the habit of using knowledge about the implementation in writing tests09:31
vilahow ? Well, at least each thread is supposed to represent a different process which should help think about the issues09:31
poolieeg overriding methods, rather than putting in hooks09:31
pooliemm09:31
pooliei just don't think it actually does help09:31
pooliemany of these things, we actually will have a separate in-memory object for each client09:31
vilaindeed, using threads is supposed to help focusing on specifying: what if this process is *here* and this other one try to do X09:31
poolielike your c1 c209:31
pooliei think seeing a flattened trace of all of the actions across all actors is perhaps clearer09:32
poolieanyhow09:33
pooliedoes that help explain my dislike of them a bit more?09:33
vilaright, that's where I smell the cheating in the sense that flattening the trace is more arbitrary than setting *one* break point09:33
vilayes09:34
pooliewhat do you mean by 'one break point'?09:34
poolieone synchronization point?09:34
vilaI think it's one area where I lack clarity and fail to explain why we should continue in this direction ;)09:34
vilayes09:34
vilaI think about them as breakpoints: stop there while I look around09:35
poolieright, it is more arbitrary09:35
pooliebut they're both arbitrary on any particular run of the tests; it's just that the threaded approach is arbitrary in an unpredictable way09:35
vilaand also that they don't exist in production, I need them only for tests09:35
poolieit may just once happen to catch something interesting, but perhaps not be able to reproduce it09:36
pooliethis isn't good09:36
vilawell, it's arbitrary only on the parts I don't care about09:36
vilaso the idea is that if all parts we care about are covered by different tests, we're good09:36
vilahehe09:36
vilaof course this isn't good09:36
pooliewell, but then why is this any better than having a totally deterministic trace?09:36
vilabecause you still ignore all the other possible traces09:37
poolie.. but you just said they don't matter09:37
vilaoh, sorry, wait a sec09:37
vilaright, we are both talking about what seems more natural I think09:39
vilaI start having some experience with threads so I'm less concerned about the related problems there09:41
vilaI still don't know if the same kind of tests can be written without them, it's possible but I have a vague feeling that some cases will be... either harder or less clear09:41
vilaAlso I didn't focus on clarity for these ones, I just cargo-culted them (we have the same ones for the actual implementation)09:42
vilaall of them would benefit from hooks and helpers to make them clearer09:43
vilahmm09:43
vilabut what you'd like is a try at not using threads for them I presume ? ;)09:43
pooliehttp://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf "The Problem with Threads"09:43
viladon't you have one with 'solution' in it ? ;D09:43
poolie:)09:44
pooliei'd like to avoid using threads where possible09:44
vilaok, time to reveal the hidden agenda :)09:45
vilaI'd like threads to always be hidden behind generators09:45
pooliei think both from a general-approach perspective (like in that paper) and also from the empirical results of tests that have caused problems, this is worthwhile09:45
vilabut we're far from that09:45
vilayou want to get rid of all the tests that needs a server running in a concurrent thread ?09:46
poolieperhaps ideally yes, but that may be one of the harder ones to fix09:46
vilajust reading the abstract of that article, I agree with the problem09:46
pooliei think code like this mp is a really easy case09:46
vilabut the solution is to teach developers to deal with it, not hope for a language to magically address it (hint: it won't)09:47
pooliehm09:47
vilaso not using threads for simple cases... won't help us to learn09:48
poolie:)09:49
poolieit will help us learn how to avoid them ;-)09:49
vilawhich will make threads even more scary because we'll have to deal with them on complex cases (and I suffered a lot from that in the thread/socket leaks saga)09:49
pooliehm, maybe09:49
vilabah, avoiding them is easy, we've done that for the last 20 or 30 years09:50
vilanow Intel is stuck with adding more cores and we're still not using them properly :)09:50
pooliei think CSP-like architectures are one important way to go09:51
vilaI know I've been asking for grace periods on several other topics in the config loom, but I really think we *need* to go forward (not backward) with threads09:52
pooliei think directly creating threads inside application-type code or individual tests does not seem like it's really learning?09:52
pooliewhy?09:52
vilathreads and generators09:53
vilaonce you start thinking about the data you need to process as generators instead of lists, you're reached the first step.09:53
lifelessbut python :P09:54
vilaThe second step is then to split the data production into parallel producers09:54
lifelessI don't think you want threads in general production code that doesn't strictly require them, do you?09:54
vilaGIL is not a concern anymore as soon as your producers involve IOs09:54
vilatoday ? no09:54
vilatomorrow ?09:54
poolieare you really saying this is strictly needed for configs?09:54
pooliefor the first iteration of them?09:54
vilapoolie: certainly not09:54
vilabut I know of only two sites were threads are explicitly used in tests (here and in mass_import)09:55
pooliethere were some others, but i think they've ÿ09:56
poolienow been deleted or rewritten09:56
pooliewell, also servers09:56
vilaright, I excluded servers (you can't have servers without threads)09:56
vilaby the way, if we were to apply your approach to client/server tests....09:57
pooliewell, two things09:57
pooliefirst, i'm primarily saying "don't use them where it's not necessary" and to test them at the moment it may be necessary09:58
pooliesecondly, it is at least conceptually possibly to make synchronous calls into the server code and back out09:58
poolieand that might well make tests more deterministic and easier to debug09:58
poolieso, can we split this?10:00
vilaIt seems you're still thinking that using threads means non-determinist behaviour, that's may be true by default, but it's unfair to exclude synchronization from the picture, one way or the other you *have* to take it into account. Flattening a concurrent execution is just one way to express the synchronization10:00
poolieplease don't use threads to simulate multiple processes in the config tests10:00
poolieyes, that's correct, but i think it's overall the best way10:00
poolieto quote that paper10:01
poolie" deterministic ends should be accomplished10:01
pooliewith deterministic means10:01
poolie"10:01
vilaargh, would you at least accept a followup for that ? The intent here was to test the new design by re-using the existing tests :-/10:01
pooliebut they're new tests10:02
vilacopy/pasted10:02
poolieare they copies of something that is already used?10:02
vilayes, same file10:02
vilasame author :)10:02
vilaold bug10:02
poolie:/10:02
pooliea lot of stuff in bzr deals with concurrency across processes10:03
pooliei can forsee the test suite getting pretty gross if that's all done with threads10:03
poolieand these are actually _longer_ than they would be if written without it10:03
pooliei need to go10:04
poolieif you really want to do it as a follow on i could live with it10:05
pooliebut, i'd rather just have it fixed now10:05
pooliehopefully the discussion was useful anyhow?10:05
vilauseful, yes, I think we still disagree but that shouldn't block progress ;)10:06
pooliewell10:07
pooliei'd like to understand some time why you like them for testing10:07
poolieand what you think we should do with them generally10:07
vilasure, I will also think about how to write such tests in a linear way10:09
vilaI'm sure there is room for both ;)10:09
vilaSo there is no need to force them on readers that dislike them when they don't buy us something else10:10
vilapoolie: I started on them when I *had* to (leaks). It turned out I gather valuable experience for the udd importer and continued there. I think it's a valuable long term goal we can't really afford to miss (and that's certainly where we need to discuss more).10:13
vilapoolie: I also failed to summarize what I learned there (what are the symptoms to look for, what are the common errors, what are the safe tricks, etc)10:14
spivvila: FWIW, I share poolie's dislike of threads10:14
spivI haven't read that PDF yet, but one aspect that really troubles me about using them in tests for concurrency is that they are always non-deterministic to some extent unless your analysis of how the states of the concurrent operations interact is perfect.10:15
vilaI realize they don't have a good press and I can see that python implementation is really minimal10:15
vilaspiv: right to the point10:15
spivIf you fail to notice a race, you get intermittent problems.10:16
spivNow *finding* problems is great10:16
spivBut we don't put random fuzz tests in our test suite10:16
vilathe other face of the coin is: how correct is our implementation regarding concurrency if we don't explore it with tests ?10:16
spiv(Or perhaps I should say "in our unit test suite")10:16
spivI'm all in favour of writing tests to discover bugs.  But then I want small, focused, isolated, deterministic tests that those bugs are fixed as much as possible.10:17
vilabut poolie is right that there may be other approaches to explore that10:17
vilame too10:18
vilaI think this is can *also* be achieved with threads10:18
vilagreat power, etc10:18
spivSo by all means write tools to race threads/processes/etc against each other10:19
spivAnd let's fix the bugs we find10:19
spivBut not build our primary test suite on that.10:19
vilaeerk, generic tools to race arbitrary executions is a no-go, the combinatory (sp?) explosion wall is right there10:20
spivSame as fuzz testing.10:21
spiv(Which really ought to do…)10:21
vila?10:21
spivs/really/we really)10:21
spivhttp://en.wikipedia.org/wiki/Fuzz_testing10:22
vilastill ? :-/10:22
vilayeah, same issue10:22
spivIt's absolutely valuable to do that sort of testing.  It finds bugs.10:22
spivBut I don't think it pays off to have that in the primary test suite.10:23
vilameh10:23
vilaOh10:23
vilaYou meant " tools to race threads/processes/etc" but not in the core test suite10:23
vilaBut the config tests starting the discussion are not fuzzy at all, they *are* deterministic10:24
spivThen I'd prefer them to not use threads10:25
vilaI think I heard the message :)10:25
spivBecause our experience with threads in tests are that they often aren't deterministic even when we think they are.10:25
vilaI think I now that quite well...10:26
spivI'm sure you do :)10:26
vilawhich is why I'm working on making them clearer by acquiring the knowledge about we fail to recognize the race conditions which requires sync points which in turn make it possible to re-gain determinism where we need it10:27
spivIt's just not possible in general is my suspicion10:27
vilaBut I'll repeat: "there is no need to force them on readers that dislike them"10:27
spivBecause say you carefully analyse the code and add in all the necessary synchronisation points10:28
vilaspiv: well, my experience there is that it's not *that* hard10:28
spivAs soon as someone changes the code it may invalidate that analysis10:28
spivBut you can't know that without redoing it10:28
vilathis remark is not specific to threads10:28
spiv(And even then, we get it wrong sometimes)10:28
vilaneither is this one :D10:29
spivRight, but normally mistakes in understanding code doesn't lead to non-deterministic tests10:29
vilaconcurrency hard, let's have beer (TM lifeless) :)10:29
vilas//is/10:29
spivEspecially tests with failure conditions that include hanging!10:29
vilayup, but some hangs are easier to avoid than others10:30
spivAs opposed to a simple "state machine didn't end up in state X (and here's the sequence of transition it took)"10:30
spivIf you want to argue we need more experience with threads, I'd argue we need more experience with explicit state machinees :)10:31
vilaspiv: you're preaching the choir :)10:31
vilawe need more experience with both anyway :)10:31
spivWell, let's start with the non-evil one then :P10:31
vilaspiv: are you suggesting rewriting our thread-based servers on top of asyncore (not over my dead body) ?10:32
spivasyncore over my dead body too!10:32
vilahehe10:33
spivasyncore in fact is partly terrible because it doesn't separate out concerns like “state of my protocol decoder” from “state of my IO event loop implemented on select on sockets”10:34
spivYou might notice that the bzrlib.smart.protocol module provides e.g. a decoder that is decoupled from any particular form of IO10:35
spivYou just feed it bytes (however and whenever you acquire them) and it tells you what protocol events they generate10:35
spivSo actually, yes, I do want to replace the vast bulk of uses of SmartTCPServer in the test suite with no threads and no real IO at all, just direct calls into the server logic from the client.10:36
spivIt would have many benefits, like make walking through HPSS logic via pdb much nicer — you'd be able to follow the call from the client into the server's processing, and then follow the response out of the server and back into the client quite smoothly10:38
spivWhereas stepping through the multi-threaded interactions with pdb if you want to inspect more than one thread at once is quite painful10:39
vilaimpossible even10:39
spivNothing's impossible ;)10:39
spivBut yes, close enough. :)10:39
vilacrossing the thread boundary is the key point and you generally don't know where you can safely step a single python line10:40
vilaand each time you fail you have to start all over again which is indeed painful10:40
vilaspiv: do you know any technic that would allow attaching a pdb session from a console to an existing python process ?10:42
vilahmm10:42
spivvila: you can attach gdb10:49
spivwhich in natty is a bit more python-aware10:50
vilaha, but I really want a pdb session ;)10:50
vilaanyway, even that sounds... complex, I'm not sure you can even reach a safe model where each thread can be stepped by a different pdb... so10:51
vilaspiv, poolie : I think one misunderstanding in this discussion is that if I indeed recognize that threads are non-deterministic but I try to use them in deterministic ways11:06
vilaand I'm not saying the later is easy, but it is achievable (since that's what I did with the thread/socket leaks (I know of at least one more pending bug which is triggering an intermittent failure on babune though))11:07
jamvila: read the paper from poolie, it is quite interesting, and a nice structuredway of looking at "how do you make threading deterministic, and how can we do better"11:07
vilajam: yup, I'm reading it11:08
vilaand I think I'm advocating the same thing: use idioms that ensure determinism11:09
vilathis is vastly obfuscated in the config tests, so I can understand the concerns here :D11:09
vilait's just too bad I didn't commit this week-end while diagnosing bug 78916711:11
ubot5Launchpad bug 789167 in Bazaar "bzrlib.tests.blackbox.test_serve.TestBzrServe.test_server_exception_with_hook is fragile" [Critical,Fix released] https://launchpad.net/bugs/78916711:11
jamvila: can you change the topic to make me pp. For some reason Empathy doesn't want me to do anything with /topic or manually editing it.11:11
vilaat least two times I had examples where the tests were exhibiting a particular point very precisely and with only a few lines of code11:12
vilajam: poolie already did that earlier11:12
jamvila: hm... empathy still says "vila" for me...11:18
vilajam: blame empathy :)11:19
jami blame you, but only because I have no other choice :)11:32
jamback in a bit11:33
=== vila changed the topic of #bzr to: Bazaar version control <http://bazaar.canonical.com> | try https://answers.launchpad.net/bzr for more help | http://irclogs.ubuntu.com/ | Patch pilot: jam, yes jam not vila
=== vila changed the topic of #bzr to: Bazaar version control <http://bazaar.canonical.com> | try https://answers.launchpad.net/bzr for more help | http://irclogs.ubuntu.com/ | Patch pilot: jam
vilajam: what topic do you see now ? (I made and revert a change while you were away)14:05
jamI see my name on it now14:10
jamnot sure when that was fixed14:10
jamand I restarted in the mean time14:11
vilathat probably fixed it14:11
vilapoolie's change went out of my scrollback so it was probably during our night, but I saw it this morning when scrolling, irc logs may still mention it (if you're interested)14:13
jamvila: test_writes_are_serialized, why not just use a callback rather than thread locking?15:39
vilaprimarily and as far as the current proposal is concerned: because I copied/adpated an existing test :)15:46
vilasecondarily: It sounded like the easiest way to test concurrency back when I implemented the test for the actual design to fix bug #52557115:47
ubot5Launchpad bug 525571 in Launchpad itself "No locking when updating files in ~/.bazaar" [High,Fix released] https://launchpad.net/bugs/52557115:47
vilaand I think the related mp is https://code.launchpad.net/~vila/bzr/lockable-config-files/+merge/33424 and nobody mentioned threads in that time :)15:51
vilaat the time ?15:56
jamat the time16:01
jamanyway, I'll try to give a closer look tomorrow, but I will say event based interlocking seems like callbacks would be just as good, and much more straightforward.16:01
vilathese tests won't stay in the middle/long term, I don't really care about working on them16:04
=== beuno is now known as beuno-lunch
=== beuno-lunch is now known as beuno
=== elmo__ is now known as elmo
jerrybtwo bazaar questions:  1. Working on just part of a large project.  I have checked out the trunk and want to create a branch for my work BUT don't want to copy the whole trunk.  How can I do this with Bazaar?18:48
jerrybQuestion 2.  If I propose a merge of my branch for a project and it is accepted and merged into trunk, can I then remove my branch from launchpad and remove my working copy?18:50
=== zyga is now known as zyga-afk
maxb1. You can't work with just a subtree of a branch.19:04
maxb2. Remove from Launchpad: sure, if you want, but why bother?  Remove local working copy: of course.19:04
cody-somervilleweird.19:05
cody-somervilleI'm using the pipeline plugin19:05
cody-somervilleI renamed the directory containing the pipeline19:05
cody-somervilleand now it isn't working. It says:19:05
cody-somervillebzr: ERROR: Not a branch: "/home/cody-somerville/Projects/live-build/live-build.old/.bzr/pipes/sg-2.x/19:05
cody-somerville /".19:06
cody-somerville(remove whitespace on second line)19:06
maxbI believe absolute paths to other pipes in a pipeline are stored in the pipe branches config files19:06
cody-somervillethis is doing *any* command19:06
jerrybmaxb: Thanks!19:06
cody-somervilleits add \n/ to .bzr/branch/location for some reason19:06
cody-somerville*adding19:06
* cody-somerville will try echoing into the file the current contents with the -n option to see if that fixes it.19:08
cody-somervilleand it does19:08
cody-somervillehow strange how that even happen19:08
cody-somervilleoh, I know19:09
cody-somervilleIt was an absolute path so after renaming it, it didn't work anymore. I edited it to fix it, editor of course adds newline19:10
cody-somervilleHow do I fix this error I get when trying to push a new branch to launchpad?: https://pastebin.canonical.com/47961/19:33
cody-somervilleseems second time is the charm19:41
beunocody-somerville, yeah, looks like some branches need upgrading19:44
=== hunger_ is now known as hunger
=== yofel_ is now known as yofel
* jelmer wavez0rs20:54
=== Vorpal_ is now known as Vorpal
=== soren_ is now known as soren
=== maxb_ is now known as maxb
michaelh1Morning.  Is there a way to turn revisions into patch files with one patch per revision, and each file automatically named?  (Google fails me...)23:36
michaelh1Apparently git format-patch does something like this.23:37
jelmermichaelh1: hi23:37
jelmermichaelh1: if you have bzr-git installed, "bzr send --format=git" can do something similar23:38
jelmermichaelh1: it's not quite as well polished though23:38
* michaelh1 tries it...23:40
michaelh1Ah, it blows up with an exception.  I am running the dev ppa though...  I'll file a bug23:41
jelmerthanks23:41
michaelh1Is there a way of installing the latest release and latest dev side by side?23:43
jelmermichaelh1: not easily, though I should note that if this is broken in the dev version it's probably broken (or missing) in the release version too23:44
=== milleja464 is now known as milleja46

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