/srv/irclogs.ubuntu.com/2010/09/02/#bzr.txt

=== Ursinha is now known as Ursinha-afk
spivGood morning.01:05
=== Ursinha-afk is now known as Ursinha
billyhi folks - i'd like to use bzr for delphi projects but some files are binary - is bzr limited to text only data?01:41
spivNo, you can commit binary files too.01:42
maxbNot at all, other than the obvious problem that you can't merge binary files01:42
maxbBut that's a problem with binary file formats, not a problem with bzr :-)01:43
billythanks folks01:43
pooliehi there spiv, maxb01:46
maxbHi poolie. I have a question about hydrazine. Shall I do a merge proposal to add lp-promote-ppa, or shall I just push it straight to trunk?02:15
poolieif you do an mp i'll read it02:15
pooliethen you can merge it yourself02:15
poolieif i ever stall for too long please nag or circumvent me02:16
* maxb wonders why bzr lp-propose complains of "bzr: ERROR: No reviewer specified02:19
lifelessbug thingy02:19
pooliesomebody just duped it02:26
lifeless<-02:32
=== Ursinha is now known as Ursinha-afk
=== Ursinha-afk is now known as Ursinha
pooliemaxb oh i just saw your mp02:51
poolieapparently the homepage feeds are failing to revalidate because the datacentre cache isn't revalidating them03:01
billymaxb: i don't follow your remark about obviously not being able to merge binary data - doesn't bzr generate a diff file - how is that handled?03:02
spivbilly: internally bzr has a database that can store binary deltas03:05
spivbilly: for sharing changes with other people you usually just tell them to access your branch directly, but bzr can also generate a "merge directive" that looks somewhat like a diff but copes with changes to binary files (and preserves all the bzr metadata).03:06
ReachingFarrOK, so I'm in the process of setting up my bzr server.  I currently have it running with the --directory option set to /data/bzr.  First question: should I do a bzr init-repo on /data/bzr?03:07
billyspiv: that's good - i assume maxb meant merging of branches which i don't need - i'm just tracking changes inn private development03:08
spivbilly: right03:08
spivReachingFarr: generally you make a repo for every project you are versioning.03:09
ReachingFarrspiv: OK.  Makes sense.  Next question: There is an option to specify the protocol when using 'bzr serve' but I don't see any list of options.  Are there any?03:10
billyanother question - quite different - a project on sourceforge uses subversion - can i checkout the repository to my system using bzr?03:10
billyi don't really need every vcs on the planet installed - one is enough03:11
lifelessyes, install bzr-svn03:11
billylifeless: is that a separate package or a plugin?03:12
lifelessyes03:12
poolielifeless: quick squid qn03:12
billythanks folks03:12
pooliethe dc squid was always caching feedparser requests03:13
pooliewhich is reasonable given the heuristics03:13
lifelessits also for security03:13
lifelessknown-bug-contact-point03:13
poolieif i change the client to send an i-m-s and/or etag, will it revalidate?03:13
poolieyou mean having a squid at all is a security measure? yes, that's fine03:13
lifelessto force revalidation?03:14
pooliei realize the answer depends on the particular setup03:14
lifelessor to permit revalidation ?03:14
poolieat the moment the client sends no cache control headers and it does not revalidate03:14
poolieif i set pragma: no-cache it respects that03:14
pooliewhat i want to know is if i send i-m-s will it probably revalidate?03:14
lifelesssquid will be revalidating internally based on the age heuristic from the upstream03:14
pooliedoes i-m-s affect that?03:15
lifelessa few things do03:15
lifelessI'm just listing them03:15
ReachingFarrAlso, how do people tend to secure their bzr servers? I'd really like to use the smart server AND have write access.03:15
lifelesspatience ;)03:15
lifelessReachingFarr: most folk use bzr+ssh03:15
lifelesspoolie: so, a plain GET requires the objet to be fresh, or squid revlaiadates; IMS IIRC will be exactly the same, but squid can tell you Not-modified if it isn't changed.03:16
lifelesspoolie: if you're trying to trigger revalidation, you should use03:16
lifelessmax-age03:16
lifelessor similar03:17
poolieor must-revalidate?03:17
lifelessright03:17
lifelessdo you have the response headers?03:17
spivReachingFarr: the only options for protocol at the moment are 'bzr' (the default) and 'svn' (if you have the bzr-svn plugin installed), which is still somewhat experimental I think.03:17
lifelessfrom a request where squid did not revalidate ?03:17
spivReachingFarr: often people don't need 'bzr serve' at all03:17
lifelesspoolie: and, what are the symptoms/problem you're fixing03:18
spivReachingFarr: if you have bzr and ssh installed on the server then bzr+ssh is usually the simplest and best solution.03:18
spivReachingFarr: so the URLs would look like bzr+ssh://server/data/bzr/...03:18
poolielifeless: the symptom is that new feed entries don't show up03:19
lifelesspoolie: at all, or for <time period> ?03:19
pooliefor over a day03:19
lifelessok03:19
pooliethe prior change to the feed was in july03:19
poolieand the returned headers give that as the l-m03:19
lifelessa response header from squid when it should have updated but hasn't can be very useful03:19
lifelesssquid will include in there the original l-m, and *its* status about age and freshness03:20
poolieso it's kinda reasonable for it to think it's a slowly-changing resource, but i do want max-age like behaviour03:20
lifelesspoolie: I'd set max-age03:20
poolieX-nc: HIT ord 2003:20
poolieAge: 23370403:20
poolieContent-Length: 4008803:20
poolieX-Cache: HIT from druzhnaya.canonical.com03:20
poolieX-Cache-Lookup: HIT from druzhnaya.canonical.com:312803:20
ReachingFarrspiv: Is there no way to set a base directory for use with bzr+ssh?  I know it's not much, but I'd like to not have to type /data/bzr03:20
lifelesswhee that is old03:20
poolieok03:21
poolieso feedparser doesn't directly expose a way to set that, or to give arbitrary headers03:21
pooliebut i'm sure there is a way03:21
pooliethat's why i was wondering if something else might get the same behaviour03:21
pooliebut it'd actually be a bit of a kludge, and cache control is better03:21
lifelesspretty sure neither ims nor etag wil03:21
lifelessbecuase they are all about getting NM back to the client, rather than triggering/avoiding squid doing work03:22
spivReachingFarr: if you use a separate SSH key (and user, if you like) for accessing the server's bzr repo, then you can arrange that via the authorized_keys file and a script from bzr's contrib directory: http://doc.bazaar.canonical.com/bzr.2.2/en/admin-guide/security.html#access-control03:23
spivReachingFarr: although bzr will tend to remember locations for you, so you don't necessarily need the full URL very often03:23
lifelessor chroot the ssh server03:24
ReachingFarrspiv: Ya, I was thinking of all of the times I would have to type in the full path... and it turns out it isn't that often.  I have now been convinced to use bzr+ssh instead of messing with this server stuff.03:24
lifelessrun it on a different ip / port03:24
spivReachingFarr: another option is to make a simple client-side plugin to provide a shortcut like "foo:...", e.g. like how bzr comes with the Launchpad plugin which (among other things) provides the "lp:" shortcuts03:24
lifelessspiv: I think a very useful thing we could do is /etc/bazaar/bazaar.conf03:25
lifelessspiv: it would let us have a place to configure stuff like this03:25
spivlifeless: yes, that would be nice I think03:25
spivOr possibly /etc/bazaar/serve.conf?03:25
lifelessspiv: or both03:26
spivRight.03:26
lifelessspiv: /etc/bazaar/bazaar.conf as an underlay for ~/.bazaar/bazaar.conf would be a nice small self contained patch03:26
lifelesswith benefits immediately03:27
lifelessditto ignores03:27
spivlifeless: yeah, that's what I was thinking03:27
lifelessserver stuff could be a [server] section03:28
spivWell, without necessarily assuming it would be a small self-contained patch ;)03:28
lifelessor a separate file03:28
spivBut you're probably right.03:28
pooliewbn; i filed a bug for this03:30
pooliesigh, apparently only a monkey can do it03:31
lifelesspoolie: ?03:32
poolieapparently the only way to get extra headers in is to monkeypatch it03:32
poolie"it" being feedparser, or urllib203:33
poolieoh i guess i could get the rss myself and pass that in03:33
pooliethat would be a bit cleanecr03:33
lifelesspresumably it would be a nice feedparser feature to do this for other folk03:49
poolieit would be nice, but then i'd need it packaged and deployed to run on escudero03:50
pooliei guess we could run it from a branch03:50
lifelesspoolie: I can't see a bug for /etc/bazaar/bazaar.conf03:51
lifelesshttps://bugs.edge.launchpad.net/bzr/+bug/348640 is related but not it03:51
ubot5Launchpad bug 348640 in Bazaar "Want a variable to override location of ~/.bazaar etc (affected: 0, heat: 0)" [Low,Confirmed]03:51
pooliebug 41985403:52
ubot5Launchpad bug 419854 in Bazaar "should have a system-wide configuration file (affected: 1, heat: 5)" [Medium,Confirmed] https://launchpad.net/bugs/41985403:52
pooliei think you're right though03:53
poolieit's possible to patch it in, but it's a bit gross03:53
pooliei can't believe other people don't want it too03:53
lifelesspoolie: specifically, technically, you want s-max-age, I don't know if thats supported by the squid you're connecting through04:09
poolies-maxage04:11
pooliewhat do i want about that that max-age won't do?04:11
lifelessjust correctness04:12
lifelesspedanticness04:12
pooliefeedparser boasting "4000 unit tests" is less impressive if 32 fail in a checkout of tip :)04:16
=== timchen1` is now known as nasloc__
lifeless_lol_04:25
pooliethough tbf most may be just lack of isolation, like they assume (but don't document) they're run in utc04:37
=== Ursinha is now known as Ursinha-zzz
pooliehi spiv, what are you up to?05:22
spivpoolie: I had an idea about deleting some cruft from TestCase, which appears to work although without noticeably speeding tests up.  Just submitting that now.05:41
spivpoolie: and managed to figure out why the python-profiler package's postinst was failing on my system05:41
pooliethat sounds good05:41
poolieoh, why?05:41
spivI have a /usr/local/bin/python2.705:41
spivSo the postinst assumes that because there's a python2.7 on the path that /usr/lib/python2.7/py_compile.py must exist.05:42
lifelesshar har har05:42
pooliebut it was an orphaned binary?05:43
pooliedeleting cruft is always good for its own right i suppose05:46
pooliei'd like to look at removing some more of the weird testcase subclasses in favor of asking for the resources the test actually needs05:46
pooliethrough fixtures or something similar05:46
spivWell, I have local installation of python2.7 from the upstream SVN (via bzr) branch, for testing and hacking purposes.05:47
spivAt the time I started doing that python2.7 wasn't packaged, I think.05:47
spivI could install it into my home directory I suppose, but GNU stow has served me well until now...05:48
spiv+1 on removing clumsy TestCase hierarchies in favour of something like fixtures.05:49
lifelesslp:python-fixtures. have at it.05:49
poolieok05:54
pooliei'm trying to write a test for the feedparser patch05:54
spivOk, submitted.  I'm going to have a quick stab at https://bugs.edge.launchpad.net/bzr/+bug/619872 because I think it should be easy to do.05:56
ubot5Launchpad bug 619872 in Bazaar "bzr: ERROR: exceptions.ValueError: tag/value separator not found in line '' reading lockdir info file (affected: 1, heat: 6)" [Medium,Confirmed]05:56
pooliethat would be nice05:56
poolieif you can work out what case makes it fail05:56
thumpershould this work? bzr cat lp:bzr/trunk/bzrlib/tests/test_log.py05:57
pooliei'd really like to progress the locking thing this week05:57
pooliethumper: ought to; i think there's a bug and you need to give -d05:57
* poolie wonders if bicyclerepair works in mavericj05:57
spivWell in general we shouldn't traceback just because the lock file has malformed rio05:59
pooliespiv true06:01
poolieoh wow06:03
poolieit registers the tests to run by setattr-ing them onto unittest.TestCase06:03
pooliethat's creative06:03
pooliesorry, no, onto it's own testcase, that's not so bad06:04
=== jamesh_ is now known as jamesh
pooliedone06:54
pooliespiv, re the logs, i think i made it a file so that we could more easily redirect external processes into it07:19
vilahi all !07:29
AfCHow do you do `bzr status` in a specific directory without it recursing down?07:34
AfC$ bzr status .07:34
AfCisn't it.07:34
spivpoolie: I thought so, but AFAICT we aren't using that... external processes will log into the test_home_dir/.bzr.log, which isn't the same as self._test_log_file (which is a mkstemp file with 'testbzr' prefix)07:57
spivAnd nothing outside of TestCase uses the ._log_* attributes, except for the one test_setup test I updated.08:00
johnf1I'm getting a weird error without much google love - NoSuchRevision: CHKInventoryRepository('bzr+ssh://bzr@bzr/.bzr/repository/') has no revision johnf@inodes.org-20100902070043-0hximuhab4del54e08:03
johnf1on the remote end I'm using ssh keys to run bzr server in /srv/bzr/foo08:03
johnf1I have done cd /srv/bzr/foo; mkdir repo08:04
johnf1cd repo; bzr init-repository .08:04
johnf1I can then on my laptop create a bzr repor and push it to the server. I can then check it out08:04
johnf1when I try to commit to the checkout I get an error like the one above08:04
spivThat rings a bell08:06
spivWhich versions of bzr?  Any stacking involved?08:09
johnf1spiv: No stacking and I upgraded both sides to 2.208:09
johnf1actually server was alway 2.2 and I just moved client to 2.108:09
johnf1didn't make any difference though08:09
spivWhat was the client using?08:10
johnf1sorry moved client from 2.1 to 2.208:10
spivAh ok08:10
spivpastebin the full traceback?08:10
johnf1one sec08:14
johnf1spiv: http://pastie.org/113324008:15
spivOh hello:   File "/usr/lib/python2.6/dist-packages/bzrlib/plugins/verify_whoami/__init__.py", line 13, in pre_commit_verify_whoami_hook08:15
spivThat plugin may be tripping over something like https://bugs.edge.launchpad.net/bzr/+bug/57422608:16
ubot5Launchpad bug 574226 in Bazaar "repository.fetch(same_url_repository, revision_id=revision_added_after_write_lock) fails (affected: 1, heat: 1)" [Wishlist,Confirmed]08:16
johnf1ahh thanks08:16
johnf1should have thought to turn off plugins08:17
johnf1yes, works fine with --no-plugins08:17
spivI *think* get_revision(future_revid) is not expected to work during pre_commit08:19
spivIt'd be kind of nasty, but I am tempted to introspect the traceback when we exit with an error and if any stack frames involve a plugin tell the user to try --no-plugins.08:25
spivAlthough in the case of running hooks we can probably avoid the introspection and at least make it clear that the error occurred while running a $foo hook from $plugin.08:26
maxbAre there any environment variables which will suppress the extra strictness of requiring 'bzr whoami' in 2.2?08:26
maxbI am wondering what etckeeper should do08:26
spivYou can set a value in the branch.conf IIRC08:26
maxbWould that be overridden by any per user settings?08:28
maxbetckeeper actually works best if it *does* get a guessed username in there08:28
spivHmm, no, setting email = ... in branch.conf will override the user.08:30
spiv(And putting an email address in .bzr/branch/email overrides *that*)08:31
maxbah, I think I see, etckeeper needs to grow a special case to export BZR_EMAIL in /etc/cron.daily/etckeeper, like it exports HGUSER for hg08:34
spivThat sounds plausible.08:49
poolieyay, the homepage feeds finally update correctly10:05
pooliehi vila10:15
vilapoolie: hello10:15
=== zyga is now known as zyga-afk
ddaaThe bzr-keywords project on lp is owned by Ian Clatworthy.12:12
ddaaIs there any plan yet about transferring ownership of this?12:13
ddaaWhat is the expected release date of bzr 2.3?13:25
viladdaa: 2.3 should be released in about 6 months13:34
ddaavila: thanks13:36
ddaaIn the help of "bzr tag", I see "Tags are stored in the branch.". I remember when poolie first hacked tag support in, they were a property of the repository, not branches. Was that changed?13:37
ddaaOr maybe did I misunderstand.13:38
vilaThey are stored in .bzr/branch/tags13:38
ddaaSo, that means tags should only refer to revisions in the branch ancestry, right?13:39
vilaI don't know tags very well, I'm not sure they *are* constrained to the branch history13:40
vilaThere may be bugs too13:41
ddaaI would not expect they are constrained by the system.13:41
ddaaBut e.g. if one puts a tag to a diverged release revision into trunk, without merging the actual revision, there would be no guarantee that the tagged revision would be accessible.13:42
jamvila: about https://code.launchpad.net/~jameinel/bzr/2.3-bzr-connect-ssh/+merge/3433114:40
jamI think we still disagree about what is going on14:40
jamand I'd like to sort it out before we land it14:40
jam(I think the correct thing is to move 'ssh_server' into an attribute with a better name, and move the .join() into the .handle() method14:41
jam)14:41
vilaI think we should do one event.wait() in verify_request to wait for the key exchange and set an event, wait for this event in handle() and do a join() in finish()14:43
vilaWhat I suspect is going on is that the thread spawned by paramiko is using the other side of the channel (the unencrypted one) and this should be blocked during th key exchange14:44
vilajoining the connection should occur only when the conversation through the encrypted channel is finished14:45
=== Ursinha-zzz is now known as Ursinha
vilayour fix works, because it does that but it doesn't expose how the things work (or at least how I think they work)14:45
vilaI'm pretty sure there is something similar in paramiko when handling sftp connections14:48
jamvila: I thought about having a second event, and even did that for a while15:06
jambut the event only triggers when the run() method exits, which is equivalent to .join()15:06
vilathe run method always exist on Thread15:06
vilameh, are you saying run == join ???15:08
jamvila: I'm saying that triggering an event at the very end of run() and waiting on that event is equivalent to waiting on the thread via join15:08
vilaThat's unrelated to what I'm talking about then15:13
vilaWhat I'm saying is that I suspect that the key exchange and the socket use happen in different threads and these threads needs to be sync15:14
jamvila: are you saying socket or channel?15:28
jamit all happens in the same thread, it happens *in the same loop*15:28
jam(partially because a long running ssh connection will need to re-key itself after ~2^30 bytes, so it makes sense to have the check be in the loop)15:29
vilareally ? There could be multiple Channels for the same Transport and I thought the key exchange is shared between the channels so handled by the transport15:29
vilawhereas the "socket" I'm referring to is the unencrypted side of the *channel*15:30
jamvila: still digging through the code a bit15:37
jamthere is only one thread that processes the communication15:37
jam(Transport.run())15:37
jamand things it calls must only be entered via a single thread15:37
jamhowever, when spawinng a channel and doing something like 'shell' request15:37
jamparamiko itself doesn't implement those functions, so it is a bit hard to say for sure. Certainly our implementation spawns a subprocess and 3 threads to pass the bytes from the process back to the channel15:41
jamthe channel itself is threadsafe, in that you can have multiple threads calling 'send()' simultaneously15:42
jamwhich, honestly, seems like a bad design15:42
jamgiven that you'll fill a single channel with random intermingled content15:43
vilathat's exactly what ssh is about IIUC...15:43
jamvila: well from what I can tell if you had multiple threads you *should* be putting them into different channels15:43
vilaurgh, where ?15:44
jamI guess if your messages are small, you might be able to squeeze a full message w/ header into a single send window15:44
jamvila: you have 1 socket, w/ N channels, and potentially M threads writing to 1 channel15:44
vilayou shouldn't have to care about that but I'm wondering if that may explain some problems with the smart server on lp15:44
vilaoh, one thread one channel, yes, sorry misread transport there15:45
jammaybe I should say "M threads *per* channel"15:45
jamso N*M potential threads writing15:45
vilaI think there is always and only 2 threads per channel, the (hidden) paramiko one and the user one15:46
jamyour earlier statement... yes the key exchange is shared between channel15:46
jamvila: no extra thread for a channel for paramiko15:46
vilabetween channelS , one per transport15:46
jamif you have 1 transport and 10 channels15:46
jamyou have 1 thread from paramiko, and N for the channels from the *user*15:46
jamvila: we, for example, spawn *3* threads all talking on the same channel15:47
jamwith the extra complexity that you can read, write and write-to-stderr on the same channel15:47
vilawell, one reading, two writing to the same socket propably.. but wow, both closing the same channel..15:49
jamvila: so what happens is that you have 2 messages you can put on the channel15:50
jamMSG_CHANNEL_DATA (which is stdout)15:50
jamand MSG_CHANNEL_EXTENDED_DATA which allows you to prefix it with yet-another identifier15:50
jamin this case '1' to indicate stderr15:50
vilaright, so Transport and Channel can more or less be seen as the encrypted side and the non encrypted side right ?15:51
jamvila: transport is the multiplexed controller, I don't know that I would call it the encrypted side, though it probably does do the encryption15:56
vilabecause the encrypted bytes goes into it and goes out of it, the channels see only unecrypted bytes15:57
maxbHrm. I just emailed the bazaar ML, and got a stupid autoresponse from joe1@assistly.com, as if someone has signed an automated support desk up to the mailing list16:15
jamvila: so in paramiko terms the 'packetizer' is the one that actually encrypts and decrypts content16:20
jamhowever, there is only 1 and it is controlled by the Transport16:20
=== Ursinha is now known as Ursinha-lunch
vilajam: fits my mental model16:22
vilajam: So the key exchange happens there right ?16:22
jamvila: key exchange is controlled by transport16:23
vilajam: isn't it what I just said ?16:23
jam(Transport._send_key_init)16:23
jamvila: a bit unclear where 'there' was, since I listed both Packetizer and Transport16:23
vila<vila> right, so Transport and Channel can more or less be seen as the encrypted side and the non encrypted side right ?16:24
vila<jam> vila: transport is the multiplexed controller, I don't know that I would call it the encrypted side, though it probably does do the encryption16:24
vila<vila> because the encrypted bytes goes into it and goes out of it, the channels see only unecrypted bytes16:24
jamso actually, *Transport* tends to deal in unencrypted bytes (including the key exchange) and packetizer is the one that encrypts/decrypts it16:24
vilajam: now you're really playing with words... the initial problem is no know whether we need to sync the thread doing the key exchange and the one doing the smart server stuff16:25
vilas/no know/to know/16:25
jamvila: we shouldn't start the smart server until the key exchange has completed16:26
jambut 'start_server()' is enough to ensure that16:26
jamand given that 'starting the smart  server' occurs as a 'please spawn the server' request via a channel, we don't have an opportunity to start it earlier16:26
vilajam: if it was enough join() wouldn't be needed16:26
jamvila: the reason we have to *join* is because we have to have the StubSSHServer not *stop* until we've actually finished talking16:27
jamand it stops when the requests have been "handled"16:27
vilajam: which is why I want to do that in finish()16:27
jamvila: the way the code is written it doesn't matter, but sure, it does make sense to do it there16:28
jamI don't think I've ever argued that point16:28
jamI've argued that adding an event that you wait on before you wait on .join doesn't make sense16:28
vilaBut I never said that16:28
jamvila: you wanted to wait on an event in '.handle' and then 'thread.join' in finish16:29
vilajam: not *that* event you're talking about16:29
vilayes, that's a different one16:30
vilaI'd like to have setup only goes until the key exchange is done16:30
jamwhat event are you talking about?16:30
jamsure16:30
vilahandle covers only the smart server stuff16:30
vilaand fiinish only doing join16:30
jamhandle does nothing today, and we don't have a point to interrupt to actually do something16:30
vila:)16:31
jamunless you want to .join() in handle, or add an artificial event to wait for16:31
vilathe later16:31
jamvila: why add an artificial event that only fires when the thread is exiting?16:33
vilaexcept I'm still not convinced it's so artificial because I think the key exchange and the smart server stuff are in different threads (and by that I mean replacing the subprocess spawn (which takes time) by a direct call to TestingSmartConnectionHandler   which is the inline version16:33
vilanot when it's exiting, when the key exchange has been done16:33
vilajam: i.e. you had a comment: This blocks until the key exchange has been done16:34
vilajam: it's a good comment, let's make it true and clear :)16:34
jamvila: it is true today16:34
jamvila: regardless the "check_channel_exec..." can only happen once the transport has established the key exchange, since it is an explicit request from the client to the server that it wants us to spawn 'bzr'16:36
jamvila: I don't really care whether we wait for the key-exchange to finish in 'setup' or in 'handle', but it seems to me that 'setup' is perfectly reasonable16:37
vilaI view setup and finish as responsible for the Transport and handle as responsible for the channel, if you're sure the key exchange has occured once start_server returns, I'm happy16:40
vilajam: Reading the history of your branch, I got the feeling this wasn't the case, IMBW16:40
vilajam: the fact that you waited on two events for example... now, if paramiko does it job I'm fine16:41
vilajam: but I still don't get how the Transport was shut down early (especially since paramiko use daemon threads)16:41
jamvila: I can create an event pass it in and wait for it, but ssh_server exits when the key exchange has completed. *I* did not realize that until recently16:42
vilajam: ha, good, one missing bit less16:42
jamvila: the Transport isn't stopped, the *socket* is closed16:43
jamhttp://paste.ubuntu.com/487305/16:43
jamnotice the try/except close_request()16:43
jamor in the success case: http://paste.ubuntu.com/487306/16:44
vilaon exceptions only16:44
jamwhich also calls "close_request()" when the processing completes16:44
vilaright, but handle() is called only after setup() returns16:45
vilaso that rules out these close_request()16:46
jamvila: no it doesn't16:48
jamwhat was happening is that we weren't waiting for paramiko.Transport to finish16:48
jamwhich meant that .setup() .handle() .finish() was being called16:48
jamand then the calling process would then call close_request()16:48
jamwhich would close the socket16:48
jambefore Transport was able to finish talking16:49
vilajam: but now we're calling join(), which means  we are waiting for paramiko.Transport to finish and yet we are able to process the request ?16:49
jamvila: nothing happens in .handle or .finish, so the request is initialized and finished in .setup()16:50
jamI don't understand where you are confused16:50
jamwhile we are blocking the request thread in waiting for Transport to finish16:50
jama request is sent by the client thread, which is then processed by transport, and handled on a given channel16:51
jamwhich says "start the smart server" which we spawn a process and 3 more threads16:51
vilaok, ok, got it, we closed the encrypted side16:51
jamto ferry_bytes16:51
jamvila: right16:51
vila...and there was one more thread still running on the channel side ?16:53
vilano, the transport one, but it gounf the socket closed16:53
vilagounf, interesting, found16:53
vilaone-by-one on qwerty16:53
vilaok, that was indeed where I was confused, in all the other implementations there is no distinction between the 'request' socket on the one seen by the bzrlib.transport, whereas here, they are different, not wrapped or anything, really different16:55
vilajam: so, s/ssh_server/ssh_connection/ ?16:56
vilajam: that would at least make things a bit more inline with the rest of the code base, but less with the paramiko side :-/ Shudder, see ? How can we address your remark about 'server' being overused, now that you've hacked a bit more in the space ?16:57
jamvila: for example, using 'paramiko_transport' instead of ssh_server, probably16:58
jamfor the rest of the stack16:58
jamI think using 'connection' or 'request' is nice16:58
jamwe use TestServer16:58
jamwhich then spawns a real server16:58
jamI'm not sure about that16:58
jammaybe calling it a Resource ?16:58
vilausing 'paramiko_transport' instead of ssh_server +1 (explaining that it's close to an ssh server from a user pov)17:01
vilas/TestServer/Resouce/ ?17:02
vilas/TestServer/Resource/ ?17:02
jamTestServer => TestResource maybe17:02
jamthough I see "Test*" and I think it is a TestCase17:02
vilaa bit vague :-/17:02
vilaServerProxy ?17:02
vilapfff17:02
jamthe other thing is where else do these 'servers' act?17:03
jamthe SFTP server, the FTP server, etc17:03
jamService versus Server ?17:03
vilaFTPSocketServer and keeping TestServer...17:04
vilahmm, may be that whole discussion could have been avoid by s/setup/handle/....17:05
manus_quick question: is there a way to check in a file once, and then tell bzr to ignore any *further* local changes? e.g., a default configuration file is checked in that everyone will change locally, but which should never be recommitted (unless explicitly unignored first)?17:31
=== Ursinha-lunch is now known as Ursinha
manus_is that even possible?17:36
manus_I guess this says "not yet": https://bugs.launchpad.net/bzr/+bug/20902517:37
ubot5Launchpad bug 209025 in Bazaar "ignore local changes (affected: 4, heat: 18)" [Wishlist,Confirmed]17:37
manus_huh17:37
vilamanus_: the best answer I know of is to have a template file that is copied on install17:48
vilamanus_: a file is either versioned or not versioned, if you have to decide for each change, you may as well use two files, at least it makes the consequences clearer17:49
vilamanus_: when you have interested changes, you can always do 'cp <file> <template>' + edit + commit17:50
=== beuno is now known as beuno-lunch
manus_true, though it would be nice to have "ignore --local" and "ignore --remote" options17:54
=== manus_ is now known as manus_-lunch
=== manus_-lunch is now known as manus_
=== deryck is now known as deryck[lunch]
=== beuno-lunch is now known as beuno
=== deryck[lunch] is now known as deryck
facundobatistahello everybody20:14
facundobatistaI have this niiiiiiice error message:20:14
facundobatista$ bzr merge-upstream ../magicicada_0.2.orig.tar.gz --version=0.2 lp:magicicada20:14
facundobatistaUsing distribution maverick20:14
facundobatistabzr: ERROR: An inconsistent delta was supplied involving u'/COPYING', 'copying-20100604211115-39tdwa0pbzb5kj4b-1'20:14
facundobatistareason: Attempt to add item at path already occupied by id 'copying-20100608181145-hj2h11vcpksyqwck-36'20:14
* facundobatista is not even understanding it :|20:14
jelmerfacundobatista: Hi20:15
facundobatistahello jelmer20:15
jelmerfacundobatista: If I remember correctly this is a known bug for which a fix is available.20:15
abentleyjam, I heard something about bzr allowing merging branches with differing file-ids.  Is that something being worked on?20:16
jamabentley: it isn't something that *I've* been working on20:16
abentleyjam, and not something you've heard about?20:17
jamI think I've heard about it, but more in the context of something like bzr-builder20:17
abentleyjam, e.g. using the MergeIntoMerger?20:18
jamabentley: more using by-path merging20:18
abentleyjam, okay, thanks.20:19
facundobatistajelmer, do you know what that fix would be?20:20
jelmerfacundobatista: Not off the top of my head.20:21
jelmerfacundobatista, I would recommend having a look at bzr-builddeb20:21
jelmerfacundobatista, I would recommend having a look at bzr-builddeb's bug tracker20:21
facundobatistajelmer, I think this is the one: https://bugs.edge.launchpad.net/bzr-builddeb/+bug/61961420:23
ubot5Launchpad bug 619614 in bzr-builddeb "InconsistentDelta during merge-upstream (affected: 1, heat: 5)" [Critical,Fix committed]20:23
* facundobatista patches his bzr20:23
facundobatistajelmer, it worked!!!20:29
facundobatistajelmer, thank you!20:29
jelmerfacundobatista: great :-)20:29
jelmerjam: 'morning20:31
jelmerjam: do you know what happened to bzrlib.tests.TestLoader ?20:32
jelmerjam: bzr-plugin-info relies on it existing, so I wonder what it should be using instead; NEWS doesn't mention anything.20:32
ReachingFarr1I currently have a project on my local machine.  I would like to place a copy of it in a shared repository on my server, make that copy the "master", then bind my local copy to it.  What is the correct series of commands to do such a thing?20:41
dashReachingFarr1: 'bzr init-repo /path/to/repo' on the server20:43
ReachingFarr1dash: Got that one done.20:43
dash'bzr push bzr+ssh://host/path/to/repo/branchname' on the client20:43
dashthen 'bzr bind bzr+ssh://host/path/to/repo/branchname' on the client20:43
ReachingFarr1dash: Ok, and that will work because the destination is inside an initialized directory?20:43
dashright20:44
ReachingFarr1dash: Ok.  I think that was the problem I was having with push earlier.  Thanks a lot.20:44
ReachingFarr1dash: So on my server that directory now has a .bzr folder and nothing else.  How would one cause the current version of the files to appear?20:46
dashReachingFarr1: 'bzr checkout'20:47
ReachingFarr1dash: Excellent.  Thanks  again.20:48
jamjelmer: vincent recently changed tests/__init__.py to only import the module rather than the classes themselves. I'm voting to bring back the old style, but it hasn't gained much traction yet21:01
jamvila: ^^ care to respond (if you get back online tonight)21:03
lifelessjam: old style ?21:06
jamlifeless: from bzrlib.tests import TestLoader, TestCase, TestSuite21:07
jamor21:07
jamfrom bzrlib import tests; tests.TestCase tests.TestLoader, etc.21:07
lifelessah yes, several plugins got hit by that21:07
lifeless+1 on restoring it with a backport :)21:07
jamlifeless: I thought it only made it into 2.3, is it a 2.2 thing, too?21:07
lifelessI'm not sure; I'm seeing bug reports on plugins increasing is all21:07
jelmerjam: Ah, ok21:08
jamlifeless: yeah, it is just bzr.dev, just happened with Vincent's recent "clean up leaking tests" change21:08
lifelessI *thought* it would be 2.2 because I saw a release happen21:08
jelmerjam: For now I've just proposed imports from the TestUtil module directly.21:08
jamjelmer: I'd rather see TestLoader from tests, as it makes a better model than finding it in bzrlib.tests.TestUtil, but you're right that your method still works across all versions21:09
cody-somervilleWhats the correct way to revert a single revision?21:11
jamcody-somerville: you mean to reverse the changes created in a given rev?21:12
jambzr merge -r REV..REV-121:12
cody-somervilleaye21:13
cody-somervilleOkay, thanks.21:13
jamsorry small typo21:13
jambzr merge . -r REV..REV-121:13
cody-somervillewill that work if I have uncommitted changes in my tree?21:13
jamthe '.' is important, since otherwise it reverts the rev from the default merge location21:13
jamcody-somerville: you can supply --force if you must, depends on whether the changes getting intermixed matters to you21:13
jamjelmer: do you remember the bug #?21:14
jambug #62743821:15
jamfound it21:15
ubot5Launchpad bug 627438 in Bazaar PQM Plugin "import failure in plugin-info during selftest (affected: 1, heat: 6)" [Undecided,New] https://launchpad.net/bugs/62743821:15
=== abentley_ is now known as abentley
jamlifeless: timeout trying to submit the merge proposal... :)21:19
jamOOPS-1706EC200621:20
ubot5https://lp-oops.canonical.com/oops.py/?oopsid=1706EC200621:20
jamsecond submit worked21:20
jamjelmer: https://code.edge.launchpad.net/~jameinel/bzr/2.3-test-loader/+merge/3448121:20
lifelessjam: thanks21:20
jelmerjam: thanks21:20
jelmerjam: r=me21:46
lifelessjam:21:47
lifelessTotal time: 13419 ms21:47
lifelessStatement Count: 3421:47
lifelessSQL time: 13260 ms21:47
lifelessjam: timeout on the INSERT INTO - 13 second query. has to be lock contention I think.21:48
lifelessjam: could you file a bug ?21:48
jamlifeless: sure, but against what project?21:50
lifelessjam: launchpad-code21:50
jamlifeless:  bug #62908721:53
ubot5Launchpad bug 629087 in Launchpad Bazaar Integration "timeout submitting merge proposal (affected: 1, heat: 6)" [Undecided,New] https://launchpad.net/bugs/62908721:53
jamlifeless: on your new "search only grabs 3-out-of-4 hits", would it be possible to remove 'common' words?21:53
jamI find I rarely get any hits while submitting new bugs now, and while I can chop things out of my summary21:54
jamit seems like words like "the" "while" etc make for better summaries21:54
jambut make for bad hits in the db21:54
lifelessproblem is that common is defined in the corpus21:54
lifelessso that was one of the cuases of timeouts - it analysed the corpus on every reqyest21:54
lifelessyes, its fixable, not short term.21:54
jamlifeless: true, though you could hard-code some pretty easily22:22
lifelessjam: not for 20K projects ;P22:22
lifelessstop words are eliminated already22:22

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