IRCloggy #git 2007-01-17

Logs Search ←Prev date Next date→ Channels Documentation

Provider of IRC logs since 2005.
WARNING: As Freenode became unjoinable and lost all warnings in topics, we cannot log channels on Freenode anymore.

2007-01-17

kazzmir joined00:03
mugwump packs should be treated like data partitions imho00:12
eg, you might choose to partition by object type, and then sub-partition blobs by sha100:14
with repo-config00:14
just like you'd partition a huge time series database table into date chunks00:15
dwmw2_gonedwmw2_SYD00:15
clee pco-dhcp205# time git-rev-list --bisect HEAD ^$FIRST00:46
9f9af8439be5b16b073d3be0f4ef8b114c57845600:46
git-rev-list --bisect HEAD ^$FIRST 15708.67s user 7.39s system 98% cpu 4:25:52.16 total00:46
it only took four and a half hours!00:47
corecode heh01:01
O^3 somebody said01:01
clee O(n^3), yes01:01
which is ... pretty bad.01:02
DrNick it could be worse01:10
mugwump but that only affects 'git-bisect next', yeah02:43
?02:43
you can still use 'git-bisect good' etc to get "close", I'd guess02:43
dwmw2_SYDdwmw2_gone02:51
dwmw2_gonedwmw2_lca03:13
spearce joined03:20
clee spearce: :)03:41
spearce evening.03:42
clee spearce: almost done with the repack of the second half!03:42
spearce catches up on #git logs03:42
clee spearce: did you get the mail I sent?03:42
dwmw2_lcadwmw2_gone03:42
spearce mail, no, i finished my inbox. nothing from you.03:42
clee ?03:43
weird.03:43
I sent it to [email@hidden.address]03:43
spearce hehe, your first half was 973 MB. nice.03:43
spearce looks in the spam dumping ground...03:43
clee it's in my Sent folder. :)03:44
Subject: Some more numbers from the svn conversion03:44
spearce heh. lets see...03:45
btw i don't have repack automatically splitting large inputs. i had to go make a living. :)03:45
clee aw.03:45
spearce day job doesn't let me connect to #git. or anything else for that matter... damn gov't contracts and security rules.03:46
corecode .oO( https/ssh gateway )03:48
spearce yea, slow as dirt03:48
corecode well, irc just keeps you from working03:48
spearce which keeps me from getting the job done, which keeps them from paying me, which keeps me from paying my local utility company for my electric bill.. which keeps me from running my computers that i work on gfi on. funny circle, ain't it? :)03:49
clee: i'm not seeing your message anywhere. 03:49
clee spearce: weirdness.03:50
spearce: how about now?03:50
clee just bounced it to you again03:50
spearce not like it hasn't happened before to me; every once in a while i do wind up with a message lost.03:50
clee aw.03:51
corecode upstream filterage03:52
spearce yea, i think there's some sort of sender verification filter thing that's rejecting some email into my domain.03:53
dwmw2_gonedwmw2_lca03:57
spearce dang, 4.5 hours for a bisection? whoa. but given that its O(N^3)... well, that's just to be expected.03:58
44MiB index makes sense for 1,898,116 objects.03:59
clee nods.03:59
clee Writing 2213941 objects.03:59
27% (611482/2213941) done03:59
:)03:59
(rest of pack)03:59
corecode spearce: i think any approach "fixing" the compression of gfi's packs is unsuited03:59
repack will always perform better03:59
clee well, technically, git-pack-objects will always perform better. :)04:00
spearce that's always been the plan with gfi. get "good enough" that pack-objects has something reasonable to work from.04:00
corecode where is the difference between repack and pack-objects?04:00
spearce with Mozilla we had much better deltas due to the way the frontend fed the data, here both of your tools are feeding the data out of order to gfi, which makes pack-objects work harder.04:00
clee repack figures out the parameters to hand to pack-objects04:01
spearce repack is a tiny shell script that wraps the real tool, pack-objects.04:01
clee yay porcelain :)04:01
corecode so, how can you help pack-objects?04:02
not sure if i understand correctly04:02
spearce using relatively short delta chains and keeping the blob data located in the same section of the file makes the IO easier as there's less seeking around.04:03
and less CPU work to recover a full revision to recompute the deltas.04:03
corecode ah04:03
you think that this is an issue?04:04
spearce other than that, there isn't much you can do to help it, except to purchase a faster cpu. :)04:04
doesn't appear to be, clee packed the first half of KDE in about 2 hours on his system.04:04
corecode so, why then even bother?04:04
spearce right04:04
corecode :)04:05
uh uh04:06
the git code is really 64 bit clean?04:06
clee most of it.04:06
spearce should be. a number of folks run it on 64 bit systems.04:06
spearce mutters something about broken patches from people.04:07
segher joined04:07
corecode OOH.04:07
this is *SO* ugly04:08
global variables galore04:08
clee yeah.04:08
spearce gfi?04:08
corecode no04:08
index-pack.c04:08
spearce most of git is that way. :)04:08
corecode clones latest git and checks again04:08
corecode so it seems there are amateur programmers working?04:09
uh04:09
how ugly04:09
corecode shivers04:09
spearce most of index pack was Nico and Junio.04:10
corecode serious, who does these things04:10
spearce what are doing wandering around in that ugly mess?04:10
corecode my git code does something like04:10
hdr = (struct pack_header *)pack_base;04:10
and pack_header contains non-fixed integers04:11
like04:11
unsigned int04:11
how is that supposed to be platform-independant?04:11
or is it not?04:11
spearce run git-blame on the struct definition and see how's fault it is. :)04:11
its supposed to be. it *has* to be. that's the first 12 bytes of the pack file...04:11
corecode i could understand that then04:11
well, you know, there are supposed to be systems where sizeof(int) > 404:12
corecode waits for the clone04:12
corecode kernel.org, come on!04:12
spearce a lot of git code will fall over if that isn't true. I've alawys hated 'int', 'long', etc. in C. Gimme uint32_t, int32_t anyday as I know exactly what its storage is.04:12
corecode well, int is really okay if you do a loop04:13
but not for storage04:13
big no no04:13
spearce yes. but i didn't start the mess, i just keep it going as-is.04:14
corecode uh.04:14
spearce iow i'm guilty of some of that crap too. :)04:14
spearce waits for eclipse to finish paging in from swap... *sigh*04:14
corecode needs to be changed04:14
this looks like code from the 80ies04:14
spearce part of it is Linus' fault I think; he's not a portable userspace programmer. he does kernel on gcc... and that's it...04:15
corecode i don't get why the code wasn't created as a library04:16
spearce it grew up as a series of tiny one *.c programs meant to run from the command line.04:16
over time some functions started to be common between tools, so they started to link against some common objects.04:17
corecode yah, but there seems to be a lot of duplication necessary04:17
clee the code is a mess.04:17
spearce nobody bothered to think about "hey, how do we reuse these global structures" etc.04:17
clee people are working on it.04:17
git was evolved, not designed. :)04:17
corecode i just lost a big share of trust in the code04:19
spearce that quickly?04:19
corecode what is up with those hand-rolled getopt loops?04:19
well, i read some code04:19
clee corecode: aren't you a FreeBSD guy?04:19
corecode clee: dragonfly04:19
clee corecode: what made you think that Linus had started writing trustworthy code all of a sudden? :)04:20
corecode but that's related04:20
spearce yea our command line option handling is very, very crappy.04:20
corecode clee: well04:20
so, is this being fixed?04:20
i mean, it's just grunt work04:20
not really intelectually challenging04:20
pasky which is why it is in TODO list so long :)04:21
spearce pasky!04:21
pasky: dude, what broke on repo.or.cz that my fastimport git fork is totally hosed? 04:21
corecode: we've talked about rewriting the option handling code. and cleaning up some of the code to be more of a library. resources have instead gone into feature development and bug fixes. 04:22
pasky broke, hosed?04:22
spearce fatal: packfile ./objects/pack/pack-023d4ee9bd06ae3a978eb185894173e60b930ed9.pack cannot be opened04:22
corecode you know, i'd clean up parts of it if there was a chance of success getting stuff in without having to read 1000+1 mails about stuff04:23
spearce that's during a push.04:23
corecode fixes good04:23
features not04:23
spearce corecode: Junio accepts well written patches, pretty much anytime. 04:23
pasky -r--rw-r-- 1 repo 65550 161360 2007-01-14 07:23 pack-023d4ee9bd06ae3a978eb185894173e60b930ed9.idx04:23
-rw--w---- 1 repo 65550 3008901 2007-01-14 07:23 pack-023d4ee9bd06ae3a978eb185894173e60b930ed9.pack04:23
hmmm04:23
corecode haha04:23
pasky scratches his head04:23
corecode funny permissions you got04:23
spearce yea, what happened there?04:24
corecode suggests adding some bits here and there04:24
spearce i pushed like 6000 objects (my fork was waaaaaay behind, and i just pushed something really current) and that happened.04:24
corecode aren't the repos -s?04:24
or will the objects be pushed nevertheless?04:25
pasky hm04:25
I have no idea04:25
this happened twice before, compeltely randomly, for completely unknown reason04:25
works the rest of the time04:25
corecode subscribes to git-devel04:25
spearce if the repo has git.git as an alternate and we're unpacking to loose objects we won't unpack if the alternate also has the object.04:26
but if we're keeping the pack as a full pack (due to a large push) we won't skip the duplicate objects that are already in the alternate.04:26
the best way to make that work is to symlink the alternate's refs directory into the fork's refs directory, so the refs are visible to the client during the push. then it can avoid even transmitting the objects the alternate has.04:27
corecode so what determines if you're unpacking or not?04:27
pasky you shouldn't push the alternated objects in the first place04:27
yep04:27
that's my long-time TODO ite04:27
m04:27
but anything git-related is long-time for me now :(04:27
spearce corecode: its a configuration limit on the receiving (server) side. default used to be 5000 objects, we dropped it to 100 recently. 04:27
pasky well still hope it'll change soon04:27
anyway I've fixed it for now04:27
just drop me a mail if it occurs again04:27
I'll try to look at it later04:27
why it happens04:27
see you04:27
spearce ah, that push worked. thanks pasky.04:27
clee later, pasky :)04:27
corecode that with the symlink i didn't understand04:28
spearce corecode: when the client is trying to compute the list of objects to send to the server it grabs the set of commits in the refs directory on the server. These are the things the server has access to. 04:29
If the server has an object, there's no need to send it again, right?04:30
clee so, hm.04:30
what about SHA1 collisions?04:30
corecode spearce: yah04:31
haha, i thought about that as well04:31
when you have a collision, you're hosed04:31
period.04:31
spearce The alternates directory (clone -s) gives the repository a whole slew of objects. But not all of those objects are linked in the refs of the repository.04:31
So the client won't know the server has them when it pushes. But if you symlink in the refs then the client can see them, and compute a smaller set to transmit.04:31
corecode okay, i have to investigate this refs thing04:31
i thought that this is simply a file with a sha1 in it04:32
spearce Fleshreaper: SHA1 collisions, yea, you're hosed. you shouldn't get one. if you do the suggested approach is to edit whitespace. :) 04:32
dammit bitchx again.04:32
corecode haha04:32
spearce a ref is just a sha1, yes.04:32
corecode so why would you have to symlink it?04:32
spearce its also saying "i want/have this sha1 here, and anything in its history".04:32
corecode ah04:33
i see04:33
so on the server you get the ref, build the DAG, strip duplicates04:33
spearce so if i have two repositories: Central, Dev. and Dev was made by `git clone -s Central Dev` then Dev can see any object in Central, but it has its own private ref space.04:33
corecode and transfer the rest04:33
pasky clee: there can't be any sha1 collisions :)04:33
spearce when I push to Dev from my own local clone of Central I already have a lot of data that Dev can just get from Central, but Dev doesn't know it.04:34
corecode no, nuklear powerplants are secure.04:34
spearce: well uhm04:34
spearce: wait a sec04:34
spearce: when working directly with Dev, you'll have access to the data04:34
spearce: or not?04:35
dwmw2_lcadwmw2_gone04:35
spearce corecode: correct. 04:35
but what happens when I then want to do: `git clone Central Me; cd Me; hack-hack-hack; git push Dev` ?04:36
corecode well04:36
spearce I want to send stuff from Me to Dev. But maybe Central already has some of the data I'm trying to send to Dev, so I don't actually need to send it.04:36
corecode git is incomplete04:36
if git can actually see the data04:37
spearce s/incomplete/too flexible/04:37
corecode it should use it04:37
if there is an alternates link, use it.04:37
spearce the problem is we don't know what tips of the DAG exist. its not cheap to compute with a refs directory.04:37
corecode how do i list the refs?04:37
spearce and the part of the code that is doing the data sharing is logically a layer below the DAG pointers.04:38
git-ls-remote url; git-for-each-ref (local only).04:38
corecode ah04:38
spearce i'll agree with you that this is likely a bug. if we setup an alternate ODB we also should setup the refs so they are visible for better pushing behavior.04:39
corecode now i slowly get it04:39
the refs are created on clone04:39
well04:40
follow objects/info/alternates04:40
and merge the list of heads04:41
spearce that, or setup refs/origin as a symlink to the same location as objects/info/alternates was pointing at during clone.04:44
corecode oh, what's branches vs refs/heads?04:45
spearce two different words, same meaning. :-)04:45
corecode ...04:45
spearce tomato tomato.04:45
hmm, that doesn't come out so good on ICR. :)04:45
corecode gets confused04:46
clee to-may-to, to-mah-to04:46
except I've *never* heard anyone say to-mah-to04:46
corecode prods clee04:46
corecode try the cvs repo04:46
clee corecode: I am!04:46
corecode you are?04:46
clee nobody has gotten me a copy of it yet04:46
I have a guy in Chicago who used to run a KDE anoncvs mirror04:46
and he's burning them to DVDR for me04:46
but they won't get here until next week most likely04:46
corecode wut? there is no archive at kde.org?04:47
clee nope.04:47
corecode well, duh.04:47
spearce probably ran out of disk when they moved to SVN and it went to 8x its original size. :)04:47
clee and all of the old cvs.kde.org, anoncvs.kde.org, etc servers were disabled.04:47
pco-dhcp205# (echo HEAD; echo ^$MIDDLE) | git-pack-objects --delta-base-offset --revs --no-reuse-delta --window=100 .git/second_half04:47
Generating pack...04:47
Done counting 2213941 objects.04:48
Deltifying 2213941 objects.04:48
100% (2213941/2213941) done04:48
Writing 2213941 objects.04:48
100% (2213941/2213941) done04:48
corecode that's not real time04:48
clee 40ecd8feb0950d04aeeae8cce61e1c60b311007e04:48
corecode i'd say04:48
clee Total 2213941 (delta 1796387), reused 285085 (delta 0)04:48
only took ... hours.04:48
-rw-r--r-- 1 root root 2.0G 2007-01-16 20:47 second_half-40ecd8feb0950d04aeeae8cce61e1c60b311007e.pack04:48
corecode so, uhm04:48
how does git know in which pack to look?04:48
keeps the index in memory?04:49
spearce corecode: correct. when we scan the packs directory we mmap all of the *.idx files in it. 04:50
we then search them in a linked list for a given object.04:50
corecode i can't git-fetch --reference?04:51
sad.04:51
spearce hmm. the problem with --reference on git-fetch is that's implying we can get the data from the --reference directory. but we need to copy it into this directory (the one you are fetching into) anyway, don't we?04:52
corecode error: no such remote ref refs/heads/window-mapping204:54
:/04:54
how do i fix that?04:54
corecode waits for majordomo to reply04:55
spearce your .git/remotes/origin or .git/config is stale with an old Pull: or fetch line. delete it.04:55
i removed that branch from my repo.or.cz repository, the code is in mainline git (1.5.0-rc1).04:55
corecode hm.04:56
i understand, but from a user perspective it is not exactly friendly04:56
also, how would i tell git to fetch all (new) refs?04:56
so now i got a new origin head04:58
i wonder how to forward my master04:58
spearce are you using 1.5.0-rc0 or later?04:59
corecode 1.4.4.404:59
spearce in 1.5.0 we changed the fetch/Pull: syntax so you can glob it: fetch = refs/heads/*:refs/remotes/origin/*04:59
corecode but i could as well go to 1.504:59
spearce then you don't get this error, and it automatically picks up new remote branches.04:59
corecode ah04:59
so04:59
do you have all your code in one repo/workdir?05:00
hg made me use separate dirs for every chicken shit05:00
spearce yea, i keep everything in one git working directory and flip back and forth between branches at will.05:02
much, much faster.05:02
(than using different working directories).05:02
that globbing fetch is one of those "features" we did rather than rewrite command line parsing. :)05:02
clee # du -hs .git/objects05:03
3.1G .git/objects05:03
:D05:03
10GB -> 3.1GB05:03
not bad.05:03
not bad at all.05:03
DrNick how big is the SVN repo?05:04
clee the output from git-rev-list HEAD is the same as it was with the original gfi packs05:04
so I think I win05:04
DrNick: the SVN repo as of that exact revision was 15GB.05:04
spearce clee: good, you didn't miss anything. :) 05:04
DrNick nice05:04
how thorough is the SVN import?05:05
clee missing all of the branches and tags.05:05
but it has every single revision from /trunk/05:05
which, it turns out, is 362838 commits05:05
gitster joined05:06
clee gitster: took a few hours to repack, but the KDE import I did is down to 3.1GB05:06
corecode anybody have the line to filter the git mailing list on?05:06
some majordomo stuff05:06
clee corecode: List-Id:.*git ?05:06
corecode it sends List-Id?05:06
spearce X-Mailing-List: [email@hidden.address]05:07
clee I've got the X-Mailing-List header and also:05:08
Sender:git-owner@vger.kernel.org05:08
corecode thanks05:09
rkaway2 joined05:09
gitster so what's still missing for 1.5.0?05:09
spearce gitster: with the exception of some sort of `git reflog show` (which i had hoped we wouold have) i think everything else is done. 05:10
corecode fastimport also in?05:15
spearce no. it probably could go in, its a clean merge with no impact.05:16
corecode and without documentation :)05:16
spearce yes. i don't like to contribute undocumented stuff if i can avoid it.05:16
gitster My question was really about stale documents.05:16
spearce i can't answer that, i don't tend to read out documentation. :)05:17
gitster I think gfi is a piece complex enough that needs a clean frontend or two as examples to accompany when it goes in.05:17
spearce that's what i was hoping too.05:18
clee thinks svn-fast-export is almost there05:19
gitster I've been wondering, if written in clean and concise language such as Python, how much code a most trivial gfi frontend that exports from a git branch would take... that kind of thing might be a good "tutorial" example.05:20
spearce clee's svn import in python was like 270 lines.05:20
corecode wow. git is making me crazy05:20
the simple things are complicated05:21
clee spearce: LIAR05:21
spearce: it was 155 lines05:21
and in C it's only 18805:21
;)05:21
corecode i just want to pull spearce's fastforward repo into my repo05:21
fastimport*05:21
and refs/heads vs branches still makes me fuzzy05:22
spearce git repo-config remote.gfi.url git://repo.or.cz/git/fastimport.git05:22
git repo-config remote.gfi.fetch +refs/heads/*:refs/remotes/gfi/*05:23
git fetch gfi05:23
refs/heads *are* branches05:23
gitster Do you need the two lines if you just are interested in the current gfi?05:23
clee damn. I was hoping that I could fit the entire KDE git repo into 2GB.05:24
(so it would fit on my USB flash drive.)05:24
corecode spearce: yes, i know. it is just the nomenclature which confuses me05:24
spearce gitster: i don't understand the question, current gfi is my master branch in fastimport.git on repo.or.cz... its based on current master in git.git. 05:24
gitster I know. I just did;05:24
git pull git://repo.or.cz/git/fastimport.git/05:25
Single command. Cannot be simpler and no confusing "nomenclature".05:25
spearce ah, good point.05:25
corecode gitster: but that will forward my master, no?05:25
spearce your current branch.05:26
gitster Yes, if you do not like what happened, you can "reset --hard ORIG_HEAD".05:26
corecode gitster: and if i want to pull again, i will need to enter this again05:26
spearce clee: probably unlikely, even with very long (e.g 25) delta chains. 05:26
gitster so?05:27
spearce entering common urls frequently sucks. :)05:27
gitster of course. But in distributed workflow, ad-hoc promiscous pulls should be encouraged more ;-).05:28
as opposed to "always tracking him because he is my master".05:28
spearce yes. like the f'ing patch i got today that was whitespace damaged. much easier if i coulda just pulled it.05:28
gitster I did not know if corecode wanted to "track" you, or just wanted to take a peek.05:29
corecode hm. .git/remotes/ vs .git/config?05:29
gitster: track05:29
spearce .git/remotes vs .git/config is almost like saying which side of the bread do you like to butter, the top or the bottom.05:29
gitster either is fine, people on the list seemed to like .git/config better, so clone made with 1.5.0 uses config by default.05:29
corecode so, like refs/heads vs branches05:29
i guess maybe this is too much choice05:30
gitster .git/remotes was used earlier and is still supported but what could be05:30
corecode gitster: i noticed that pack.h uses unsigned ints for the struct definition instead of uint32_t05:30
gitster expressed with .git/config is richer, so we stopped adding new features to05:30
.git/remotes/.05:31
corecode: I am not interested hearing about them without patch -- I am aware of them fine, thanks.05:31
corecode yah, just checking05:32
no problem doing patches05:32
gitster fair amount of code assumes int is 4-byte and long is either 4 or 8 depending on the platform.05:32
corecode yah, pitty05:34
Warning: No merge candidate found because value of config option "branch.master.merge" does not match any remote branch fetched.05:34
wuh?05:34
gitster "git fetch origin master" (replace "origin" with whatever you call shawn's gfi repo)05:35
s/fetch/pull/05:35
or, define "branch.master.merge = refs/heads/master" in .git/config, perhaps.05:36
depends on what you want to do.05:36
corecode well, i don't know05:36
i doubt that i will be able to advocate git if i don't understand it myself05:36
gitster If you will only be interested in shawn's gfi, then defining branch.*.remote and branch.*.merge so that you can say "git pull" (without any args) to always pull from there would make sense. On the other hand, if you will be interested in different things at different times, that kind of shorthand is not very useful.05:38
gitster agrees that advocating or teaching to others what one does not understand does not make much sense...05:39
spearce of course they say you really learn something if you teach to another.05:40
gitster sure.05:40
corecode heh05:40
okay05:40
i just fear that other people will be really confused05:40
gitster by the way, I've followed up the revert/cherry-pick change to teach "checkout -m" branch switching to use merge-recursive, so that we can follow renames while carrying local changes forward ;-)05:41
spearce heh. very nice. i was thinking today doing a 'checkout -m' that its too bad it wasn't using merge-recursive, as the output was more verbose than i wanted...05:41
(my merge.verbosity=1)05:42
did you setup GITHEAD_* for that invocation?05:42
gitster yes.05:43
spearce sweet.05:43
does anything even use merge-resolve anymore? (in tree anyway)05:44
gitster applypatch hence applymbox. but not am05:45
spearce heh. we can't break those, otherwise Linus' workflow would grind to a halt.05:46
gitster I personally doubt Linus uses -3 so he would not be using resolve there...05:47
spearce actually you can probably put recursive in there to replace resolve just like we did in am and it wouldn't bother anyone. what would would be removing applymbox in favor of am only.05:48
gitster that's my long term plan -- leave applymbox, keep it working but without enhancement and have gittus who would be the last user of the script switch and then remove it ;-).05:49
spearce i'm really happy with how merge is behaving now, between going right into merge-recursive and its controllable verbosity. very nice series of changes there.05:50
to me anyway. :)05:51
gitster heh, that's what you did.05:51
spearce i know. :-)05:51
i'm glad you gave me the verbosity levels though, i was just going to gut it.05:51
corecode gitster: this use of global variables is ugly, btw05:53
gitster: is that on the TODO to be changed?05:54
lyakh joined05:58
spearce corecode: in something like index-pack.c its not a huge issue, that isn't library code. what's worse is the object lists. those make it reallly difficult to reuse the important revision walking routines in a library setting. 05:59
corecode argument passing via global variables is really ugly05:59
gitster it is a small part of more important issue: libification.05:59
I currently lack energy and inclination to rehash the issue for you, but06:00
it has come up at least three times on the list.06:00
ask gmane for things I wrote with keywords like "run-once mentality".06:00
corecode yah06:00
so that is a "yes, on todo"06:01
gitster "no, not on MY todo right now during 1.5.0 stabilization period" ;-).06:01
corecode yah06:01
just generally seen as a good idea06:01
spearce yes. people just need to find it needed, so they work on it.06:02
gitster Absolutely. The static-global (object layer and per repository data structures in general) is one. Another is error return (we do seem to allow die and error handler to be installed by the library using application, though).06:03
spearce gitster: but we assume the die routine aborts the caller. which means either longjmp, or c++ exceptions, or kill the current process. which is not library friendly. 06:03
corecode yah06:04
DrNick still doesn't get how libpng manages while using longjmp()06:04
gitster longjmp is not bad per-se. You need to be careful about leaving garbage behind, though.06:05
corecode you could add a setlongjmp() on every API entry06:05
and have die() longjmp() there so that the API can return a failure06:05
you won't be able to clean up though06:05
sorry to repeat your point :)06:06
DrNick attribute((destructor))06:06
gitster a related issue is atexit() handlers.06:06
DrNick if you really want to kill portability06:06
gitster Hmm. "git remote" may need "edit" subcommand before we go 1.5.0...06:08
corecode oh, there are a bunch of almost-identical do { xread() } while(read < needed)06:08
spearce those should be converted to read_in_full().06:09
gitster If you are into templates, there are also bunch of identical binary search and insert that you could refactor.06:09
spearce assuming they are requiring the total read == needed.06:09
corecode wow. returning NULL on success or const char * on error is also new to me :)06:09
gmake: *** [t3402-rebase-merge.sh] Error 106:14
is that a known issue?06:14
spearce corecode in my gfi branch?06:15
corecode no06:15
git.git/master06:15
gitster Of course not in my environment -- but I do not have to type "gmake", so you might be on something non GNU.06:15
spearce i had thought that broke recently but that it was fixed.06:15
corecode yah, i'm on non-linux06:16
spearce gfi is behind master so the gfi branch could be broken in some non-gfi areas.06:16
gitster We tend to get less coverage on non-Linux, so testing and reporting is very much appreciated.06:16
corecode sure thing06:16
ah.06:23
git-rebase has perl fixed at /usr/bin/perl06:24
is it a good idea to use a absolute path there?06:24
spearce git-rebase invokes perl?06:25
we try not to hardcode perl, so the user can point us to a location other than /usr/bin/perl when they compile git.06:25
corecode yes, ah06:26
i see06:26
on a second run a set perl06:26
maybe Makefile could try `which perl` if PERL_PATH is not set06:27
gitster Don't use 'which' in scripts, ever.06:28
corecode no?06:29
why not?06:29
gitster Have you used Solaris?06:29
corecode no06:29
spearce yea, it sucks there.06:29
corecode sad.06:29
DrNick $ which ls06:29
alias ls='ls --color=tty'06:29
/bin/ls06:29
corecode yah06:29
sure, alias is alias06:29
DrNick of course that's the shell builtin which and not /usr/bin/which06:30
gitster Usually 'which' is fine, but if I recall correctly their which did not fail properly when there is no such thing on the path and screwed up automatic detection.06:30
DrNick what about env?06:30
corecode yah, that's the other possibility06:30
spearce probably just fine to have the Makefile verify PERL_PATH is working.06:31
corecode or simply don't hardcode perl06:31
gitster I think that env is a disease. we are doing token replacement in the Makefile so we can afford to.06:31
corecode spearce: yes, i wanted to suggest that06:31
spearce that way the build stops and asks the user to set it.06:31
gitster cross compilation?06:31
... don't take it seriously -- just trying to be difficult ;-).06:32
corecode well06:32
of course if PERL_PATH is set, there is no need to check that06:32
just bail if there is no /usr/bin/perl06:32
gitster maybe "make sanity"06:32
corecode AND PERL_PATH is not set06:32
spearce unlike svn, git builds in just a couple of minutes. and if you have to cross-compile it, uh, maybe git isn't the best tool for the target if it lacks a compiler.06:33
gitster Or "make test" could do that.06:33
corecode better make it fail on any06:33
gitster Or teach people to read INSTALL ;-)06:33
corecode well, i set PERL_PATH, but didn't make clean06:34
gitster Hmm. We seem to be careful about CFLAGS changes but maybe PERL_PATH is not tracked.06:34
corecode i guess there is no .gitrc06:34
gitster ... and I am not sure if it is worth doing.06:35
corecode i mean ~/.gitrc06:35
spearce corecode: ~/.gitconfig is our personal preference file. its merged with .git/config on the fly. 06:35
but doesn't affect compilation.06:35
gitster Probably Documentation/config.txt needs enhancement (or corecode needs to be taught to read before speak).06:35
I do not think ~/.*rc or ~/.*config should affect building.06:36
Documentation/config.txt does not seem to talk about $HOME/.gitconfig.06:36
Sigh...06:36
spearce gitster: extern void pack_report(); or extern void pack_report(void)? (see recent patch just posted). 06:37
gitster I think the latter is what we do in the rest of the code.06:37
spearce nor does Documentation/config.txt speak of $GIT_DIR/config.06:37
ah, ok, so my mistake. thanks.06:38
corecode oh that wicked06:38
gitster: i read the man pages06:38
gitster Good thing we have a competent people who hasn't lost git virginity.06:38
IOW, I really appreciate your presence ;-).06:38
corecode looks puzzled06:38
corecode :D06:38
you're welcome06:38
spearce we need to keep a steady stream of 'em. :)06:39
corecode so, how is it with commit messages06:41
is something like06:41
Use fixed-size integers for the on-disk pack structure.06:41
enough06:41
or is it common to add more text for that06:41
gitster what commit are you talking about?06:41
corecode one i want to make06:41
spearce its a good first line, i would try to explain why possibly variable sized ones are bad in an additional paragraph below it.06:41
but i can also be rather longwinded. :)06:42
spearce thinks corecode is trying to patch struct pack_header.06:42
corecode yes06:42
i guess you have to separate the paragraphs with a newline, or what was it what i read in common git mistakes?06:42
spearce you don't have to, but it really helps readability.06:43
e.g. git show cf69fd49ec815780080dc6a4ee237eee5ffe874506:43
aside from the leading tab on each line, that's exactly what i put in my editor.06:43
corecode and possibly the signed-off-by06:44
spearce right, i put in my sbo. junio added his when he applied it.06:44
gitster Ok, I added a few sentences at the beginning of config.txt; thanks.06:47
Would it make sense to suggest commit message convention in git-commit.txt, perhaps? Copy a paragraph from ll.88- in tutorial.txt.06:50
spearce yes, i think that makes a lot of sense. hate to copy 77 lines but it would probably help a number of users.06:50
oh, 5 lines. ;-)06:51
gitster I meant the paragraph starting at line 88, sorry.06:51
done.06:51
spearce so i guess there were things missing from 1.5.0. :)06:54
gitster This week is slow due to LCA, so I am debating with myself if I should do an -rc2 tomorrow or leave that til the weekend.06:55
spearce you can debate with yourself, i'd wait til the weekend. we just did -rc1 recently.06:55
gitster (LCA does not necessarily make git slow, but --cc was done during LCA)06:56
spearce hehe.06:56
get a bunch of smart motivated people together.. interesting results come!06:56
gitster I saw Pasky drop by for a short time tonight ...06:56
I am wondering if somebody wants to do git tutorial or BOF at OLS this summer.06:57
spearce yea. popped in just for a minute. managed to fix my packfile on repo.or.cz, its perms were completely whacky. then as quick as he came in, he popped out.06:57
i'd do one, but i'm probably not going to either.06:58
gitster Hmm. 62 commits excluding merges since -rc1. Surely we are slow this week.06:59
spearce folks are busy with other stuff i guess. i know i am.07:00
gitster likewise.07:00
spearce 'course i'm also trying to stay away from things you might be tempted to merge, so 1.5 can stablize and get out.07:01
gitster I need an evil-rerere.07:04
spearce normal rerere doesn't handle evil merge conflict resolutions?07:05
or was it not a conflict, but still needs to be done.07:06
gitster This merge does not textually conflict (I am merging jc/fetch to 'next').07:06
I end up doing the 'commit --amend' to introduce the same evil-mege change.07:06
spearce but it would be nice if rerere recalled it. :)07:07
gitster (background. I use in_merge_bases() in builtin-fetch--tool.c which is a new file. the function's signature is different between master and next, and jc/fetch is forked from master).07:07
spearce yea, i saw that in pu.07:08
niv uh... next is behind master.. :)07:13
spearce yea, sometimes that happens when junio has master ready before next and pushes it out first.07:14
gitster It would stay that way for a while, I would expect.07:16
niv you force the people to use master then *G*07:17
(-the)07:17
gitster It's not about forcing. No new topic has started that is worth to be in 'next' recently.07:18
spearce i think the expectation is that next is always some sort of superset of master. but the only way i've really ever seen next get refreshed with some from master is when topics go into it.07:19
gitster And I already asked very politely to people who follow 'next' usually to follow 'master' in the meantime ;-).07:19
spearce which i started doing. :)07:19
niv yes, you did :)07:19
gitster Well, it seems that I won't be doing -rc2 tomorrow, so instead I'd bring 'next' up-to-date.07:21
bronson_ joined07:35
gitster joined07:39
clee gitster: OC? orange county?07:41
oklahoma city?07:41
gitster that's ISP's exchange and does not have much to do with where I am but I am guessing that is at orange county.07:42
ferdy joined08:37
chris2 joined10:12
Romster needs update, how do i revert it to head version? git reset dosn't do it do i need to --force it?10:37
nevermind git-reset --hard did it for me.10:42
mchehab joined10:51
benlau joined12:18
kynde joined12:22
nud joined12:58
timlarson_ joined13:54
mcheha1 joined14:19
Romster joined14:34
benlau joined14:38
sgrimm joined14:46
kendy joined14:53
kendy Hi there!14:54
Please is there a restriction of the branch/tag name in git?14:54
I'm converting a rather large CVS repository to git (using git-cvsimport), and I got "fatal: Not a valid object name ausetestcwswarumgehtunderscorenicht"14:56
pasky omg :)14:56
that's perverse, you know14:56
kendy pasky: Nazdar! ;-)14:56
pasky ahoj :)14:56
but I don't think there's length restriction14:56
more likely a bug in git-cvsimport, but no time to look at it closer now :(14:57
if noone replies, please drop a mail at the mailing list14:57
kendy pasky: I've restricted it to 30 chars so far, but got another error now ;-(14:57
The other error was:14:57
error: char94: could not verify tag name14:58
fatal: invalid tag signature file14:58
Use of uninitialized value in scalar chomp at /local/bin/git-cvsimport.ooo line 718.14:58
Cannot create tag object CWS_SRX644_AUSE_TESTCWS2_ROOT :14:58
Unfortunately I don't see where is the char #94 ;-)14:58
krh joined15:18
kendy Hmm, the latter is caused by my workaround, but the former still interests me... ;-)15:19
mchehab joined16:09
krh joined16:14
mcheha2 joined16:16
timlarson__ joined16:28
timlarson___ joined16:29
kanru joined16:38
kendy left16:40
Eludias joined17:11
timlarson___ joined17:11
timlarson___timlarson_17:14
lyakh joined18:27
meyering joined18:28
Eludias joined19:04
lyakh joined19:44
nud joined19:48
krh joined19:51
robinr joined20:10
Romster joined21:13
sgrimm joined21:17
clee so it takes 'git blame' about fifteen to twenty seconds to figure out the history for any randomly-chosen file from the KDE repo I've got.21:22
I think this is pretty impressive21:23
but in absolute terms, 15-20 seconds is kinda slow.21:23
nud clee: how does it compare with a similar functionnality in svn ?21:23
clee nud: I have no idea.21:24
good question. :)21:24
clee does a test21:24
nud I like asking good questions, I'm just not good at it ;-)21:24
clee hm.21:29
with a local svn repo, 'time svn blame kdemainwindow.cpp' takes about 0.8 seconds.21:29
er, kmainwindow.cpp.21:30
nud and time git blame kdemainwindow.cpp ? 15s ?21:30
clee is there any way to get 'git-blame' to not spawn $PAGER?21:33
nud git-blame | cat ?21:33
clee ah21:35
export PAGER=cat :)21:35
git blame kmainwindow.cpp 76.08s user 0.34s system 99% cpu 1:16.45 total21:37
way longer than the fifteen or twenty seconds I thought it was.21:37
surely that can be made faster.21:37
nud it probably depends on how much data you need to get from the hard disk21:38
sgrimm That $PAGER thing really annoys one of the guys here who uses Emacs as his terminal program.21:38
clee shrugs21:38
clee it's a *LOT* slower here than svn.21:38
which is amusing.21:38
nud is your git-repo complete now ?21:42
clee yes.21:42
kind of.21:42
niv it could depend on how fast your terminal is.21:42
clee it does not have every single KDE revision in it21:43
no, no.21:43
I'm redirecting to /dev/null.21:43
niv oh then.21:43
robfitz joined22:05
dwmw2_gonedwmw2_lca22:20
nud_ joined22:42
znephf joined22:43
Debolaz joined22:58
pg joined23:01
pg evening, as a total newcomer to git can someone please explain how I switch to a new existing branch when I have un-commited changes in the current branch that I do not wish to commit just yet please - seem like I can see no way to specify the physical directory the checkout files are placed in, am I missing something ?23:03
niv you want to create a new branch?23:05
or you want to change to an existing branch?23:06
pg change to an existing branch without loosing the un-commited changes I have in the current branch *but* without those changes being in the new checkout23:06
since they are unrelated.23:06
robinr pg: git checkout -m23:07
pg I thought the checkout -m performed a merge and thus would include my existing changes in the new branch checkout23:08
robinr if you're paranoid, save the changes using git-diff and apply on the new branch with git-apply23:08
gitster I do not think that is what pg is asking but I am not sure...23:08
pg this is what I am wanting to avoid23:09
clee I think what pg wants is something like:23:09
git diff > current-branch.changes23:09
gitster Can you describe it in terms of "here is what I would do in CVS to do what I want to do"?23:09
pg ok sure23:09
clee git reset --hard23:09
git checkout branchname23:09
pg current branch is "xxx-sub project" and has some un-commited changes23:10
robinr clee: isn' it the same?23:10
clee robinr: no.23:10
robinr: git-checkout -m will merge the changes from the current branch23:10
robinr note the bases in the merge23:10
clee he doesn't want that23:10
pg I need to change and work on "yyy-branch" for a fix but I want to be able to return to "xxx-sub-project" when I have finished there23:10
If I could checkout yyy-branch to a different directory and work there it would be what I need I think23:11
gitster the way we do that (assuming I am understanding you correctly,23:11
the fix to yyy-branch is something small you noticed while working on23:11
xxx-branch) in git is...23:11
robinr the base version is not the same as in a normal merge23:12
gitster (1) typically, a small unrelated thing does not overlap with your existing change for xxx-branch23:12
(2) hence we do not mind taking the working tree change while switching branches -- as long as we do not include the change to the commit we are going to make in yyy-branch.23:12
So if you have already modified file A B C in your working tree (and you are working on xxx-branch), and noticed something in file D that needs to be fixed for yyy-branch,23:13
you would do "git checkout yyy-branch", do your fix there to file D, and then commit only that change (with "edit D; git add D; git commit" -- note that the last "git commit" does not have -a nor any filename), and come back with "git checkout xxx-branch".23:14
pg gitster: almost there except for 1) new change in yyy-branch *may* include changes to same files and 2) it may be a while in the fixing [i.e. I want to be able to work on both and switch between them freely if possible without extra commits just to same intermediate work]23:14
gitster That is how git is normally used by experts.23:14
If you are on the other hand used to multi-task and rather want to have two working trees, then23:15
you could make a cheap local clone. Say you are working on xxx-branch in directory D1 (so `pwd` would say D1, and D1/.git is where your repository metadata lives),23:16
and without disturbing what's there you would do: "cd ..; git clone -s -l D1 D2".23:16
Then "cd D2 && git checkout yyy-branch" and do your fix there.23:16
pg now that workflow with the file D small change I like, I will have to remember I can do that :) As I said very new to git23:17
gitster The fix may take time and while you are compiling or running test in D2 you may come back and keep working on xxx-branch in D1.23:17
pg Ah, that local clone idea I thought off and just wondered if there was a better way of doing things23:17
so the local clone is the correct way to do this in git -- yes ?23:17
gitster Not multi-tasking is the correct way if you ask Linus and me -- we don't multitask.23:18
But the thing is, there is no single "correct way" forced upon you.23:18
If I were as good at multi-tasking as you are, I would do the local cloning (one branch per repo).23:19
pg believe me not multi-tasking would be nice but not an option for me in the real world23:19
hmm, just looking at the help for the -s option and I am not sure I understand what it does for me, can you elaborate please23:20
gitster The new repository will borrow objects from the original one (which implies that D2 will be hosed if you decide to "rm -fr D1" in my previous example).23:23
Debolaz2 joined23:23
gitster ... which is a storage optimization (and saves time while cloning).23:23
pg ah, nice23:23
clee doesn't 'git-clone -l' use hardlinks?23:23
pg Have only been playing with git for a day or so and I have to say it does feel very nice the more I find out about ot23:24
gitster -s saves even more -- it does not even use hardlink.23:24
it instead uses alternates mechanism.23:24
clee gitster: right, but -s is crazy and prone to failure if you remove stuff from D123:24
I can't imagine that, on a local disk, it's that much of a win :)23:24
hardlinks are cheap and fast and awesome23:24
gitster nobody forces you to use -s.23:24
clee YOU'RE FORCING ME TO USE -s AND I HATE IT23:25
... oh, no, you're right. :)23:25
anyway. git-blame is slow.23:26
gitster: like, a lot slower than svn blame.23:26
and I get this when I run git annotate:23:26
gitster -s makes sense for the cheap local clone workflow pg wants, but as you say you need to be careful.23:26
clee root git/kdelibs/kdeui # git annotate kmenubar.cpp23:26
fatal: bad default revision 'HEAD'23:26
pg well I am gona nip off now and try this out -- many thanks for the help, it is much appreciated23:26
clee if I do 'git blame kmenubar.cpp' it works23:26
Debolaz joined23:28
clee (but very very slowly)23:28
svn blame kmenubar.cpp 0.64s user 1.44s system 36% cpu 5.635 total23:28
git-blame kmenubar.cpp 83.34s user 0.34s system 99% cpu 1:23.90 total23:28
Debolaz joined23:32
gitster that's a good reason for you to stick with svn, I suppose ;-).23:33
clee I'm just collecting numbers. :)23:33
are there any known easy targets for optimization in git-blame?23:33
gitster I do not think blame has seriously optimized yet -- you are welcome to take a crack at it. I think I've plucked all the low hanging fruits, though.23:34
clee you bastard. ;)23:34
gitster If you go back to the mailing list archive, you see posts by Linus on tradeoffs he made while designing the basic data structure of git.23:34
clee it takes about 21 minutes to verify the entire pack, btw23:35
gitster and per-path operation like annotate/blame is not one of the things it was optimized for.23:35
clee git verify-pack 1144.12s user 102.49s system 97% cpu 21:23.84 total23:35
gitster Is that a good thing or bad thing?23:35
gitster notices the patch he sent out to make .patch the default for format-patch does not appear on the mailing list...23:36
clee I think it's pretty impressive for a 3GB pack23:36
is verify-pack recursive?23:37
gitster explain "recursive".23:37
clee (IE, is it as optimized as it could be, or is there some work that could be done there?)23:37
well, I know that you start off with the most recent commit, HEAD, right23:37
and then you find the parent23:37
and verify it23:37
and verify it's parent, etc23:37
right?23:37
gitster It needs to be exhaustive, I think.23:37
But it does not use ancestry chain IIRC.23:38
dwmw2_lcadwmw2_gone23:38
gitster What it verifies can be seen in pack-check.c; it makes sure that .idx is correct and the data that comes out of the packfile is not corrupt.23:39
clee: you were the one who did the frontend for Shawn's gfi to import that huge pack, right?23:40
clee yep23:40
gitster then you know a packfile is not about ancestry already --- who was I giving lecture on it X-<.23:41
clee yep.23:41
gitster For things like full KDE, what would have been nicer was a reasonable subproject support. I do not think tracking set of independent applications in a single tree fully sync'ed makes much sense.23:44
clee yeah.23:44
I'm interested in any developments in splitting out a gigantic repo like this into subprojects23:44
gitster: to be fair, with KDE, we've moved a lot of stuff around between modules23:45
and it's nice to not lose history23:45
like, some libraries that started off in kdebase are now in kdelibs23:45
and some apps and libs from kdenetwork moved to kdepim23:45
that sort of t hing23:45
er, thing23:45
robinr clee: have you followed the threads on the topic on the mailing list?23:46
clee robinr: no.23:47
robinr look them up. Most of it is about indepdendent submodules though23:47
clee I dunno. I want real modules.23:48
but I also want to be able to follow history of files that move between them.23:48
robinr me too23:48
gitster me three ;-).23:50
robinr i'm all four it23:50
the problem is that people want modules for widely different reason23:51
is anyone using git-cvsexportcommit besides me? (someone wrote it originally of course). The only thing missing now is getting rid the need for a huge CVS checkout.23:53
it should be possible to work only on the files involved.23:54
gitster I wonder if you can use the same directory as both CVS checkout and git working tree..23:55
robinr sometimes, but a nice thing with the current state is that you do not necessarily have to commit the same "base"23:58
you can commit to any CVS branch as long as the patches apply cleanly23:59
I like that23:59
gitster and overlapping working tree does not allow that how?23:59

Logs Search ←Prev date Next date→ Channels Documentation