/srv/irclogs.ubuntu.com/2007/09/07/#bzr.txt

=== Rotund [n=rotund@d28-101.rb2.lax.centurytel.net] has joined #bzr
grimboy_ukHey, is there a way to get bzr branch to get the latest revision first, copy it out so it's a working copy *then* get the history.12:21
=== Treeform [n=me@c-76-104-152-100.hsd1.wa.comcast.net] has left #bzr ["rats]
grimboy_uk?12:21
abentleygrimboy_uk: No.  That would mean fetching a bunch of data twice.12:23
grimboy_ukBut it would also mean starting quicker.12:26
grimboy_ukSince sometimes history takes ages.12:26
=== fog [n=fog@debian/developer/fog] has left #bzr []
NfNitLoopgrimboy_uk: the only way to get the latest revision is to build it from the entire history, afaik.12:29
NfNitLoopso your first step would:  1) fetch all the history, 2) make a working copy from it.12:30
NfNitLoopthen your second step would:  3)  fetch all the history.12:30
NfNitLoopIt works as it currently does for a reason.  :)12:30
NfNitLoopIt may work differently if/when horizon branches/checkouts are implemented.12:31
NfNitLoopBut my guess is that that would require a smart server.12:31
abentleygrimboy_uk: Fetching partial history is something that jelmer's working on.  But fetching the working tree, and then fetching all history as one operation doesn't make sense.  It takes longer.12:32
NfNitLoopabentley: plus, not all repositories will have a working tree.12:33
NfNitLoopand you can't rely on the working tree being up to date.12:33
abentleyNfNitLoop: Oh, fetching from the remote working tree would be total crack.12:38
NfNitLoopaah, ok.  :)12:39
NfNitLoopabentley: any idea how you'll end up with a working tree with a partial history, then?12:39
NfNitLoopabentley: am I right in assuming you'll either need a smart remote server, or you'll still have to fetch the whole history?12:40
abentleyI was talking about fetching only the data to build the working tree from the repoistory, and then fetching all the data.12:40
abentleyNfNitLoop: No, there's no reason you'd need a smart server.  You just fetch what you want.12:40
NfNitLoopabentley: wouldn't you possibly need the whole history of a file to rebuilt it in its current state?12:41
NfNitLoopSorry if I'm way off... I don't actually program vcs back-ends.  :)12:41
abentleyNo.  The storage format has periodic snapshots of the complete text.12:41
NfNitLoopOh really.   As it is now?  Or as it will be with horizon support?12:42
abentleyAs it is now.12:42
abentleyIt's a performance thing.  We must not scale with the length of history.12:42
NfNitLoopYeah, I wondered about that.12:43
NfNitLoopHmm.  What's the (rough) algorithm for deciding when a new snapshot should be stored?12:43
NfNitLoopis it per file, or per the entire repo?12:44
abentleyI don't know the current status.  Originally, it was every 25 revisions, but it might be "every time the size of deltas exceeds the size of the fulltext".12:44
abentleyIt is per file.12:44
abentleyAs it turned out, we do scale with the length of history, due to the indexes.  Which is the problem keir is working on.12:46
NfNitLoopHmm.  How so?   because the entire index must be read for an operation?12:54
NfNitLoopAnd that's O(n) and not O(log(n))?12:54
abentleyNfNitLoop: Yes.12:57
=== marcus [n=user@gnu/the-hurd/marcus] has joined #bzr
abentleyThe new pack format is designed to make recent data fast, at the expense of making old data slow.12:58
marcushi.  when I use a shared repository, is there anything I need to pay attention to when removing branches?  or should I just use rm -fR branch?12:59
abentleyrm -R branch should do fine.12:59
abentleyNo need for the -f.01:00
abentleyThere aren't any caveats, except that removing the branch doesn't remove the revisions you've committed.01:00
abentleyJust a pointer to them.01:01
NfNitLoopabentley: I was talking about this earlier with someone.   Isn't there a command that will prune your shared repo?01:01
NfNitLoopor was it a plugin?01:01
abentleyYeah, there's a plugin.01:02
NfNitLoopmarcus: worst case, though, you create a new shared repo, branch your remaining branches over there, and delete your old/bloated repo.  (if its size becomes too big.)01:02
NfNitLoopbut that should only happen if you're working with lots of patches that you're throwing away.  (ie: rarely)01:03
NfNitLooplots of *big* patches.  :p01:03
=== pygi is now known as pygi_test
marcusNfNitLoop: you mean that is semantically what the pruning plugin does?01:13
marcusthanks, guys.  I didn't check out all plugins.  It makes sense for a pruning operation to exist.01:14
abentleymarcus: Yeah, it does, but only for security or if you've accidentally committed an ISO.01:15
=== gldnspud [n=gldnspud@72.171.93.139] has joined #bzr
marcusabentley: maybe I was just confused because I don't have the right mental model about internal details.  from a newbie point of view, it's more comforting if the operation that removes a branch is available through bzr, or at least documented that rm -R is safe.01:19
=== jml [n=jml@203-113-250-169-static.TAS.netspace.net.au] has joined #bzr
marcusirregardless of pruning.01:19
abentleyYeah, we should probably make it clearer that rm -R is safe.01:22
marcuswhile I am here.  I recently imported an SVN repository, but not via bzr-svn but using a different stand alone tool (svn2bzr.py).  Trying to push bzr changes back to svn failed with an "no merge base revision specified", but I couldn't figure out how to set a merge base revision.01:24
=== phanatic [n=phanatic@dsl54009CAF.pool.t-online.hu] has joined #bzr
abentleymarcus: Because you didn't use bzr-svn, you can't push back.01:25
=== sii [n=sii@tranquillity.sii.se] has joined #bzr
=== dholm [i=dholm@gentoo/developer/dholm] has joined #bzr
=== SteveA [n=steve@canonical/launchpad/SteveA] has joined #bzr
=== quicksilver [n=jules@212.69.38.59] has joined #bzr
=== [PUPPETS] Gonzo [i=gonzo@80.69.47.16] has joined #bzr
=== metze_food [n=metze@ip-217-172-181-76.mx-netz.de] has joined #bzr
=== taaz [n=dlehn@66.37.66.32] has joined #bzr
=== spiv [n=andrew@canonical/launchpad/spiv] has joined #bzr
=== Basic [n=Basic@gatekeeper.real-time.com] has joined #bzr
=== ThomasAH [n=thomas@aktaia.intevation.org] has joined #bzr
=== siretart [i=siretart@ubuntu/member/siretart] has joined #bzr
=== AndyP [n=andyp@ubuntu/member/welshbyte] has joined #bzr
=== duckx [n=Duck@tox.dyndns.org] has joined #bzr
=== dato [n=adeodato@debian/developer/adeodato] has joined #bzr
=== marcus [n=user@gnu/the-hurd/marcus] has joined #bzr
=== gldnspud_ [n=gldnspud@72.171.93.139] has joined #bzr
=== LarstiQ [n=larstiq@cust.7.157.adsl.cistron.nl] has joined #bzr
=== meuh [n=meuh@pdpc/supporter/active/meuh] has joined #bzr
=== Theuni [n=ctheune@uter.gocept.com] has joined #bzr
=== dirker [n=dirker@woosome.net] has joined #bzr
=== alla [n=alla@soy.cyber.com.au] has joined #bzr
=== lifeless [n=robertc@ppp245-86.static.internode.on.net] has joined #bzr
=== thatch [n=thatch@pool-71-170-167-50.dllstx.fios.verizon.net] has joined #bzr
=== jeremyb [n=jeremy@unaffiliated/jeremyb] has joined #bzr
=== mw [n=mw@189.146.24.28] has joined #bzr
=== james_w [i=jw2328@jameswestby.net] has joined #bzr
=== Rotund [n=rotund@d28-101.rb2.lax.centurytel.net] has joined #bzr
=== bigdo1 [n=scmikes@79-67-14-216-arpa.cust.cinci.current.net] has joined #bzr
=== jml [n=jml@203-113-250-169-static.TAS.netspace.net.au] has joined #bzr
=== gldnspud [n=gldnspud@72.171.93.139] has joined #bzr
=== niemeyer [n=niemeyer@200-103-134-216.ctame705.dsl.brasiltelecom.net.br] has joined #bzr
=== grimboy_uk [n=grimboy@85-211-251-75.dsl.pipex.com] has joined #bzr
=== Kamping_Kaiser [n=kgoetz@gnewsense/friend/kgoetz] has joined #bzr
=== pygi_test [n=mario@83-131-64-132.adsl.net.t-com.hr] has joined #bzr
=== sverrej [n=sverrej@tul-1x-dhcp017.studby.uio.no] has joined #bzr
=== herzel [i=herzel@gateway/tor/x-b6c989ddb8048cdc] has joined #bzr
=== mthaddon [n=mthaddon@canonical/launchpad/mthaddon] has joined #bzr
=== cory [i=cory@zeus.penguinhosting.net] has joined #bzr
=== statik [n=emurphy@canonical/launchpad/statik] has joined #bzr
=== ddaa [n=ddaa@canonical/launchpad/ddaa] has joined #bzr
=== abentley [n=abentley@bas8-toronto63-1088754407.dsl.bell.ca] has joined #bzr
=== uws [n=mathilda@213.207.93.150] has joined #bzr
=== NfNitLoop [i=codyc@cpe-70-112-28-217.austin.res.rr.com] has joined #bzr
=== ion [n=ion@70-58-119-250.phnx.qwest.net] has joined #bzr
=== pete__c_ [n=pete@015-806-741.area5.spcsdns.net] has joined #bzr
=== kanhaiya_kk [n=kanhaiya@freemap.in] has joined #bzr
=== arjenAU [n=arjen@mysql/community/arjenAU] has joined #bzr
=== michelp [n=michelp@70.103.91.130] has joined #bzr
=== jelmer [n=jelmer@157pc196.sshunet.nl] has joined #bzr
=== abadger1999 [n=abadger1@65.78.187.68] has joined #bzr
=== _logger [n=_logger@adsl-75-51-62-134.dsl.chcgil.sbcglobal.net] has joined #bzr
=== welterde [n=welterde@trujillo.srv.pocoo.org] has joined #bzr
=== mwh [n=mwh@62-31-157-102.cable.ubr01.azte.blueyonder.co.uk] has joined #bzr
=== bigdog [n=scmikes@79-67-14-216-arpa.cust.cinci.current.net] has joined #bzr
=== ryanakca [n=ryan@ubuntu/member/ryanakca] has joined #bzr
=== jdong [n=jdong@ubuntu/member/jdong] has joined #bzr
=== bac [n=bac@canonical/launchpad/bac] has joined #bzr
=== vila [n=vila@lec67-4-82-230-53-244.fbx.proxad.net] has joined #bzr
=== dhon__ [n=dhon@60-240-97-109.static.tpgi.com.au] has joined #bzr
=== troy_s [n=aphorism@d206-116-6-170.bchsia.telus.net] has joined #bzr
=== ubotu [n=ubotu@ubuntu/bot/ubotu] has joined #bzr
=== rotty` [n=user@81.223.119.66] has joined #bzr
=== ipkiss [i=ipkiss@nat/ecp/x-0fa243067226cbc6] has joined #bzr
=== jrydberg_ [n=johan@213.115.45.46] has joined #bzr
=== dennda [n=dennda@ubuntu/member/dennda] has joined #bzr
=== sevrin [n=sevrin@ns1.clipsalportal.com] has joined #bzr
=== Admiral_Chicago [n=FreddyM@ubuntu/member/admiral-chicago] has joined #bzr
=== hmeland [i=29578@klodrik.uio.no] has joined #bzr
=== Odd_Bloke [i=oddbloke@compsoc.sunion.warwick.ac.uk] has joined #bzr
=== BjornT [n=bjorn@canonical/launchpad/BjornT] has joined #bzr
=== jkakar [n=jkakar@204-174-36-45.dhcp802.dsl.ucc-net.ca] has joined #bzr
=== radix [n=radix@70.91.133.157] has joined #bzr
=== elmo [n=james@83-216-156-21.jamest747.adsl.metronet.co.uk] has joined #bzr
=== johnlr2 [n=johnlr@203-206-162-97.perm.iinet.net.au] has joined #bzr
=== thumper [n=tim@canonical/launchpad/thumper] has joined #bzr
=== fullermd [n=fullermd@adsl-072-148-013-213.sip.jan.bellsouth.net] has joined #bzr
=== Kinnison [n=dsilvers@spoo.flarn.net] has joined #bzr
=== Peng_ [n=mnordhof@fl-69-69-148-134.dyn.embarqhsd.net] has joined #bzr
=== gldnspud_ is now known as gldnspud
=== NfNitLoop [i=codyc@cpe-70-112-28-217.austin.res.rr.com] has joined #bzr
=== orospakr [n=orospakr@bas4-ottawa23-1088826610.dsl.bell.ca] has joined #bzr
abentleyOh, netsplit.  Haven't seen that for a while.01:32
Peng_24.2 second lag. Wheee.01:33
Peng_Usually I'm not on the wrong end of one.01:33
Peng_46.1-second lag! 18.2.01:33
=== Peng_ is now known as Peng
=== Verterok [n=ggonzale@184-220-114-200.fibertel.com.ar] has joined #bzr
=== pygi_test is now known as pygi
=== igc [n=igc@ppp59-167-96-213.lns3.bne1.internode.on.net] has joined #bzr
igcmorning01:55
=== marcus [n=user@gnu/the-hurd/marcus] has left #bzr ["ERC]
lifelesshi abentley02:07
lifelessabentley: I'm not here today :) - just whipping past02:07
abentleylifeless: Okay.  I may have a CommitBuilder.abort patch for you in a bit.02:08
=== beuno [n=beuno@44-111-231-201.fibertel.com.ar] has joined #bzr
=== beuno [n=beuno@44-111-231-201.fibertel.com.ar] has joined #bzr
=== beuno [n=beuno@44-111-231-201.fibertel.com.ar] has joined #bzr
=== mw is now known as mw|out
=== jbailey [i=jeffbail@nat/google/x-d54745752e4d3e55] has joined #bzr
=== grimeboy [n=grimboy@85-211-247-55.dsl.pipex.com] has joined #bzr
=== jamesh [n=james@canonical/launchpad/jamesh] has joined #bzr
Basicmy osx has even stumped the gurus (for now)02:34
Basicwas hoping it was something specific to my box02:34
abentleyAre you the guy with the WoW?02:36
Basicno comment :-P ... yes02:36
Basicall my guild osx people are poking fun at me and how this line-x thing doesn't "work" under osx02:37
Basicwill work through some of the ulimit things I saw today. will do the selftest and get with ulimit on open files at 4096 and see what happens.02:39
abentleyWell, I'm the TreeTransform guru and I'm hardly stumped.02:40
Basicoh? What's John's guru-ness? :-)02:41
abentleyJohn's guruness?  The patience diff code  and checkouts are the first things to come to mind.02:41
abentleyBut I am the principal creator of TreeTransform.02:42
abentleyAnyhow, the first thing to do is disable TreeTransform.finalize().  It's masking the real error.02:42
abentleyJust edit transform.py and make finalize return early.02:44
abentleyThen rerun the operation that usually fails.02:44
BasicI'll give it a try, thank you for the advice, rid here, I'll work on it on the commute home.02:47
=== cypherbios [n=cyr@ubuntu/member/cypherbios] has joined #bzr
=== keir [n=keir@76-10-155-93.dsl.teksavvy.com] has joined #bzr
keirlifeless, ping!02:58
PengSpeaking of patiencediff, <Peng> Hmm, easy way to run patiencediff on a directory? python -m bzrlib.patiencediff only accepts files.03:02
Peng:(03:02
igckeir: lifeless may not be around (much) today - public holiday03:04
keiroh, i thought that was yesterday03:04
keiraah timezones03:04
=== abadger1999 [n=abadger1@65.78.187.68] has left #bzr []
abentleykeir: I am serious when I say if you implement your graph index in C, we will not merge it.  We write in python first, and optimize in pyrex if justified.  Look how long it's taking your patience diff to get merged.03:15
=== Rotund [n=rotund@d28-101.rb2.lax.centurytel.net] has joined #bzr
keiri did not write patience diff03:16
=== abadger1999 [n=abadger1@65.78.187.68] has joined #bzr
keirand i'm writing it in python03:17
keirso please, chill!03:17
abentleyYou said you were very tempted to write it in C.  I wanted to be clear about this, because I didn't want you to write it in C and then be upset when it didn't get merged.03:19
keirthere has to be a python version because of all the funky transports03:20
keirbut i will write a C version for local disk, just not immediately.03:20
abentleyFor compiled code, I think we have a preference for Pyrex over C.03:21
keirwell, the issue is that i can see this bit of code useful outside of bzr03:22
abentleyAnd it may well be that only a small section is performance critical.03:22
keirin which case pyrex is out03:22
=== herzel [i=herzel@gateway/tor/x-c35cba79cc778ab0] has joined #bzr
keirbut whatever, python first03:22
=== NamNguyen [n=namnt@203.162.163.50] has joined #bzr
abentleyCool.  Thank you for working on this.03:24
keiri'm writing this up for the ML as we speak03:24
keiri have a few questions before i send though03:24
keirwhich you can prob answer03:25
keirin the pack-based repo, what is different graphs are stored?03:25
keirand what is the size / type of each bit of data?03:25
=== bigdog [n=scmikes@79-67-14-216-arpa.cust.cinci.current.net] has joined #bzr
keirrather, average number of edges out from a node, in from a node03:26
keiri'm not looking for exact numbers, just trying to get a feel03:26
abentleyWell, there are four things we store: revisions, inventories, signatures, and file texts.03:26
=== jamesh [n=james@canonical/launchpad/jamesh] has joined #bzr
keiri've been working on the graphindex without *really* understanding the rest of bzr, because i enjoy these types of fast compact data structure problems03:26
abentleyrevisions and inventories have the same graph layout and revision-ids.03:27
keirok03:27
abentleyfile-texts are subset of the revision graph.03:28
abentleyYou have one for each file, and it only gets a new revision when the file is modified.03:28
abentleySo given two nodes in a file graph, they have the same relationship as their corresponding nodes in the revision graph.03:29
keirhmm, ok03:29
abentleyTake the NEWS file for an example.03:29
abentleyIf NEWS is modified in revision A and revision B, there will be entries in its graph for those revisions.03:30
keiri see03:30
=== jml [n=jml@ppp121-44-221-92.lns1.hba1.internode.on.net] has joined #bzr
abentleyIf B is descended from A in the file graph, B will descend from A in the revision graph.03:30
keirok, i understand. so file texts are the revision graph if you eliminate all other files from the revision graph03:31
keiror rather, the subset of the revision graph in which that file was modified03:31
abentleyI don't follow you.  Many files may be altered in the same revision.03:32
keirso in the rev graph, the storage is revID->???, and edges are more revID's03:32
abentleyThere is a graph for NEWS, another for builtins.py, another for README, etc.03:32
abentleyYes, revision ids are the same in all of our graphs.03:33
keirabentley, as in, if you imagine a graph is k->v and k->k*, for the rev graph, what are the values?03:34
abentleyFor the revision graph A -> B -> C, let's say NEWS is only modified in A and C.  This means that the NEWS graph will be A -> C.03:34
keiryes, i understand03:34
keirso the rev graph has no actual values in each node? just the references to other revids?03:35
abentleyWhat are the values associated with nodes in the revision graph?03:35
keiryes03:35
abentleyThey are the commit metadata.03:35
keirbasically, I think my current graphindex is so cool we may want to store more than just an index in it :)03:36
abentleyCommit message, timestamp, commiter, etc.03:36
abentleyThe cat-revision command should show you exactly what is stored for a revision.03:36
abentleye.g. bzr cat-revision -r -103:37
keirah, neat03:37
keirwoah, xml03:38
keirdo you actually store XML internally?03:38
keiror lzw'd xml or something?03:38
abentleyYes, we do.03:38
abentleyDon't hate us for it :-)03:38
abentleyI should draw your attention to the properties list; this is arbitrary data.03:39
keiri'm usually with jwz on the quote 'some people, when faced with a problem, think "I know, lets use xml.". Now you have two problems.'03:39
keirbut whatever, this is fine03:39
abentleySee the header of xml_serializer.py for a similar sentiment.03:39
keirok, then my next question is, how is the rev graph stored on disk?03:40
abentleyIt is stored in kndx files.03:40
abentleyThe specifics of the knit index format are outside my area of expertise.  But you're working on replacing it, so it can't be altogether perfect.03:42
abentleyThe implementation is KnitIndex in knit.py03:42
keirok03:43
abentleyThe particular kndx is  revisions.kndx03:43
=== jml [n=jml@ppp121-44-221-92.lns1.hba1.internode.on.net] has joined #bzr
abentleySo revisions.kndx serves dual purposes: describe how to extract the revision XML for a given revision, and describe the revision graph.03:46
keirok03:47
abentleyYou can call repository.get_revision_vf() to get an object to play with.  Or you can call revision.get_revision_graph to get a dict-style graph.03:49
abentleyAnother thing about the revision graph is that it applies to all projects in a shared repository.03:50
abentleyWhereas the per-file graphs are almost always for a single project.03:50
keireven though they are stored in the same file03:52
abentleyThe per-file graphs and revision graph are not stored in the same file.03:53
abentley(I'm not sure what "they" referred to)03:54
abentleykeir: When you come back, just say "abentley: ping"04:04
keir(on phone 3 mins)04:04
keirok, back04:06
keiras in, there is one big file-text file, even when the per-file graphs are for a single project04:07
keirin a shared repo04:07
keirabently: ping!04:08
abentleykeir: oops.  Needs "ey" at the end.  Anyhow, I'm back.04:13
keirah, heh04:13
keirnow i see that knitindex and graphindex are parallel :)04:13
abentleyThere is not one big file-text file.  There is one knit & knit index per file.04:14
=== yminsky [n=yminsky@user-0cevcqv.cable.mindspring.com] has joined #bzr
keiraaah, ok04:15
abentleyThey are identified by their file-id, which is used elsewhere in bzr to uniquely identify files.04:15
abentleyAnd because the file-id is semirandom, two projects containing a file named README will have different ids and knits for it.04:16
keireven with the same contents?04:16
abentleyYes.  Bazaar doesn't care about content the same way git and hg do.04:17
keiris this a weakness or a strength?04:17
abentleyWe consider it a strength, because it allows us to import from other systems losslessly.04:17
keirand why would it be considered a weakness?04:21
abentleyTo an extent, other systems will identify some tree-shapes as "the same" even when they were produced separately, and so bzr would consider them different.  This approach also provides obvious ways to validate a tree.04:23
keirok04:29
abentleyAnyhow, our current systems stores revisions, inventories, signatures and file texts separately.  Packs centralizes them.04:32
abentleyWe still need different indexes, because our code expects them to be separate.04:34
keirok04:35
keirwhy?04:35
keirmore accurately, what does the code need that can't be put in one file?04:35
abentleyIn theory, a single file could store all four indices.04:36
abentleyIt's the in-memory representation that needs to treat them differently.04:37
keirthe way i'm writing my stuff, the in memory representation can be (almost) the same as the on disk format04:38
abentleyIn the current pack format, there's an adaptor that converts the index into an index for just a particular file.04:40
abentleyGraphIndexPrefixAdapter04:40
abentleyI think one reason for splitting them up is that they have different access patterns.04:41
keirthat's reasonable04:41
keirand relevant to me; are they mostly repeated traversals?04:41
keirright now, my stuff optimizes for that04:41
keiraka follow links repeatedly04:41
abentleyFollowing the same set of links?04:42
keirbecause in the 'dumb' implementation, that's exactly what's slow04:42
keiras in, you are on file ref A, then you want to go to its successor04:42
keirthen that nodes' successor, and so on and so forth04:42
keirand yes, same 'set' of links04:42
keirin my version, there is only one graph represented (aka not multiple adjacency lists)04:43
keirbecause then you can't order things nicely for repeated traversals04:43
abentleyWell, there are two kinds of access patterns: tree-wide and history-deep.04:43
abentley"bzr checkout" would be tree-wide.  We want one copy of the text, for each text in the tree.04:44
keirwhich is repeated DFS type of thing?04:44
abentleySo we build each text by finding the all the deltas until we hit a fulltext.  Then we apply the deltas to the fulltext to get the version we need.04:45
abentleyI'm not sure what DFS is.04:45
keirdepth first search04:45
keirin my current code, that should be _very_ fast04:45
keirone question: how do you decide which link to follow if there are multiple links?04:46
abentleyYes.  Really, it's depth-only search, because only the lefthand ancestry must be traversed.04:46
keirok, i don't quite understand that04:46
=== orospakr [n=orospakr@bas4-ottawa23-1096745064.dsl.bell.ca] has joined #bzr
abentleyOkay, do you know that Bazaar treats node parents differently depending on their position?04:47
keirno! good to know04:48
abentleyYou get multiple parents in merge situations, right?04:48
keiri apologize for not knowing all this stuff04:48
keiryes04:48
keirOH! i think i get it04:48
abentleySo the lefthand parent is always the revision you had before you did the merge.04:49
abentleyThat's how Bazaar does it, anyhow.04:49
keiryou creat a new edge from before the 'branch' which contains the merge diff04:49
keiror am i talking crazy04:49
abentleyNo, we don't do it like that.04:49
keirsay there's a file that branches, then on each branch there's a few revs, then it merges04:50
abentleyOkay, let's draw a quick graph: A -> B, A-> C, A->D, [C, D]  -> E04:50
keirwhen you go backwards, how do you know which edges to traverse?04:51
keirok, i drew the graph04:52
abentleyOops.04:52
abentleyI goofed on it.04:52
keir:)04:52
abentleyIgnore A->B04:52
keirand B itself?04:53
abentleyYes.04:53
abentleySo the story is I commited revision A.  You branched me, and committed revision D.  At the same time, I committed revision C.04:53
abentleyThen I merged your branch, and committed the result as E.04:54
abentleyBecause I did the merge, C is the lefthand parent of E.04:54
abentleyIf you had done the merge, D would be the lefthand parent.04:54
keiri see04:54
keirand if there was another branch, F, taking the same path A->F->E04:55
keirand you _also_ merged F, then it would be the same04:55
abentleyYes.04:55
keireven though there are edges c->e and f->e04:55
keirok04:55
keirthat's really neat04:55
abentleyYes, heads are ignored in the parent list.04:55
abentleySorry.04:55
abentleyOnly heads are *listed* in the parents list.04:56
keirand that's to prevent repeated merging04:56
abentleySo [C, F, E]  becomes [C, E] 04:56
abentleyOh, repeated merging still happens.04:56
keirok04:57
abentleyAnyhow, deltas also follow the lefthand ancestry.04:57
keirso, to be clear, the left hand edge c->e implicitly contains the deltas a-> and a->f04:58
abentleySo for my graph, there is no E -> D delta, only an E -> C delta.04:58
keiryes, exactly04:58
keirthe link exists but there is no delta change04:58
abentleyRight.  We could record it, but don't.04:58
keirso in a pack, why not store all this consecutively?04:59
keirfor a single node, you store refs to your children, and some arbitrary edge-value04:59
abentleySo if A is a fulltext, we get A, apply A -> C, apply C->E.05:00
keirit sounds like the new packs store the deltas in a big list, and then those are indexed in the GraphIndex05:00
keirabentley, yes, i understand now. i was confused about the merging.05:00
abentleyThat's the only possible recipe to produce E.05:00
abentleySo that's why *for building texts*, it's a depth-only search.05:01
keirgreat05:01
keirand that search would happen in the fulltext graph, which is a subset of the revisions graph05:01
abentleyI would expect that packs do store entries topologically-sorted, but not necessarily ajacent.05:01
keiri imagine in almost all cases, the number of edges is < 505:02
keirin which case toposort would do pretty well05:02
abentleyYes.  about 75% have only 1 parent.  I would guess less than 2% have more than 2 parents.05:03
keirok. is there many cases where you want to traverse the graph _without_ also grabbing the related diffs?05:03
abentleyWe would do that when running "log".05:04
abentleyi.e. log FILE05:04
abentleyThat's pretty rare.05:05
keirok05:05
abentleyWe are still just talking about files here.05:05
keiryes05:05
abentleyFor revisions, we use the graph quite differently.05:05
keiri am starving, i'm going to go grab something to eat; will you be around in 15 mins?05:05
abentleySure.05:05
abentleyPing me.05:05
keirgreat! ttyi1505:05
keirabentley, ping!05:28
abentleyHey.05:29
keirlook at that, xchat can spell better than me05:29
=== BasicOSX [n=Basic@fortress.tanners.org] has joined #bzr
keirso: revision graph usage05:29
abentleyRight.05:29
abentleyWe use the revision graph for log all the time.  I think breadth-first is the right term for the "log" access pattern.05:30
abentleyBecause we show all parents of each revision.05:30
abentleySorted topologically.05:31
keirok05:31
keiractually i think that's a DFS05:31
keirrather than a left-child-traversal05:31
keirerr, hmm. nevermind, you are right05:31
abentleyOkay.  I never studied graph theory.05:31
abentleyWe also use the revision graph for merge base selection.05:32
abentleyThis is done by merge, pull, push, update.05:32
abentleyThis is again breadth-first traversal, but we stop when we hit an LCA.05:33
keirLCA?05:33
abentleyLeast Common Ancestor.05:33
keirah, ok05:33
abentleySo for this access pattern, incremental reads are a big win.05:34
keiryes05:34
abentleyIdeally, the data is topologically sorted with newest data first05:34
keiryes05:34
keirthis is what i have now05:35
keirhowever, topological sort is ambiguous05:35
keirthere are many topological sorts for a given graph05:35
keirmy current plan is to take the left-link when doing the topo sort05:35
abentleyWe do already have a topo-sort routine.05:36
abentley(tsort.py)05:36
abentleyBut yes, there may be gains in favouring left-parent ancestry.05:37
keirok05:39
keirso, the tradeoff if you store all the data (diffs, etc) in with these graphs05:39
keiris that in the merge case, you only want ancestry05:39
keirit looks my design still makes a bunch of sense.05:40
keiri'm going to send it out to the list05:40
abentleyOkay.05:40
abentleyI was only describing part of the merge process.05:41
abentleyThe other parts have the 'checkout' access pattern.05:41
abentleyMaking checkout as fast as it can be is definitely a goal.05:42
keiroh :)05:42
abentleykeir: The first part of merge is you find a base.  Then you get three inventories and compare them.05:43
keirthree?05:43
abentleyThen you get selected file texts from two of the inventories.05:43
abentleyYes, three: My tree, the tree I am merging, and the merge base tree.05:44
keirok05:45
abentleyOops, actually, you get selected file texts from *three* of the inventories.05:45
keirand then you do a three-way merge?05:47
abentleyRight.05:47
abentleyThough if only one side changed the file, we take that side's version without doing the equivalent of diff3.05:48
keirok05:49
lifelessabentley: note that I've already replaced knit indices with index.py; keir is working on a better implementation of index.py05:51
abentleylifeless: I know, but good point.05:51
lifelesskeir: It's nice that the generalised interface I crafted for bzr may be useful elsewhere, thats a good property. But the important thing to note is that that we are doing the work for bzr, so bzr's needs and process are paramount.05:52
lifelesskeir: nothing stops you later rewriting it to your hearts content :)05:52
keirlifeless, i'm about 5 mins from sending out my design05:52
lifelessre topo sort grouping05:52
lifelessI would wager breadth first grouping is most suitable05:53
abentleykeir: So in your version of the file graph, you will have different subgraphs, one for each file.05:53
lifelessbut if its parameterisable that would allow benchmarking05:53
keirlifeless, well, it's easy to test different strategies; we just re-sort and benchmark05:53
keirok. back to the email. i'll be back in a sec05:53
lifelessabentley: also are you aware that in packs the compression tree and the ancestry graph are decoupled ?05:53
abentleylifeless: I wasn't sure whether that was exposed.05:54
lifelessabentley: so we can without changing the index format have arbitrary compression parents05:54
lifelessabentley: its not somthing that knit.py is yet able to take advantage of, no. But it is exposed for folk that want to work directly on e.g. text_all_index for operations05:54
lifelesss/format/logic/ two lines up05:55
lifelessok, I'm off again, drive by commenting done :)05:55
keirhmm05:56
abentleykeir: Because the checkout pattern requires fast access to a lot of recent versions of a lot of texts, you would probably want the sorting to pay attention to where snapshots happen.05:56
abentleySo that it can switch files when it hits a snapshot.05:56
keirso the fulltexts link back to previous revisions even though a checkout would stop at the fulltext?05:58
abentleyYes, AIUI.05:59
abentleyIn fact, the revision knit is all fulltexts.05:59
abentleyYet we can use its graph.05:59
keirwell, the revisions only store metadata not actual file content do they?06:00
abentleyThe XML you saw earlier is stored in the revisions knit the same way file texts are stored in file knits.06:01
keirok06:02
=== hacklberry [n=hacklber@ppp167-251-99.static.internode.on.net] has joined #bzr
keirsent!06:11
=== marianom [n=marianom@ubuntu/member/marianom] has left #bzr []
=== Rotund [n=rotund@d28-101.rb2.lax.centurytel.net] has joined #bzr
=== tchan [n=tchan@lunar-linux/developer/tchan] has joined #bzr
=== abentley [n=abentley@bas8-toronto63-1088754407.dsl.bell.ca] has joined #bzr
=== AfC [n=andrew@office.syd.operationaldynamics.com] has joined #bzr
=== jamesh [n=james@canonical/launchpad/jamesh] has joined #bzr
=== hacklberry [n=hacklber@ppp167-251-99.static.internode.on.net] has joined #bzr
=== n2diy [n=darryl@wlk-barre-208-103-148-76.dynamic-dialup.coretel.net] has joined #bzr
=== sverrej [n=sverrej@tul-1x-dhcp016.studby.uio.no] has joined #bzr
keirwe require python 2.4 right?07:59
=== metze_food is now known as metze
AfCkeir: impressive post about Graphs to the mailing list the other day.08:05
keirAfC thanks!08:12
keirthat was just a couple hours ago08:12
=== hdima [n=hdima@idealer.cust.smartspb.net] has joined #bzr
Pengkeir: Some bits (maybe just tests) require 2.4.08:24
Pengkeir: I assume it's mostly 2.3.08:24
keirok08:32
=== tca [n=tom@ti541110a080-5238.bb.online.no] has joined #bzr
=== g0ph3r [n=g0ph3r@p57A0AA22.dip0.t-ipconnect.de] has joined #bzr
=== sverrej_ [n=sverrej@tul-1x-dhcp017.studby.uio.no] has joined #bzr
=== sverrej_ [n=sverrej@tul-1x-dhcp017.studby.uio.no] has joined #bzr
=== Lo-lan-do [n=roland@mirenboite.placard.fr.eu.org] has joined #bzr
=== ieei [n=ieei@62.70.2.252] has joined #bzr
=== mrevell [n=matthew@canonical/launchpad/mrevell] has joined #bzr
datoPeng: afraid not.09:40
datokeir: 2.4 is a hard requirements.09:40
=== asabil [n=asabil@ti0035a340-0802.bb.online.no] has joined #bzr
Pengdato: Oh, really? Okay.10:02
=== mvo [n=egon@p54A677A5.dip.t-dialin.net] has joined #bzr
igcnight all10:22
datoPeng: yeah :)10:23
=== Zindar [n=erik@host217-42-238-84.range217-42.btcentralplus.com] has joined #bzr
=== gabe_ [n=gabriel@91.84.56.254] has joined #bzr
=== gabe_ [n=gabriel@91.84.56.254] has joined #bzr
=== asabil [n=asabil@62.70.2.252] has joined #bzr
=== tca [n=tom@ti541110a080-5238.bb.online.no] has left #bzr []
=== pygi [n=mario@83-131-74-255.adsl.net.t-com.hr] has joined #bzr
=== fog [n=fog@debian/developer/fog] has joined #bzr
=== luks [i=lukas@unaffiliated/luks] has joined #bzr
=== sverrej [n=sverrej@pat-tdc.opera.com] has joined #bzr
=== NamNguyen [n=namnt@cm246.delta196.maxonline.com.sg] has joined #bzr
=== NamNguyen [n=namnt@cm246.delta196.maxonline.com.sg] has joined #bzr
=== jnair [n=jayesh@203.123.188.10] has joined #bzr
=== sabdfl [i=sabdfl@ubuntu/member/pdpc.silver.sabdfl] has joined #bzr
=== sverrej [n=sverrej@pat-tdc.opera.com] has joined #bzr
=== metze is now known as metze_food
=== Demitar [n=demitar@c-212-031-190-120.cust.broadway.se] has joined #bzr
datorunning `bzr upgrade` in a lightweight checkout makes a backup of the light .bzr, not of the real .bzr. would that be considered a bug?01:46
=== metze_food is now known as metze
lifelessno, because its upgrading the lightweight checkout01:50
datobut it changes the "remote" branch as well01:51
lifelessok thats a bu01:51
lifelessbug01:51
lifelessit should only alter the lightweight checkout01:51
=== sverrej [n=sverrej@213.236.208.247] has joined #bzr
datookay, I'll double-check it does that, and file one01:52
abentleylifeless: It would be nice to have a bit more API for handing branch references.01:53
lifelessyea01:53
abentley"bzr switch" has some pretty gross aspects.01:53
=== mrevell is now known as mrevell-lunch
=== Rotund [n=rotund@d28-101.rb2.lax.centurytel.net] has joined #bzr
=== matkor [n=matkor@beauty.ant.gliwice.pl] has joined #bzr
=== mw|out [n=mw@189.146.24.28] has joined #bzr
=== ddaa [n=david@canonical/launchpad/ddaa] has joined #bzr
=== asabil [n=asabil@62.70.2.252] has joined #bzr
=== mrevell-lunch is now known as mrevell
=== EtienneG [n=etienne@ubuntu/member/EtienneG] has joined #bzr
=== BjornT [n=bjorn@canonical/launchpad/BjornT] has joined #bzr
joe99Is the Cygwin client broken?03:29
=== Lo-lan-do [n=roland@mirenboite.placard.fr.eu.org] has left #bzr ["Leaving"]
=== sverrej_ [n=sverrej@213.236.208.247] has joined #bzr
=== sverrej [n=sverrej@213.236.208.247] has joined #bzr
ubotuNew bug: #137976 in bzr "`bzr upgrade` in a lightweight checkout upgrades the parent branch" [Undecided,New]  https://launchpad.net/bugs/13797603:40
mwhudsoner03:41
mwhudsonoh right03:41
=== mthaddon [n=mthaddon@canonical/launchpad/mthaddon] has joined #bzr
=== pygi [n=mario@83-131-73-161.adsl.net.t-com.hr] has joined #bzr
pygihello folks04:09
lifelessjoe99: not AFAIK04:10
=== sabdfl [i=sabdfl@ubuntu/member/pdpc.silver.sabdfl] has joined #bzr
=== mw|out is now known as mw
=== yminsky [n=yminsky@user-0cevcqv.cable.mindspring.com] has joined #bzr
=== abadger1999 [n=abadger1@65.78.187.68] has joined #bzr
=== BasicOSX [n=Basic@fortress.tanners.org] has joined #bzr
=== matkor [n=matkor@beauty.ant.gliwice.pl] has joined #bzr
=== alfborge [n=alfborge@bacchus.pvv.ntnu.no] has joined #bzr
alfborgeI've been using bzr for my module of a project for some time now, and finally the project as a whole has adopted bzr.  Is there a way I can merge my existing bzr repos with the project repos so that I keep my history?04:43
alfborgeI've got an existing Products/Timeline/.bzr which is the one I've been using.04:43
alfborgeNow there's a .bzr in Products...04:44
radixalfborge: yeah, there is, it might be in a plugin04:45
=== radix tries to remember the command
radixhrmph04:47
radixI can't find it :\04:48
alfborgeMe neither.04:49
radixI think jam wrote it, but I guess he's not around.04:49
alfborgejoin                 Combine a subtree into its containing tree.'04:54
alfborgeMight be it.04:54
alfborgeI don't really understand the helptext to join.  Could someone take a look at it and help me out?04:57
alfborgeSeems I need to create a branch and then join into this branch.  But it's not really clear to me exactly how to go about it, and where I should run the commands from (the target tree or the source tree) and so on.04:58
radixalfborge: I don't think join is the one I used04:59
radixalfborge: to be clear, you have two branches and you want to merge them into one, such that all the files in one are in a directory of the other?05:00
alfborgeI'm not really very familiar with bzr.  I did "bzr init" on the part of a code tree that I've been working on.05:01
fullermdIs there overlap between what you've got in bzr and what's in upstream bzr now?05:01
alfborgeno overlap.05:02
fullermdYou can just use merge, then.05:02
alfborgeNow the whole tree has been done "bzr init" on by some other people.  So, I can no longer push my stuff upstream since my .bzr in that tree has been removed.05:02
fullermdDo a big 'mv' in your branch so that the files are in $BRANCH/sub/dir where they should be in the main branch, then you can just 'merge' them.05:02
radixhuh, ok05:02
radixmaybe that's why that command I used isn't there any more05:02
radixbecause it's obsoleted by 'merge' handling the case?05:02
fullermdWell, I think John had some plugin once that basically did that, just automated.05:03
fullermdCan't remember what it was called.05:03
radixyeah, I used it05:03
radixI can't either :)05:03
=== radix wanders off
fullermdI think it's mostly set aside because the nested trees stuff will take over handling that case.05:03
=== badders [n=tom@host86-128-210-148.range86-128.btcentralplus.com] has joined #bzr
=== ddaa [n=david@canonical/launchpad/ddaa] has joined #bzr
alfborgeI'm confused by the word branch.05:04
fullermd(of which 'join' is to be a part, but it's currently hidden because it's not really done)05:04
alfborgeI'm used to CVS, so I've learned to avoid branches like the plague.05:04
fullermdAnd good training, in that environment   ;)05:04
alfborgeSo, if I get things correctly, I've now got the root/Products/Timeline (upstream bzr) and I've got my Timeline (which is it's own root).05:05
alfborgeShould I remove the Timeline-dir from the upstream and replace it by my Timeline-dir and then do a merge, or did I misunderstand completely?05:06
fullermdMmm.  What's in the upstream Timeline dir, and what's in yours?05:06
=== marianom [n=marianom@ubuntu/member/marianom] has joined #bzr
alfborgeOnly difference is that mine has a .bzr dir in it.05:06
alfborgeOh, and I have a few local changes that wasn't commited when they made the repos.05:07
fullermdAh.  So you lied earlier   :)05:07
fullermdThere is overlap.05:07
fullermdThat makes things harder.05:07
fullermdYour problem now is that you have two different branches that have the same files in them, but they're different files (See?  That's clear, right?)05:08
alfborgeYeah, pretty much.05:08
fullermdSo, conceptually, what probably needs to happen is for your changes to get replayed against the upstream files.05:09
alfborgefullermd: Let's keep this simple.  I can roll back my repos to match the version in the upstream.05:09
fullermdYou _could_ delete the upstream files, and stick yours in their place.  That's one solution.  You lose the upstream history though, and set up trouble if anybody else is working on them before merging your changes.05:09
alfborgeI'm the only one working on that part of the project.05:09
alfborgeAnd the upstream repos was created about an hour ago.05:09
fullermdHm.  Has anything changed in the upstream repo since then?05:10
alfborgenope05:10
fullermdWas that a conversion from an existing VCS, or just a fresh 'init ; add ; commit'?05:10
alfborgeI believe they did an init; add; commit05:10
fullermdThat has promise.  If we can arrange to throw away that new upstream repo and recreate it, we can probably slip by nicely.05:10
alfborgeupstream is at revno 7, I'm at revno 6005:11
fullermdMmm.  Harder.05:11
fullermdWell, you can rm the files in the upstream and replace them with yours.  Not much history to lose there, if any.05:11
fullermdOr you can manually apply your changes to those upstream files and commit it, then discard (or archive) your branch.05:11
fullermdHard to say which would be "better", really.05:12
alfborgeI don't see how I lied earlier.  If I uncommit my last commit, my files are identical to the upstream files.05:12
fullermdOh, it's just one commit?05:13
alfborgeSo I can uncommit that, make a patch file and revert my repos to the state it was when the upstream made a snapshot of it.05:13
fullermdHeck, I'd just redo that in the upstream then.  You can tar up your old branch somewhere for back-reference if you need it sometime, and otherwise just ignore it and move n in the upstream.05:13
alfborgeYeah, throwing away my history is a solution.  But it's sad. :)05:14
fullermdWell, the other option is the "rm those files upstream ; merge".  That keeps your history there.05:14
fullermdIf nobody else is editing those files now, it won't cause conflicts.05:14
alfborgefullermd: Ah, there we go.  That's what I'll do then. :)05:15
fullermdThe only real downside is the kidna "uncleanliness" of having those files from the first 7 revs be different files than in the future.  Probably only of interest to archaeologists.05:15
fullermdSo, in your branch, make a commit with all the files moved into a throwaway temporary dir (myfiles.tmp/ or something), just to have them conveniently out of the root for the merge.  (you could skip that if it's just a few files, but it can make it easier if there's a lot)05:17
=== mrevell is now known as mrevell-tea
fullermdThen rm away the files in the upstream, merge your branch in, and bzr mv them into place.05:17
=== bigdo1 [n=scmikes@79-67-14-216-arpa.cust.cinci.current.net] has joined #bzr
alfborgeIs there a difference between bzr copy and bzr co?05:23
Odd_Blokealfborge: Yeah, 'co' is short for 'checkout'.05:23
alfborgeWhich is not a branch?05:24
alfborgeOr rather, it doesn't create a branch?05:24
Odd_Blokealfborge: It creates a branch which is bound to the checkout location.05:25
Odd_Blokealfborge: That is to say, some operations will affect the checkout location (commit, for example), unless specifically directed not to.05:26
alfborgeGood to know.  I think I'll stick with branch. :)05:26
alfborgeAnd push my changes when I'm ready.05:26
Odd_Blokealfborge: The only difference between 'checkout' and 'branch' is that the former creates a bound branch and the latter an unbound one.05:27
=== ddaa [n=david@canonical/launchpad/ddaa] has joined #bzr
Odd_BlokeYou can switch between the two using 'bzr bind' and 'bzr unbind'.05:27
=== keir [n=keir@76-10-155-93.dsl.teksavvy.com] has joined #bzr
=== sabdfl [i=sabdfl@ubuntu/member/pdpc.silver.sabdfl] has joined #bzr
=== mrevell-tea is now known as mrevell
=== fullermd has come to agree with the desire to stab the "bound branch" terminology right straight through the heart.
=== BasicOSX [n=Basic@fortress.tanners.org] has joined #bzr
mwhudsonfullermd: do you have better ideas?05:36
fullermdNot referring to a checkout as a branch.05:37
mwhudsonit is, though05:41
fullermdNot really relevant   :p05:41
=== p4tux [n=p4tux@189.169.92.184] has joined #bzr
=== Radtoo [n=mschmid@84-75-167-50.dclient.hispeed.ch] has joined #bzr
=== herzel [i=herzel@gateway/tor/x-258a00f6e9152322] has joined #bzr
RadtooHi. I just installed bzr and used tailor to migrate my svn repository (contains many blobs) to bazaar. But that inflated the repository from 360MB to 1.5GB. Is that normal or did I do something wrong?06:16
NfNitLoopHmm, I'm not familiar with tailor.06:17
keirRadtoo, have you tried bzr-svn?06:18
Radtookeir: that doesn't even compile here, so no :/06:19
Radtootailor appears to pull from svn version by version and then commit it into bazaar... but I can't be entirely sure :D06:19
NfNitLoopif bzr-svn works, it sounds like the ideal solution.  If you "import" (branch) with it, you can easily keep it in sync with the svn repo and even commit back to it.06:19
keirwe're working on pack repositories, which i believe will actually make bzr repos smaller than svn's06:19
keirbut they're not ready just yet06:19
RadtooI see, atm this is normal then?06:19
NfNitLoop*shrug*06:21
=== NfNitLoop eyes keir.
fullermdProbably, especially with big files getting changed a lot.06:23
jelmerNfNitLoop: can you try the 0.4 branch again, I've fixed some http bugs.06:23
NfNitLoopjelmer: *heart*06:24
NfNitLooptrying now. :)06:24
NfNitLoopIf I get disconnected, it means my box is too busy thrashing to answer TCP packets.   (Whee, memory leaks!)06:26
jelmer(-:06:26
jelmera --limit option to svn-import may be a good idea06:26
NfNitLoopYeah... I was looking for one.06:26
NfNitLoopare you saying it's a good idea for me to use?06:27
NfNitLoopor for someone to implement?  :)06:27
jelmerrather for someone to implement, it's not there yet06:27
jelmerideally, I should just fix the memory leaks...06:28
jelmerbut tracking them down is hard and there's at least one in the python subversion bindings06:28
NfNitLoopI need to get a job that doesn't suck my will to live (and program) so that when I get home I'll actually want to code on some of this.  :)06:28
RadtooI see. Well I'll love to try the packed variant once it's ready :D06:29
RadtooBTW, I have tried Git and it also doesn't get that part quite right ;)06:31
NfNitLoopjelmer: I still get:  bzr: ERROR: Invalid revision-id {None} in SvnRepository(...)06:31
NfNitLoopthis branch?  http://people.samba.org/bzr/jelmer/bzr-svn/0.4/06:32
NfNitLoopIt seems weird to me that using svn-import, I still have to do svn+https://     (wouldn't svn+ be implied?)06:34
keirRadtoo, what do you mean? the packed repos don't work well for git?06:34
NfNitLoopkeir: I think he means that git repos are much larger than svn ones.06:35
datoRadtoo: I guess the repository contains a fair amount of binary data?06:35
keirwhaa?06:35
keiri hear that git repos were really tiny06:36
NfNitLoopkeir: maybe I guessed wrong, then. :)06:36
keirthat the entire gcc history was a 300mb git repo, but 17 gigs in svn06:36
datomaybe he didn't repack06:36
Radtookeir: yep, as compared to svn.06:37
Radtoodato: yes. many (said that before tho :P)06:38
datoRadtoo: ah, I missed it, sorry06:38
Radtookeir: I did run git-gc and stuff and nothing made it grow to 810MB, still a lot larger than the 360MB from SVN.06:39
RadtooI suppose such repositories are quite the challenge to handle :D06:40
=== sverrej [n=sverrej@pat-tdc.opera.com] has joined #bzr
keiractually, they are not so hard, but the SCM must recognize and support binary deltas06:42
keirold svn used to store entire copies of binary files with each rev06:42
keirnot sure if they fixed that now06:42
NfNitLoopI'm pretty sure nowadays svn treats all files as binary and does binary diffs.06:42
RadtooI think they deltify almost everything against everything or something like that06:42
RadtooOtherwise I doubt that huge mess of a repository I have would be so small06:43
datoNfNitLoop: yeah, I belive that's it06:43
NfNitLoopwhich is one of the reasons we chose it for our current project.  (Lots of binary files that needed revision control.)06:44
keirwhat is the 'signature index'?06:45
RadtooNfNitLoop: So SVN worked best for you out of all you tried?06:45
datokeir: revisions can be gpg signed, so I guess it's that?06:46
keirok06:46
NfNitLoopRadtoo: well, svn was really the only thing that met our needs.   Free, works well with binary files, supports file locking, has a friendly GUI for teh n00bs.06:47
keirsvn does have the benefit of 5+ years of robustness hacking06:48
RadtooNfNitLoop: I don't need the friendly part, but otherwise I guess I'll have that particular repos stay on svn.06:48
NfNitLoopFor personal projects I've migrated to bzr.06:49
RadtooTrue. I do expect bzr to be better in 5+ years tho. ;)06:49
keiryes, i am quite confident the choice will be easy in 5 years :)06:49
keirthough i suspect bzr will never have lockign06:50
NfNitLoopkeir: heh.  I wouldn't expect it to.   Hard to do that w/ a distributed development model.06:50
keirif bzr got really solid binary support, i could see someone building a locking plugin which would talk to some central server for lock status06:51
keirthe reality is, you NEED locking for working with binary files (photoshop files, etc)06:51
fullermdAnd then I can see large hoards of people storming that someone's house in the night, and parading their intestines up main street   ;p06:51
NfNitLoopnot really.06:51
NfNitLoopGood communication > locks.  :)06:51
RadtooI personally don't, tbh :D06:51
NfNitLoopthough, again... hard to do that in a distributed environment.06:52
fullermdWell, that's a fundamental limit case.  If your environment is too distributed to manage the communication necessary for project management, then your environment is too distributed.06:53
RadtooWhat if it's not "a project"? ;)06:54
fullermdHard-coding the communication into the VCS tool doesn't help that.06:54
NfNitLoopyeah, I'm thinking of some OSS tool that has a repo published via HTTP.06:54
NfNitLoopTwo new people just download it and implement changes that happen to touch the same file...  then there's no way to merge them back together.06:54
=== orospakr [n=orospakr@132.213.238.4] has joined #bzr
NfNitLoopI guess there, your "communication" comes in at the upstream maintainer.  :)06:55
RadtooYe if the content isn't known to anyone but a proprietary tool... then either that tool can, or no one?06:55
NfNitLoopRadtoo: eh?06:55
fullermdLocking wouldn't help that, though.  Even if magic occured and somehow it were all distributed locked...   all that would happen is that only one person could make their change.06:55
fullermdWhich is equivalent to the case that you only accept one of those person's changes (except that you get to choose the better one, rather than just the first   ;)06:56
NfNitLoopfullermd: right.  I'm not the one proposing locking. :)06:56
NfNitLoopI'm just saying that very distributed projects don't always have good communication, since anyone can take your code and start modifying it.06:57
NfNitLoopit doesn't make the project bad.06:57
NfNitLoopor "too distributed".06:57
fullermdThat's not quite what I meant...06:58
fullermdMy assertion is that if your project (for whatever real or imagined reason) needs tight coordination, you shouldn't be spreading it around like that.  By doing that spreading, you're asserting that you don't need lockstep among developers.06:58
fullermdSo, yes, a project _can_ be "too distributed", if the development environment they've set up isn't consistent with the constraints on the development.06:59
NfNitLoopah, yes. agreed.07:00
fullermd(and of course, a project can be too centralized, if the development environment is twisted into lockstep when no real constraint requires that)07:01
NfNitLoopwhich is what my current project feels like. :p07:01
NfNitLoop(work project, that is.)07:01
NfNitLoopthe binary files require this very centralised development.    But we've got quite a bit of source code in there too.07:02
NfNitLoopBut I guess I should just be glad I got them away from VSS.  :p07:02
jelmerre07:03
fullermdI'm sorry, my mental gag filter blocked out that last line you sent...07:03
NfNitLoopYes.  That's right.  Until I arrived, they were using The VCS That Shall Not Be Named.07:03
jelmerNfNitLoop: are you specifying any additional arguments to svn-import?07:03
NfNitLoopand it took me *months* to convert them.07:04
NfNitLoopjelmer: nope.   Though I am running it inside a shared repo.  Should I not?07:04
jelmerNfNitLoop: did you rm -rf the target repository after updating today?07:04
fullermdThere once was a time when I held fast to the belief that using _any_ VCS, no matter how crap, was preferable to using none at all.  Said system (through second-hand experience, thankfully) showed me the error of my ways.07:04
NfNitLoopthe old, broken attempt at an import?  yes.  :)07:04
jelmerNfNitLoop: what version of bzr are you using?07:05
NfNitLoopfullermd: Yeah.  I love a VCS where users can *permanently* delete history from it.  :p07:05
NfNitLoopBazaar (bzr) 0.90.007:05
datoa07:05
datooops07:06
jelmerNfNitLoop: trying to reproduce..07:07
jelmerabentley: ayt?07:07
jelmerNfNitLoop: this seems fixed in bzr.dev somehow, I'm currently trying to figure out why07:09
NfNitLoopjelmer: This is against the repo that I sent you.07:09
NfNitLoopjelmer: Hmmm.   but you reproduced it with 0.90?07:10
jelmerNfNitLoop: I reproduced it with 0.90 against the repo mentioned in bug 137710 (which is the same issue you're seeing) but can import fine using bzr.dev07:11
NfNitLoopjelmer: interesting.07:11
NfNitLoopjelmer: well, how close is 0.91 to coming out?  Maybe you should just make it a requirement for bzr-svn if it's coming out soon.  :)07:17
=== sverrej [n=sverrej@tul-1x-dhcp017.studby.uio.no] has joined #bzr
=== Basic_py [n=Basic@gatekeeper.real-time.com] has joined #bzr
jelmerre07:42
jelmerNfNitLoop: I don't think 0.91 is all that close yet. I'm trying to figure out if there is some way to work around the issue in bzr-svn itself.07:42
NfNitLoopjelmer: aah, that would be cool.  :)07:43
datoI thought the RC was next tuesday.07:44
=== pygi [n=mario@83-131-12-15.adsl.net.t-com.hr] has joined #bzr
asabilhi all07:48
=== hsn_ [n=chatzill@234.114.broadband5.iol.cz] has joined #bzr
=== p4tux [n=p4tux@189.169.92.184] has joined #bzr
=== niemeyer [n=niemeyer@200-103-134-216.ctame705.dsl.brasiltelecom.net.br] has joined #bzr
=== sabdfl [n=sabdfl@ubuntu/member/pdpc.silver.sabdfl] has joined #bzr
keirwth? zlib only does 1mb/s on my laptop?08:19
keirahah08:21
keirright, it's decompression speed that matters08:23
keiron my laptop, which is a fairly moderate 1.7ghz centrino, i can decompress at 75mb/s08:23
=== hackter [n=dboucard@mna75-6-82-229-33-118.fbx.proxad.net] has joined #bzr
=== hackter [n=dboucard@mna75-6-82-229-33-118.fbx.proxad.net] has left #bzr ["Ce]
=== dato [n=adeodato@tarrio.org] has joined #bzr
=== sabdfl [n=sabdfl@ubuntu/member/pdpc.silver.sabdfl] has joined #bzr
=== cfbolz [n=cfbolz@p54ABC07E.dip0.t-ipconnect.de] has joined #bzr
=== hdima [n=hdima@nat1.spndigital.com] has joined #bzr
=== asabil [n=asabil@62.70.2.252] has joined #bzr
asabilis there any good bzr web interface out there ?09:05
sabdflasabil: i think the best one is loggerhead09:12
asabilso there is nothing better ? and something maintained ?09:13
asabil:/09:13
sabdflasabil: https://code.launchpad.net/loggerhead09:14
sabdflcheck it out, there's activity there as we speak :-)09:14
asabiloh great09:14
asabilthe weblink in the list of 3rd party tools links to quite old stuff I think\09:15
asabilthanks a lot :)09:15
sabdflsure09:16
sabdflnice way to see what's going on in a project, that09:16
asabilwhich branch you suggest I check ?09:17
asabilthe devel or production ?09:17
keirwow, your two names are impossible to disambiguate at a glance09:19
keiri thought mark shuttleworth was talking to himself09:20
asabillol09:20
datothere should be an irssi plugin that would use alternate colors for adjacent nicks with the same length09:20
Basic_pyWhen you do a bzr checkout --light-weight, does this mean you cannot go back to this local repository and do a bzr pull to get updates from a remote repository?09:23
datoBasic_py: you can run `bzr pull` inside a lightweight checkout (in fact, you can run all operations there). it will update the "parent" branch, though.09:24
=== mthaddon [n=mthaddon@canonical/launchpad/mthaddon] has joined #bzr
=== grimboy_uk [n=grimboy@85-211-246-243.dsl.pipex.com] has joined #bzr
keirphew, that was a long email09:33
=== asak [n=alexis@201-13-30-91.dsl.telesp.net.br] has joined #bzr
=== entoll [n=balint@87.97.90.111.pool.invitel.hu] has joined #bzr
=== mdke [i=mdke@ubuntu/member/mdke] has joined #bzr
mdkehiya, I'm quite new to bzr and am feeling my way around still. I'm merging from a branch and there is a conflict, is there a good doc about how to resolve conflicts?10:04
=== Gwaihir [n=Gwaihir@ubuntu/member/gwaihir] has joined #bzr
beunomdke, the bzr docs has a good one, are you using 0.18?10:10
mdkebeuno: 0.90.010:10
beunomdke, then in the bzrdir/doc/en/user-guide10:11
beunothere's a file called conflicts.txt10:11
beunoI'm sure it's on the bazaar webpage somewhere, but I can never find it10:11
datohttp://doc.bazaar-vcs.org/latest/en/user-guide/index.html10:12
mdkeI'm reading http://doc.bazaar-vcs.org/latest/en/user-guide/tutorial.html at the moment, has something stuff10:12
beunothat's it  :D10:12
beunohttp://doc.bazaar-vcs.org/bzr.0.90/en/user-guide/conflicts.html10:12
beunoto be precise10:12
mdkeI was hoping bzr would do the merging for me, it looks like it doesn't from that page10:13
radixmdke: it does do most merging for you10:13
beunoit just needs a bit of help when to lines of code conflict10:13
radixmdke: you have to resolve any *conflicts* that happen during merge10:13
beunodato, thanks btw  :D10:13
datomdke: if there are changes to the very same lines, bzr can't know how to solve such conflict10:13
=== beuno bookmarks it once and for all
datoshort of reading your mind10:14
datobeuno: you're welcome10:14
mdkeradix: I mean, I was hoping it would resolve conflicts for me, given a bit of input from me10:14
datoah, and that reminds me10:14
radixnot sure what that means10:14
datomdke: what kind of input?10:14
mdkein this case it's a very simple file10:15
mdkeI want to keep both my changes and the changes in the branch10:15
datomdke: bzr tried to do that, but failed because your branch and the other branch *change the very same lines in different ways*10:17
mdkeok, bzr knows best I guess. I am surprised because the file is so simple and I thought that the changes I made were just to add lines rather than change some. I may be misremembering though10:18
=== sverrej [n=sverrej@tul-1x-dhcp017.studby.uio.no] has joined #bzr
mdkeyeah, i did just add lines to the end of the file, annoying10:20
beunomdke, that's weird then, it shouldn't complain10:21
beunoit's actually saying there are conflicts?10:21
beuno"bzr conflicts"  complains?10:21
mdkeyeah10:21
beunomdke, did bzr generate a conflictedfile.BASE?10:23
mdkeyeah10:23
beunomdke, the conflicted text should be listed there10:24
mdkeyes10:25
beunodoes it make sense?10:25
beuno:D10:25
mdkewell, no :) not to worry, I've resolved it manually10:25
beunoheh, ok ok, bzr isn't that random normally10:26
mdke:)10:28
=== pete__c_ is now known as pete__c
entollHello10:47
entollIs that normal that under Windows, bzr selftest fails on a few dozen tests?10:48
=== bigdog [n=scmikes@160-201-8-8-arpa.cust.cinci.current.net] has joined #bzr
=== niemeyer [n=niemeyer@200-103-134-216.ctame705.dsl.brasiltelecom.net.br] has joined #bzr
=== matkor [n=matkor@ip83-230-19-175.e-zabrze.pl] has joined #bzr
lifelesskeir: 1mb/s ? what were you using GzipFile ?11:53
lifelesskeir: also, I got your reply, but you didn't cc the list - do you mind if I forward it back to the list ?11:57
=== Demitar [n=demitar@c-212-031-190-120.cust.broadway.se] has joined #bzr
keirlifeless, i just noticed that and sent it to the list11:59
keirlifeless, let me know if it shows up for you11:59
keirlifeless, any thoughts?12:00
keirlifeless, also it was 10mb/s compression; i dropped a 012:01
lifelessheh12:01
lifelessso12:01
lifelesswere you testing using python?12:01
keiryes, with zlib12:01
lifelessThe GzipFile interface ?12:01
keirimport zlib; zlib.compress(big_100mb_string_here)12:01
keirwith a time set/check around it12:01
keirnot sure what GzipFile is12:02
lifelessok12:02
lifelesshave you seen the timeit module?12:03
lifelesshttp://bazaar-vcs.org/RobertCollins has some examples showing its use12:03
lifelessbasically12:03
lifelesspython -m timeit -s 'one_hundred_million_bytes= "A"*1024*1024*100' -s 'import zlib' 'zlib.compress(one_hundred_million_bytes)'12:04

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