threads / discuss / 26651

Google Summer of Code 2011

Subject: Google Summer of Code 2011

## tl;dr

63 messages between Mar 3, 2011 and Mar 25, 2011.

replies: 62people: 21as markdown or json

Jeff King· Mar 3, 2011, 18:59 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

On Thu, Mar 03, 2011 at 10:08:25AM -0800, Shawn O. Pearce wrote:
> Anyone want to mentor this year?

I'd be happy to. I can also act as org admin this year if you want. I bowed out last year due to impending baby, but have no such excuse this year. :)

Should we also start a call for project suggestions? I haven't been paying attention to the GSoC timeline.

-Peff
Shawn Pearce· Mar 3, 2011, 19:04 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

On Thu, Mar 3, 2011 at 10:59, Jeff King <peff@peff.net> wrote:
Show 7 quoted lines
> On Thu, Mar 03, 2011 at 10:08:25AM -0800, Shawn O. Pearce wrote:
>
>> Anyone want to mentor this year?
>
> I'd be happy to. I can also act as org admin this year if you want. I
> bowed out last year due to impending baby, but have no such excuse this
> year. :)
I would appreciate that, I'm too busy this year. :-(
> Should we also start a call for project suggestions? I haven't been
> paying attention to the GSoC timeline.
Org application deadline is March 11: 23:00 UTC
-- 
Shawn.
Jeff King· Mar 3, 2011, 20:33 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

On Thu, Mar 03, 2011 at 11:04:51AM -0800, Shawn O. Pearce wrote:
Show 5 quoted lines
> > I'd be happy to. I can also act as org admin this year if you want. I
> > bowed out last year due to impending baby, but have no such excuse this
> > year. :)
> 
> I would appreciate that, I'm too busy this year. :-(
OK, there is now:
  https://git.wiki.kernel.org/index.php/SoC2011Application
which is mostly just an adapted version of last year's application.

I'll give people a week or so to make changes, and then do the application with Google probably next Wednesday or Thursday.

> > Should we also start a call for project suggestions? I haven't been
> > paying attention to the GSoC timeline.
> 
> Org application deadline is March 11: 23:00 UTC

Looks like accepted projects are announced on the 18th, and then we should be talking to students about it. So we should probably have a relatively complete list of ideas by the 18th. I set up a bare-bones idea page here if people want to start adding ideas:

  https://git.wiki.kernel.org/index.php/SoC2011Ideas
-Peff
Jakub Narebski· Mar 3, 2011, 21:25 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

Jeff King <peff@peff.net> writes:
Show 11 quoted lines
> On Thu, Mar 03, 2011 at 11:04:51AM -0800, Shawn O. Pearce wrote:
> 
> > > I'd be happy to. I can also act as org admin this year if you want. I
> > > bowed out last year due to impending baby, but have no such excuse this
> > > year. :)
> > 
> > I would appreciate that, I'm too busy this year. :-(
> 
> OK, there is now:
> 
>   https://git.wiki.kernel.org/index.php/SoC2011Application
Quote:
 "In 2010, we had three projects: native svn support, libgit2, and a
  line level history browser.
  All three projects were successful. [...]"

What about 'integrated web client for git', aka. "Splitting gitweb and developing write functionalities" project wit Pavan Kumar Sankara (pkumar), which failed midterm evaluations?

See https://git.wiki.kernel.org/index.php/SoC2010Projects#Splitting_gitweb_and_developing_write_functionalities_.28Integrated_web_client_for_git.29
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Jeff King· Mar 9, 2011, 16:38 UTC · re: Jakub Narebski · lore

Re: Google Summer of Code 2011

On Thu, Mar 03, 2011 at 01:25:16PM -0800, Jakub Narebski wrote:
Show 16 quoted lines
> > OK, there is now:
> > 
> >   https://git.wiki.kernel.org/index.php/SoC2011Application
> 
> Quote:
> 
>  "In 2010, we had three projects: native svn support, libgit2, and a
>   line level history browser.
> 
>   All three projects were successful. [...]"
> 
> What about 'integrated web client for git', aka. "Splitting gitweb and
> developing write functionalities" project wit Pavan Kumar Sankara
> (pkumar), which failed midterm evaluations?
> 
> See https://git.wiki.kernel.org/index.php/SoC2010Projects#Splitting_gitweb_and_developing_write_functionalities_.28Integrated_web_client_for_git.29

Thanks, I had totally forgotten about that project and didn't find it mentioned on the GSoC site (I guess because it failed). I couldn't find any discussion of its failure, though. Is there more information somewhere?

-Peff
Jeff King· Mar 9, 2011, 16:39 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

On Thu, Mar 03, 2011 at 03:33:23PM -0500, Jeff King wrote:
Show 7 quoted lines
> > I would appreciate that, I'm too busy this year. :-(
> 
> OK, there is now:
> 
>   https://git.wiki.kernel.org/index.php/SoC2011Application
> 
> which is mostly just an adapted version of last year's application.

We need to list a backup admin. Can I volunteer you for that (or are there are volunteers)?

-Peff
Shawn Pearce· Mar 9, 2011, 16:47 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

On Wed, Mar 9, 2011 at 08:39, Jeff King <peff@peff.net> wrote:
Show 12 quoted lines
> On Thu, Mar 03, 2011 at 03:33:23PM -0500, Jeff King wrote:
>
>> > I would appreciate that, I'm too busy this year. :-(
>>
>> OK, there is now:
>>
>>   https://git.wiki.kernel.org/index.php/SoC2011Application
>>
>> which is mostly just an adapted version of last year's application.
>
> We need to list a backup admin. Can I volunteer you for that (or are
> there are volunteers)?
Sure, I can be the backup admin.
-- 
Shawn.
Jeff King· Mar 9, 2011, 17:49 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

On Thu, Mar 03, 2011 at 03:33:23PM -0500, Jeff King wrote:
Show 8 quoted lines
> OK, there is now:
> 
>   https://git.wiki.kernel.org/index.php/SoC2011Application
> 
> which is mostly just an adapted version of last year's application.
> 
> I'll give people a week or so to make changes, and then do the
> application with Google probably next Wednesday or Thursday.

Our application is officially in. However, we can still edit it until the deadline on Friday. If you have changes, feel free to make them on the wiki page but make sure to let me know, as I have to migrate them to the official application. I'll also probably do a once-over on Friday to check for any updates. If only the wiki was kept in git. :)

Also, the application links to our ideas page. Please add ideas! It will give the GSoC people a sense of what we are thinking of for projects, and students will probably start looking at them after the list of accepted organizations is published (which is next Friday, the 18th).

-Peff
Shawn Pearce· Mar 9, 2011, 17:52 UTC · re: Jeff King · lore

Re: Google Summer of Code 2011

On Wed, Mar 9, 2011 at 09:49, Jeff King <peff@peff.net> wrote:
Show 21 quoted lines
> On Thu, Mar 03, 2011 at 03:33:23PM -0500, Jeff King wrote:
>
>> OK, there is now:
>>
>>   https://git.wiki.kernel.org/index.php/SoC2011Application
>>
>> which is mostly just an adapted version of last year's application.
>>
>> I'll give people a week or so to make changes, and then do the
>> application with Google probably next Wednesday or Thursday.
>
> Our application is officially in. However, we can still edit it until
> the deadline on Friday. If you have changes, feel free to make them on
> the wiki page but make sure to let me know, as I have to migrate them to
> the official application. I'll also probably do a once-over on Friday to
> check for any updates. If only the wiki was kept in git. :)
>
> Also, the application links to our ideas page. Please add ideas! It will
> give the GSoC people a sense of what we are thinking of for projects,
> and students will probably start looking at them after the list of
> accepted organizations is published (which is next Friday, the 18th).

The ideas page is very important. Git needs a good set of ideas on its ideas page in order to be accepted. Google has stated this many times in the past, its a key part of the decision making process (not the only part, but an important part nonetheless).

We should have a good ideas page by the application deadline, so that when Google goes to review applications, they can at least make a fair assessment of our ideas list.

-- 
Shawn.
Jeff King· Mar 9, 2011, 21:58 UTC · re: Shawn Pearce · lore

Summer of Code project ideas due this Friday

On Wed, Mar 09, 2011 at 09:52:17AM -0800, Shawn O. Pearce wrote:
Show 8 quoted lines
> The ideas page is very important. Git needs a good set of ideas on its
> ideas page in order to be accepted. Google has stated this many times
> in the past, its a key part of the decision making process (not the
> only part, but an important part nonetheless).
> 
> We should have a good ideas page by the application deadline, so that
> when Google goes to review applications, they can at least make a fair
> assessment of our ideas list.

Then let's repeat it with a more eye-catching subject, and cc all of the people who have said they would mentor so far.

For those just joining us:

The Google Summer of Code application deadline is this Friday (March 11) at 23:00 UTC. They will be looking at our ideas page at:

    https://git.wiki.kernel.org/index.php/SoC2011Ideas

If you have any ideas, please add them to the page! Whether you are available to mentor the project, or simply think it would make a good project and want to inspire others to mentor it, it's appropriate to go there.

-Peff
Jonathan Nieder· Mar 10, 2011, 00:10 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Hi,
Jeff King wrote:
> If you have any ideas, please add them to the page!

Thanks for a pointer. Some ideas still at the "throw them against the wall and see if they stick" stage: please feel free to add to the page if you think you can find subsets with the right scope. Later today I can look more carefully.

1. Cross-compilable msysgit: ideally, allowing someone to run
   "make msysgit-installer" on Linux from an msysgit-source.git repo
   to get an installer.  Nice subsets to start with might be msys.dll
   (I think there has been some work on that already) and the basic
   msys utilities.
2. Merge libgit2 into git.git: polish the existing code in libgit2 so
   that standard git can use it.  Presumably this would happen by
   porting one function at a time, not by making git link to libgit2
   immediately.  People familiar with libgit2 might be able to pick
   out particularly interesting subsets to start with (diff
   generation?).
3. Remote helpers: bidi git remote-svn (or one-way remote-hg, or
   remote-cvs, or ...).
4. filter-branch killer: using fast-import's new features to implement
   common filter-branch operations (--subdirectory-filter,
   --prune-empty, obliterating certain files) faster.
5. rev-list: Coping with timeskew.
6. shallow clone: Push support.
7. fixing workdirs (and alternates), along the lines explained in the
   thread <http://thread.gmane.org/gmane.comp.version-control.git/150559>.
   I would be very much interested in this.
7. packfilev4.
Jeff King· Mar 10, 2011, 16:30 UTC · re: Jonathan Nieder · lore

Re: Summer of Code project ideas due this Friday

On Wed, Mar 09, 2011 at 06:10:17PM -0600, Jonathan Nieder wrote:
Show 6 quoted lines
> 2. Merge libgit2 into git.git: polish the existing code in libgit2 so
>    that standard git can use it.  Presumably this would happen by
>    porting one function at a time, not by making git link to libgit2
>    immediately.  People familiar with libgit2 might be able to pick
>    out particularly interesting subsets to start with (diff
>    generation?).

That's definitely bigger than a SoC project at this point. However, one smaller project might be to start implementing a subset of git commands (probably plumbing) on top of libgit2, and then see how well the result passes git.git tests.

> 4. filter-branch killer: using fast-import's new features to implement
>    common filter-branch operations (--subdirectory-filter,
>    --prune-empty, obliterating certain files) faster.

Yeah, I like that. Or maybe somebody can pick up git-sequencer, which in theory could be used to filter-branch, too (or maybe sequencer can go on top of fast-import? :) ).

> 5. rev-list: Coping with timeskew.

I don't think this is big enough for a SoC project. It's on my todo list for the near-term, though.

> 7. packfilev4.
I suspect that is too complex for a SoC project. But you never know.
-Peff
Shawn Pearce· Mar 10, 2011, 17:31 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 08:30, Jeff King <peff@peff.net> wrote:
>
>> 7. packfilev4.
>
> I suspect that is too complex for a SoC project. But you never know.
It is. Nico is also probably working on it.

My big concern with pack v4 right now is the on-disk format of commits/trees is different from the current wire protocol. If a pack v2 only client connected to a server using pack v4, the server would have to spend a lot of time to inflate/deflate about 60% of the objects in the repository (commits and trees). That is a lot of CPU time. So even if a SoC-er finished the work, it probably wouldn't be merged because of this penalty.

-- 
Shawn.
Alexander Miseler· Mar 10, 2011, 21:43 UTC · re: Shawn Pearce · lore

Re: Summer of Code project ideas due this Friday

On 10.03.2011 18:31, Shawn Pearce wrote:
Show 15 quoted lines
> On Thu, Mar 10, 2011 at 08:30, Jeff King <peff@peff.net> wrote:
>>
>>> 7. packfilev4.
>>
>> I suspect that is too complex for a SoC project. But you never know.
> 
> It is. Nico is also probably working on it.
> 
> My big concern with pack v4 right now is the on-disk format of
> commits/trees is different from the current wire protocol. If a pack
> v2 only client connected to a server using pack v4, the server would
> have to spend a lot of time to inflate/deflate about 60% of the
> objects in the repository (commits and trees). That is a lot of CPU
> time. So even if a SoC-er finished the work, it probably wouldn't be
> merged because of this penalty.
I'm very interested in this. Can anyone please point me towards further information on the packfile format and proposed/in-progress changes?
Thomas Rast· Mar 10, 2011, 17:15 UTC · re: Jonathan Nieder · lore

Re: Summer of Code project ideas due this Friday

Jonathan Nieder wrote:
> Thanks for a pointer.  Some ideas still at the "throw them against the
> wall and see if they stick" stage: please feel free to add to the page
> if you think you can find subsets with the right scope.
Some stuff off the top of my head, please apply a similar filter:
* Word-based merge helper
  The existing merge algorithms are all tailored to line-based formats
  such as code.  Writing, e.g., LaTeX or even asciidoc requires
  sticking to a strict word-wrapped format.  Worse even, re-wrapping
  leads to headaches if people work on the same areas a lot, much like
  the effects of code reindents.
  Something similar was already proposed in 2010, IIRC by Dscho:
    https://git.wiki.kernel.org/index.php/SoC2010Ideas#Merge_helper_for_LaTeX_files
  One possible angle of attack given --word-diff=porcelain would be:
  1. Fix --word-diff to properly represent both sides of the diff at
     least optionally.  (It was observed in a list post some months
     ago that it doesn't even represent *one* side faithfully.)
  2. Use --word-diff=porcelain as input to some to-be-written merge
     algorithm.
* Clean up add -p
  git-add--interactive.perl became a bit of a mess.  Partly due to my
  own efforts with {checkout,stash,...} it has bolted-on interfaces to
  other commands.  There are some UI issues that simply fall out of
  its design, e.g., you cannot go back from one file to another,
  Ctrl-C stops applying to the current file but does not discard
  earlier files, etc.  And that's not saying anything about 'add -i'
  which I don't really know.
  This would probably not be a very fun project, but it could add a
  little edge of usability to the tool and it's probably one of the
  few pure-Perl ideas we can offer.
> 4. filter-branch killer: using fast-import's new features to implement
>    common filter-branch operations (--subdirectory-filter,
>    --prune-empty, obliterating certain files) faster.
I would phrase this as follows:
* fast-import-filter
  Implement a utility that can execute certain transformations to
  fast-import streams, such as:
  - delete or rename entire files/directories
  - split out subtrees
  - ...
  Ideally, this should be a thin command line interface around a set
  of primitives (such as a Perl package) that allow a competent
  scripter to go beyond the CLI.  (There have been threads on this.)
  Later on, make an interface that automatically does
    git fast-export | fast-import-filter | git fast-import
  with suitable options.  Nice because it should be largely orthogonal
  to everything except the fast-import stream format.
In addition, Jeff wrote:
> Yeah, I like that. Or maybe somebody can pick up git-sequencer, which in
> theory could be used to filter-branch, too (or maybe sequencer can go on
> top of fast-import? :) ).

I'd be interested to hear how that goes, because I think the tools are fundamentally different. The rebase and thus sequencer family is delta-based, and the fast-import and filter-branch families are tree-based. Feel free to prove me wrong of course.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Santi Béjar· Mar 10, 2011, 18:17 UTC · re: Thomas Rast · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 6:15 PM, Thomas Rast <trast@student.ethz.ch> wrote:
Show 14 quoted lines
> Jonathan Nieder wrote:
>> Thanks for a pointer.  Some ideas still at the "throw them against the
>> wall and see if they stick" stage: please feel free to add to the page
>> if you think you can find subsets with the right scope.
>
> Some stuff off the top of my head, please apply a similar filter:
>
> * Word-based merge helper
>
>  The existing merge algorithms are all tailored to line-based formats
>  such as code.  Writing, e.g., LaTeX or even asciidoc requires
>  sticking to a strict word-wrapped format.  Worse even, re-wrapping
>  leads to headaches if people work on the same areas a lot, much like
>  the effects of code reindents.

Not a complete/right solution (and not even extensively tested), but I did a "trivial" merge program for LaTeX files that:

1.- Rewraps all files as the first one, using dwdiff 2.- Perform a normal line based merge

[wlmerge] #!/bin/bash tmp1=$(mktemp -t wlmerge.XXXXXXX) tmp2=$(mktemp -t wlmerge.XXXXXXX) trap "rm -f $tmp1 $tmp2" 0 1 2 3 15 [ ! -e "$1" ] && exit 1 file1=$1 && shift [ ! -e "$1" ] && exit 1 orig=$1 && shift [ ! -e "$1" ] && exit 1 file2=$1 && shift dwdiff -2 -w "" -x "" "$orig" "$file1" > $tmp1 dwdiff -2 -w "" -x "" "$file2" "$file1" > $tmp2 merge "$file1" $tmp1 $tmp2

I even have a "wldiff", but nowadays I use --color-words exclusively!

HTH, Santi

Jeff King· Mar 10, 2011, 18:46 UTC · re: Thomas Rast · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 06:15:23PM +0100, Thomas Rast wrote:
Show 13 quoted lines
> * Clean up add -p
> 
>   git-add--interactive.perl became a bit of a mess.  Partly due to my
>   own efforts with {checkout,stash,...} it has bolted-on interfaces to
>   other commands.  There are some UI issues that simply fall out of
>   its design, e.g., you cannot go back from one file to another,
>   Ctrl-C stops applying to the current file but does not discard
>   earlier files, etc.  And that's not saying anything about 'add -i'
>   which I don't really know.
> 
>   This would probably not be a very fun project, but it could add a
>   little edge of usability to the tool and it's probably one of the
>   few pure-Perl ideas we can offer.

One more wishlist item for this. I use "add -p" for almost all of my adds these days, because I like the final review check. So after a conflicted merge, I find myself doing "add -p" to stage my resolution. The current behavior is that it shows the --cc diff and exits. It would be cool to handle staging the resolution, which would involve converting the combined diff into something that can be applied.

> I'd be interested to hear how that goes, because I think the tools are
> fundamentally different.  The rebase and thus sequencer family is
> delta-based, and the fast-import and filter-branch families are
> tree-based.  Feel free to prove me wrong of course.

Hmm, yeah, that is a fundamental difference. It might be possible to overcome it, but I admit I haven't really given it any thought yet at this point.

-Peff
Junio C Hamano· Mar 10, 2011, 19:21 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Jeff King <peff@peff.net> writes:
Show 6 quoted lines
> One more wishlist item for this. I use "add -p" for almost all of my
> adds these days, because I like the final review check. So after a
> conflicted merge, I find myself doing "add -p" to stage my resolution.
> The current behavior is that it shows the --cc diff and exits. It would
> be cool to handle staging the resolution, which would involve converting
> the combined diff into something that can be applied.

I think the end-result would be a nice feature. I suspect that it would not involve conversion from --cc, but more like using the difference between the HEAD and the working tree, generated as if there is no multi-stage index.

Jeff King· Mar 10, 2011, 19:28 UTC · re: Junio C Hamano · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 11:21:47AM -0800, Junio C Hamano wrote:
Show 13 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > One more wishlist item for this. I use "add -p" for almost all of my
> > adds these days, because I like the final review check. So after a
> > conflicted merge, I find myself doing "add -p" to stage my resolution.
> > The current behavior is that it shows the --cc diff and exits. It would
> > be cool to handle staging the resolution, which would involve converting
> > the combined diff into something that can be applied.
> 
> I think the end-result would be a nice feature. I suspect that it would
> not involve conversion from --cc, but more like using the difference
> between the HEAD and the working tree, generated as if there is no
> multi-stage index.

The trouble is that I would like to see the combined diff, then say "OK" and have it apply the result to the index. But because we work on a per-hunk basis, you need to match the combined diff hunks to the regular diff hunks, taking into account that hunks could be split. Which maybe is straightforward, but I haven't convinced myself yet that there are no corner cases where they don't line up.

I guess one could argue that I should be using mergetool, and making a mergetool helper that is more like "add -p" (show hunks, say "choose left, choose right, choose none"). But I generally fix up the conflict using an editor and just want "add -p" as a final check.

I'll probably look into it more eventually, but it's not a high priority at this point.

-Peff
Junio C Hamano· Mar 10, 2011, 20:54 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Jeff King <peff@peff.net> writes:
Show 11 quoted lines
>> I think the end-result would be a nice feature. I suspect that it would
>> not involve conversion from --cc, but more like using the difference
>> between the HEAD and the working tree, generated as if there is no
>> multi-stage index.
>
> The trouble is that I would like to see the combined diff, then say "OK"
> and have it apply the result to the index. But because we work on a
> per-hunk basis, you need to match the combined diff hunks to the regular
> diff hunks, taking into account that hunks could be split.  Which maybe
> is straightforward, but I haven't convinced myself yet that there are no
> corner cases where they don't line up.

Forgetting for now the implementation, I _think_ what you would want is for "git add -p" to notice that you are resolving conflicts, and do not bother you about cleanly merged parts (I take it is a given that you would always want to add them to the index without even inspecting when running "add -p"), and make the per-hunk selection loop ask only about the parts that originally had conflicts.

But it is rather hard to arrange. Neither "--cc" nor "-c" during the merge is about showing conflicts but is about showing the result with respect to the two originals. If you resolved conflicts in your editor already, there are no lines with "<<</>>>" markers that are different from either original to cause the "conflicted parts" to appear in their output. If your conflict resolution ended up in taking what one side did, "--cc" will hide it as a non-event. So at least you would be using "-c" to implement this.

Also, you have to remember that "add -p" is about adding the state you deem Ok incrementally to the index, that once you add a path to the index the higher stages for the path will collapse to stage #0, and that "-c" and "--cc" make their comparison based on what you have in higher stages.

I would imagine that a workable implementation might look like this:
 0. The solution introduces a new index extension, "PRSF" (partial
    resolution so far)".  This is a mapping from pathname to a blob object
    name.
 1. "git add -p" notices that you are in the middle of conflict
    resolution, by noticing that you have higher stages to the path.
 2. Look up the path from the PRSF extension.  If there is no entry for
    the path, recreate the content-level 3-way merge using the content of
    three stages (i.e. the state immediately after the mergy operation
    that caused the conflicts before you touched the corresponding file in
    your working tree), and register this image (with the full glory of
    "<<</>>>" conflict markers) to the extension.  If there already is an
    entry in the extension for the path, skip this step.
 3. The patch the user will see in the interactive hunk selection is the
    difference between the working tree and the PRSF image, not your
    regular index (nor the HEAD version). This allows you to see how you
    resolved the conflict incrementally so far.
 4. Choosing a hunk to "apply" would not affect the index entry for the
    path, as it would collapse its higher stages.  It instead updates the
    blob registered in the PRSF extension using the hunk you are applying.

If you are running "git add -p" incrementally (i.e. edit a little, review with diff, then "add -p" the part you are sure about, and repeat the whole thing), the next invocation of "git add -p" would notice that you still have unresolved conflicts in PRSF. It will skip the step 2 above and the step 3 will let you review the remaining difference between the PRSF image (which you updated in step 4 during the last round) and what you have in the working tree. The step 4 will update the PRSF image for the next invocation of "git add -p". And you continue until you are done.

At the end (we would probably need a good way to detect the user might want to declare "end" automatically for a good user experience), use the PRSF image to collapse the higher stages for the path down to stage 0.

Jeff King· Mar 10, 2011, 21:42 UTC · re: Junio C Hamano · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 12:54:29PM -0800, Junio C Hamano wrote:
Show 6 quoted lines
> Forgetting for now the implementation, I _think_ what you would want is
> for "git add -p" to notice that you are resolving conflicts, and do not
> bother you about cleanly merged parts (I take it is a given that you would
> always want to add them to the index without even inspecting when running
> "add -p"), and make the per-hunk selection loop ask only about the parts
> that originally had conflicts.

Yes, I don't want to see cleanly merged parts. And "--cc" already does what I want by not showing them. But of course they still need to be added to the index.

So my thinking was more along the lines of:
  1. Get "git diff HEAD file" and store its hunks.
  2. Get "git diff --cc file" and stores its hunks.
  3. For each hunk in (1), if it does not have an analagous hunk in (2),
     mark it for staging without asking the user.
  4. For the remaining hunks in (1), show the user the analagous --cc
     hunk from (2), and mark the hunk from (1) for staging if requested.
  5. Create the final patch from the marked hunks, apply it to
     HEAD:file, and put that in the index.

There are two issues (and I think you know this, but it took me reasoning out why this wouldn't work to quite understand what you were saying in your email, so I'll elaborate here for the benefit of other readers):

  a. Step (3) glosses over the definition of "analagous hunk". In simple
     cases the hunk headers match up (i.e., they start at the same
     offsets). But the --cc diff is actually a diff against the merge
     base, and the diff in step (1) is against HEAD. So actually we
     would want step (1) and (5) to deal not with the file in HEAD, but
     the file in the merge-base.
     Or we can use "-c" in the first place, which gives us interesting
     and uninteresting parts, and then suppress the uninteresting ones.
  b. You can't stage part of a resolution. This is the "adding a path
     collapses stages to #0" that you mentioned. So either you need an
     index extension, or you need to make it all-or-nothing.
> [discussion of how this could be done right]

That description makes sense to me, but is way overkill for my workflow. I think at its simplest, what I would like is to be shown the entire --cc diff, have it say "do you want this and all of the cleanly merged bits added?" and then either stage the whole thing or not.

Which really I could do with:
  for i in `git diff-files --name-only --diff-filter=U`; do
    git diff --cc $i
    echo 'OK?'
    read r
    test "$r" = y && git add $i
  done

It would just be a little nicer to have it integrated into the "git add -p" loop.

Even though it is obviously a less featureful solution than what you proposed, I am tempted to implement it anyway because the current behavior is so bad (it shows the diff but doesn't consider it a selectable hunk at all, so it just skips it, exiting immediately if there are no other files).

And then if somebody wants to spend time allowing partial resolution selection, it would be a nice improvement on top of that.

-Peff
Junio C Hamano· Mar 10, 2011, 22:58 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Jeff King <peff@peff.net> writes:
> Yes, I don't want to see cleanly merged parts. And "--cc" already does
> what I want by not showing them.
Are you sure about that?

What "--cc" would show largely depends on what you have in your working tree. If your two branches fixed the same bug with very different approaches, you may resolve the conflict favouring what one side did while discarding everything the other side did. The file in your work tree might be the same as "git checkout --ours $that_path" after a mergy operation. "diff --cc" won't show anything to you in such a case.

Show 14 quoted lines
> So my thinking was more along the lines of:
>
>   1. Get "git diff HEAD file" and store its hunks.
>
>   2. Get "git diff --cc file" and stores its hunks.
>
>   3. For each hunk in (1), if it does not have an analagous hunk in (2),
>      mark it for staging without asking the user.
>
>   4. For the remaining hunks in (1), show the user the analagous --cc
>      hunk from (2), and mark the hunk from (1) for staging if requested.
>
>   5. Create the final patch from the marked hunks, apply it to
>      HEAD:file, and put that in the index.

Actually, the largest problem I see in the above approach is _when_ you perform the first two steps, not the details of the later steps.

The user has complete freedom outside our control between the time the mergy operation leaves conflicts in the index and the time "add -p" is invoked (except obviously the user cannot do any "add" to register the resolution for the whole file to the index, as there won't be any per-hunk resolution recording left to do by "add -p").

And as I repeatedly said, grabbing "--cc file" must be done before the user starts mucking with the file in the working tree for the approach to be any useful.

>> [discussion of how this could be done right]
>
> That description makes sense to me, but is way overkill for my workflow.

Obviously I don't think so. I'd rather consider what it does an absolute minimum (not the part that it stores in an index extension, but the part that the reference it uses to compare against the working tree file is a original, mechanical merge result). By the way, I just relized that an index extension similar to PRSF might be a way to properly give index log similar to the reflog you wanted to have the other day---every time you "git add", you record the previous state of the index entry there, so that it can be replayed in reverse.

Show 5 quoted lines
> Which really I could do with:
>
>   for i in `git diff-files --name-only --diff-filter=U`; do
>     git diff --cc $i
>     echo 'OK?'

As you already know, I disagree the usefulness of this approach (see the "Are you sure about that?" discussion), hence I doubt the usefulness of "have it integrated into the "git add -p" loop".

Jeff King· Mar 10, 2011, 23:09 UTC · re: Junio C Hamano · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 02:58:07PM -0800, Junio C Hamano wrote:
Show 6 quoted lines
> Jeff King <peff@peff.net> writes:
> 
> > Yes, I don't want to see cleanly merged parts. And "--cc" already does
> > what I want by not showing them.
> 
> Are you sure about that?
Well, no. But my experience has been that its output is useful.
Show 6 quoted lines
> What "--cc" would show largely depends on what you have in your working
> tree. If your two branches fixed the same bug with very different
> approaches, you may resolve the conflict favouring what one side did while
> discarding everything the other side did. The file in your work tree might
> be the same as "git checkout --ours $that_path" after a mergy operation.
> "diff --cc" won't show anything to you in such a case.

Actually, I think diff --cc is doing what I want there. If I take one side's content completely, then it is not interesting to me anymore. What I am really concerned about is doing a tricky content-level merge in my editor and then screwing up the result. Or _trying_ to take one side of the merge, and then screwing it up. So the "diff --cc" output after I have mucked is useful for both those cases.

> And as I repeatedly said, grabbing "--cc file" must be done before the
> user starts mucking with the file in the working tree for the approach to
> be any useful.

I'm not sure I agree. The output after I have mucked is useful to me, and that is what this use-case is based on. So I think we are talking about related but slightly different use cases.

Show 9 quoted lines
> > Which really I could do with:
> >
> >   for i in `git diff-files --name-only --diff-filter=U`; do
> >     git diff --cc $i
> >     echo 'OK?'
> 
> As you already know, I disagree the usefulness of this approach (see the
> "Are you sure about that?" discussion), hence I doubt the usefulness of
> "have it integrated into the "git add -p" loop".

OK, let me put it this way. I am not volunteering to work on the approach you outlined. If you are, great. But if not, then what should be done? The current behavior to show the diff and then exit is quite confusing. At the very least, we should say something to the user about what happened (or even suppress the diff and just say "these paths are unmerged, and we can't handle them in add -p").

-Peff
Thomas Rast· Mar 11, 2011, 13:31 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Jeff King wrote:
Show 10 quoted lines
> On Thu, Mar 10, 2011 at 06:15:23PM +0100, Thomas Rast wrote:
> 
> > * Clean up add -p
> 
> One more wishlist item for this. I use "add -p" for almost all of my
> adds these days, because I like the final review check. So after a
> conflicted merge, I find myself doing "add -p" to stage my resolution.
> The current behavior is that it shows the --cc diff and exits. It would
> be cool to handle staging the resolution, which would involve converting
> the combined diff into something that can be applied.
Good idea, thanks.

I put this (with your idea) and the word-merge thing on the wiki. I'll let Jonathan decide what to do about the fast-import stream filtering.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Jakub Narebski· Mar 10, 2011, 17:39 UTC · re: Jonathan Nieder · lore

Re: Summer of Code project ideas due this Friday

Jonathan Nieder <jrnieder@gmail.com> writes:
> 4. filter-branch killer: using fast-import's new features to implement
>    common filter-branch operations (--subdirectory-filter,
>    --prune-empty, obliterating certain files) faster.

How it would be different from existing reposurgeon tool by ESR (cross-VC thanks to using fast-import format), or git_fast_filter by Elijah Newren (more of a library than a ready tool)?

-- 
Jakub Narebski
Poland
ShadeHawk on #git
Thomas Rast· Mar 11, 2011, 13:28 UTC · re: Jakub Narebski · lore

Re: Summer of Code project ideas due this Friday

Jakub Narebski wrote:
Show 9 quoted lines
> Jonathan Nieder <jrnieder@gmail.com> writes:
> 
> > 4. filter-branch killer: using fast-import's new features to implement
> >    common filter-branch operations (--subdirectory-filter,
> >    --prune-empty, obliterating certain files) faster.
> 
> How it would be different from existing reposurgeon tool by ESR
> (cross-VC thanks to using fast-import format), or git_fast_filter by
> Elijah Newren (more of a library than a ready tool)?

Git integration? I haven't looked at these tools for long enough to say how much they fit the ticket and how fast they are, so for me it's hard to say how much work it would be.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Jonathan Nieder· Mar 12, 2011, 00:20 UTC · re: Jakub Narebski · lore

History surgery with fast-import (Re: Summer of Code project ideas due this Friday)

Jakub Narebski wrote:
> Jonathan Nieder <jrnieder@gmail.com> writes:
Show 7 quoted lines
>> 4. filter-branch killer: using fast-import's new features to implement
>>    common filter-branch operations (--subdirectory-filter,
>>    --prune-empty, obliterating certain files) faster.
>
> How it would be different from existing reposurgeon tool by ESR
> (cross-VC thanks to using fast-import format), or git_fast_filter by
> Elijah Newren (more of a library than a ready tool)?
Good question.
. reposurgeon loads the whole history into a convenient format,
  manipulates it, then dumps it as a separate step.  So it is even more
  flexible than filter-branch, but with a large history and especially
  on a small machine it can be slower.
. git_fast_filter is what Thomas mentioned --- a filter to go between
  fast-export and fast-import.

Both involve unpacking all trees. Which is not a huge expense, mind you, but there is room to go faster.

What I was suggesting is instead a tool that relies on fast-import to do the heavy lifting. So, for example, when you ask to delete path/to/remove.txt from all commits, it would write:

 commit refs/heads/master
 mark :172
 author A U Thor <author@example.com> ...
 committer ...
 data ...
 from ...
 merge ...
 M 040000 [old tree name for that commit] ""
 D path/to/remove.txt
 commit refs/heads/mater
 mark :173
 ...

The idea is inspired by http://thread.gmane.org/gmane.comp.version-control.git/158375 I am interested in it because I imagine something like this could be useful for splitting out branches from a naive import of an svn repo (and similar surgeries).

Ramkumar Ramachandra· Mar 13, 2011, 17:08 UTC · re: Jonathan Nieder · lore

Re: Summer of Code project ideas due this Friday

Hi Jonathan,
Jonathan Nieder writes:
> 3. Remote helpers: bidi git remote-svn (or one-way remote-hg, or
>    remote-cvs, or ...).
I wrote a small introduction and created an entry for git-remote-svn
in the wiki [1]. Two minor concerns:
1. The student will have to work very closely with us, and pick up a
   lot of scattered WIP patches. I hope he doesn't get confused
   between what's merged and what's in-progress.
2. The project isn't as de-coupled as we'd ideally like. The student
   has to learn about the new fast-import features, and the
   information contained in an SVN replay dumpstream before diving in.
Other than these, I think most of the pending work is in the mapper.
> 4. filter-branch killer: using fast-import's new features to implement
>    common filter-branch operations (--subdirectory-filter,
>    --prune-empty, obliterating certain files) faster.

This is an interesting project that I'd also thought about: it might get tangled up along with the Sequencer project though. Should we put up this project on the wiki nevertheless?

p.s- Sorry about the late reply; I wasn't in station.
[1] SoC2011Ideas#Welcome and SoC2011Ideas#Remote_helper_for_Subversion
-- Ram
Nguyen Thai Ngoc Duy· Mar 10, 2011, 00:19 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 4:58 AM, Jeff King <peff@peff.net> wrote:
Show 5 quoted lines
> They will be looking at our ideas page at:
>
>    https://git.wiki.kernel.org/index.php/SoC2011Ideas
>
> If you have any ideas, please add them to the page!

Jeff, how is the "support multiple transport (torrent, bundle, http..) cloning" going? The one that you were working on from the "initial clone from bundle" thread? Is it ok to make it a SoC project (presumably with at least bundle clone support)?

-- 
Duy
Jeff King· Mar 10, 2011, 16:31 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 07:19:36AM +0700, Nguyen Thai Ngoc Duy wrote:
Show 11 quoted lines
> On Thu, Mar 10, 2011 at 4:58 AM, Jeff King <peff@peff.net> wrote:
> > They will be looking at our ideas page at:
> >
> >    https://git.wiki.kernel.org/index.php/SoC2011Ideas
> >
> > If you have any ideas, please add them to the page!
> 
> Jeff, how is the "support multiple transport (torrent, bundle, http..)
> cloning" going? The one that you were working on from the "initial
> clone from bundle" thread? Is it ok to make it a SoC project
> (presumably with at least bundle clone support)?

I pushed it back in favor of other topics, but I will get to it eventually. If you want to make a SoC proposal, go for it. Though I think it might not be big enough by itself, and might need to be folded into a larger project.

-Peff
Alexander Miseler· Mar 10, 2011, 21:40 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

Comments on the "Better big-file support" section:
"While git can handle arbitrary-sized binary content [...]"
This is very much not true. Git tries at many places to load the complete file into memory and usually fails with "out of memory" if it can't. With the 32bit msysGit client this places the upper file size limit, from purely empirical observation, at 600-700 MByte. When a file is to large git fails late, adding and committing works (as long as there are no filters or other complications), but you can forget about pushing, rebasing or otherwise manipulating that commit. Even worse yet, commits consisting of smaller files but with a combined size over the limit will also cause out-of-memories.
Thus a main focus should be the memory problem, e.g. by using stream-like file handling everywhere, since not working at all is orders of magnitude worse than working slowly :)
"In some cases, this may be as simple as having a "large file" codepath that avoids pulling whole files into memory (e.g., during "git add")."

Ironically git add is one of the few things that work with large files, as mentioned above. Presumably the stream-oriented zlib enforced/encouraged a steam-like handling here :) Slow as hell though and of course it is usually not sensible to compress a 1.5 GByte file.

I'm very willing to work on this topic. Though I'm not a student and as a git code newbie I also don't have the skills for mentoring yet.
Jeff King· Mar 10, 2011, 22:18 UTC · re: Alexander Miseler · lore

Re: Summer of Code project ideas due this Friday

On Thu, Mar 10, 2011 at 10:40:01PM +0100, Alexander Miseler wrote:
Show 6 quoted lines
> "While git can handle arbitrary-sized binary content [...]"
> 
> This is very much not true. Git tries at many places to load the
> complete file into memory and usually fails with "out of memory" if it
> can't. With the 32bit msysGit client this places the upper file size
> limit, from purely empirical observation, at 600-700 MByte.
I think we are picking nits here. What I meant was two things:
  1. The fundamental design of git does not prevent storing
     arbitrary-sized binary data.
  2. How big a piece of data the current implementation can handle
     sanely is up to how much hardware you throw at it. On my 64-bit
     machine with 8G of RAM running Linux, I can easily work with 2
     gigabyte files. Some operations are slow, of course, but it works.
     I'm willing to accept that 32-bit msysgit has more trouble with
     a case like that.

But I think we are probably in agreement with what needs to be done to make things better. Specifically, I am thinking of:

  1. Streaming blobs wherever possible (e.g., add, filters, textconv).
  2. Converting the diff code not to have in-memory files is probably
     going to be quite difficult. But most of these files don't have
     interesting diffs _anyway_. They're usually binary, and we don't
     generate binary diffs by default. So what we need to focus on is
     avoiding loading them when we can. Things like:
       a. Using caching textconv, and when we do run the textconv
          filter, streaming the blob to the filter.
       b. Avoid loading the whole file to check whether it is binary. We
          can already avoid this by marking it binary with
          gitattributes, but there is no reason git can't just load the
          first 4K or so to check for binary-ness, and get this
          optimization automatically. We can also consider caching
          binary-ness for large files so we don't have to look at them
          at all after the first time.
       c. Handle rename detection better. It may be a matter of saying
          "this file is too big for detection". But we may also be able
          to stream it through the spantree-hashing, and then possibly
          also cache the resultant data.
  3. The above deal with memory problems. There is also a storage
     problem. If I have a 100G repo, right now I use at least 100G in
     the .git directory and 100G in the working tree. That's a problem
     for repos of that size. If I have a storage server on the LAN and
     want to accept the latency hit, it would be nice to keep the
     commits local and the giant blobs on the server. Especially coupled
     with the optimizations in (2), we can possibly avoid even having to
     touch those blobs at all in many cases, so the latency wouldn't be
     a big deal.
  4. A related storage problem is that we put big files in packs, and
     the I/O on rewriting the pack becomes a problem. They would do
     better loose or in their own packs.

And I'm sure there are more variations on those things. Part of the project would be identifying the problem areas.

> Even worse yet, commits consisting of smaller files but with a
> combined size over the limit will also cause out-of-memories.

That generally should work OK. The diff and packing code tries to keep memory usage reasonable, which generally equates to two times the largest file. If you have a test case that shows problems, there may very well be a bug.

> Thus a main focus should be the memory problem, e.g. by using
> stream-like file handling everywhere, since not working at all is
> orders of magnitude worse than working slowly :)

Agreed. I think they are sort of the same problem. Whether it works slowly or not at all is simply a matter of how much memory you have. ;)

> Ironically git add is one of the few things that work with large
> files, as mentioned above. Presumably the stream-oriented zlib
> enforced/encouraged a steam-like handling here :) Slow as hell though
> and of course it is usually not sensible to compress a 1.5 GByte file.

I just tried "git add" on a 2G file of random bytes. It took about a minute or so to calculate the sha1 and compress it, but the memory usage did jump to 2G. So we could obviously do better on the memory, and there is almost certainly no point in zlib compressing something that big. In my case, it was obviously just random junk. But most files of that size are already going to have some kind of lossy compression, so we are just wasting CPU. You can always set core.compression, but I really just want it off for certain files.

> I'm very willing to work on this topic. Though I'm not a student and
> as a git code newbie I also don't have the skills for mentoring yet.

It's on my agenda, too. We'll see if a student steps up for the GSoC project. But don't let that stop you if you want to take a look at it; I'm sure there is plenty of work to go around. :)

-Peff
Alexander Miseler· Mar 11, 2011, 14:17 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

On 10.03.2011 23:18, Jeff King wrote:
>    1. The fundamental design of git does not prevent storing
>       arbitrary-sized binary data.
agreed
> But I think we are probably in agreement with what needs to be done to
> make things better. Specifically, I am thinking of:
agreed
Show 7 quoted lines
>> Even worse yet, commits consisting of smaller files but with a
>> combined size over the limit will also cause out-of-memories.
>
> That generally should work OK. The diff and packing code tries to keep
> memory usage reasonable, which generally equates to two times the
> largest file. If you have a test case that shows problems, there may
> very well be a bug.
I will look into it.
> But don't let that stop you if you want to take a look at it;
> I'm sure there is plenty of work to go around. :)
Certainly ^_^
Alexander Miseler· Mar 12, 2011, 19:47 UTC · re: Alexander Miseler · lore

Re: Summer of Code project ideas due this Friday

Show 9 quoted lines
>>> Even worse yet, commits consisting of smaller files but with a
>>> combined size over the limit will also cause out-of-memories.
>>
>> That generally should work OK. The diff and packing code tries to keep
>> memory usage reasonable, which generally equates to two times the
>> largest file. If you have a test case that shows problems, there may
>> very well be a bug.
> 
> I will look into it.
I failed to create an artificial test case for this (thus probably misunderstanding the exact circumstances leading to this). I will investigate it when I get a real life test case again.
Alexander Miseler· Mar 11, 2011, 12:18 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

On 09.03.2011 22:58, Jeff King wrote:
> If you have any ideas, please add them to the page! Whether you are
> available to mentor the project, or simply think it would make a good
> project and want to inspire others to mentor it, it's appropriate to go
> there.

Added two new ideas: Port Git to Android Resumable clone

I'm new to the Git code and therefore don't necessarily have an idea what I'm talking about. Please feel free to change, correct, mutilate and massacre this ideas. This are just two things that I would like to see, but don't want to work on myself since I have BIGGER fishes to fry ^_^

Ilari Liusvaara· Mar 11, 2011, 12:52 UTC · re: Alexander Miseler · lore

Re: Summer of Code project ideas due this Friday

On Fri, Mar 11, 2011 at 01:18:45PM +0100, Alexander Miseler wrote:
Show 6 quoted lines
> On 09.03.2011 22:58, Jeff King wrote:
> >If you have any ideas, please add them to the page! Whether you are
> >available to mentor the project, or simply think it would make a good
> >project and want to inspire others to mentor it, it's appropriate to go
> >there.
> 
> Resumable clone

This is very very hard. Not so much to implement but to design the way it can be done without assuming things (like object sort orders) that aren't stable.

-Ilari
Nguyen Thai Ngoc Duy· Mar 11, 2011, 13:48 UTC · re: Ilari Liusvaara · lore

Re: Summer of Code project ideas due this Friday

On Fri, Mar 11, 2011 at 7:52 PM, Ilari Liusvaara <ilari.liusvaara@elisanet.fi> wrote:

Show 13 quoted lines
> On Fri, Mar 11, 2011 at 01:18:45PM +0100, Alexander Miseler wrote:
>> On 09.03.2011 22:58, Jeff King wrote:
>> >If you have any ideas, please add them to the page! Whether you are
>> >available to mentor the project, or simply think it would make a good
>> >project and want to inspire others to mentor it, it's appropriate to go
>> >there.
>>
>
>> Resumable clone
>
> This is very very hard. Not so much to implement but to design the way it
> can be done without assuming things (like object sort orders) that aren't
> stable.

Yes it's hard. I have some experimental thing that nearly works [1], although whether it is an acceptable approach is to be seen. If anyone's interested, I'll post it some time

A simpler way to restartable clone is to facilitate bundles (Nicolas' idea). Some glue is needed to teach git-fetch/git-daemon to use the bundles, and git-push to automatically create bundles periodically (or a new command that can be run from cron). I think this way fit in GSoC scope better.

[1] The idea of my work above was mentioned elsewhere, history is cut down by path. Each file/dir's history a very long chain of deltas. We can stream deltas (in parallel if needed) over the wire, resuming where the chain stops last time.

There are many problems. One is that a deep chain can make git run out of stack, so chains have to be broken down before storing (not done). Another one is that not many deltas can be reused, so it will consume more power than normal clone. But once you clone this way, the cloned repo have lots of delta suitable for another clone (but probably not for anything else).

-- 
Duy
Alexander Miseler· Mar 11, 2011, 14:10 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Summer of Code project ideas due this Friday

On 11.03.2011 14:48, Nguyen Thai Ngoc Duy wrote:
Show 30 quoted lines
> On Fri, Mar 11, 2011 at 7:52 PM, Ilari Liusvaara
> <ilari.liusvaara@elisanet.fi>  wrote:
>> On Fri, Mar 11, 2011 at 01:18:45PM +0100, Alexander Miseler wrote:
>>> Resumable clone
>>
>> This is very very hard. Not so much to implement but to design the way it
>> can be done without assuming things (like object sort orders) that aren't
>> stable.
>
> Yes it's hard. I have some experimental thing that nearly works [1],
> although whether it is an acceptable approach is to be seen. If
> anyone's interested, I'll post it some time
>
> A simpler way to restartable clone is to facilitate bundles (Nicolas'
> idea). Some glue is needed to teach git-fetch/git-daemon to use the
> bundles, and git-push to automatically create bundles periodically (or
> a new command that can be run from cron). I think this way fit in GSoC
> scope better.
>
> [1] The idea of my work above was mentioned elsewhere, history is cut
> down by path. Each file/dir's history a very long chain of deltas. We
> can stream deltas (in parallel if needed) over the wire, resuming
> where the chain stops last time.
>
> There are many problems. One is that a deep chain can make git run out
> of stack, so chains have to be broken down before storing (not done).
> Another one is that not many deltas can be reused, so it will consume
> more power than normal clone. But once you clone this way, the cloned
> repo have lots of delta suitable for another clone (but probably not
> for anything else).
This may all be aiming to short. IMHO the best solution would be some generic way for the client to specify exactly what 
it wants to get and to get just that. This would lay the groundwork for:
- lazy clones
- sparse clones
- resumable cloning
- resumable fetching
and probably quite a few other nifty tricks.
I guess that would be far beyond the scope of a SoC project though.
Nguyen Thai Ngoc Duy· Mar 11, 2011, 14:27 UTC · re: Alexander Miseler · lore

Re: Summer of Code project ideas due this Friday

On Fri, Mar 11, 2011 at 9:10 PM, Alexander Miseler <alexander@miseler.de> wrote:
> This may all be aiming to short. IMHO the best solution would be some
> generic way for the client to specify exactly what it wants to get and to
> get just that.

But how do you define "what it wants to get"? Pros and cons are different and depend on that defintion.

Git's way of saying now is "I have these commits, give me these branches (cutting at certain depth)". A near future extension would be "I have these commits _restricted to these paths only_, give me...". If it's broken half way, start again.

The bundle way is basically Git's way except that the remote side says "I've got this bundle, fetch it here, then you can ask us again for the rest in a normal way".

mirrorsync (aka gittorrent) says "I have this commit, give me objects so that I can have this commit", which leaves the (probably) huge initial commit out of view.

My way is "give me a chain of deltas starting from this SHA-1". A big blob can be considered as a history of smaller pieces.

The last way of saying is just "give me this object", which would be a big waste of bandwidth.

Your move :)
-- 
Duy
Sam Vilain· Mar 11, 2011, 22:42 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Summer of Code project ideas due this Friday

On 12/03/11 03:27, Nguyen Thai Ngoc Duy wrote:
Show 27 quoted lines
> On Fri, Mar 11, 2011 at 9:10 PM, Alexander Miseler <alexander@miseler.de> wrote:
>> This may all be aiming to short. IMHO the best solution would be some
>> generic way for the client to specify exactly what it wants to get and to
>> get just that.
> But how do you define "what it wants to get"? Pros and cons are
> different and depend on that defintion.
>
> Git's way of saying now is "I have these commits, give me these
> branches (cutting at certain depth)". A near future extension would be
> "I have these commits _restricted to these paths only_, give me...".
> If it's broken half way, start again.
>
> The bundle way is basically Git's way except that the remote side says
> "I've got this bundle, fetch it here, then you can ask us again for
> the rest in a normal way".
>
> mirrorsync (aka gittorrent) says "I have this commit, give me objects
> so that I can have this commit", which leaves the (probably) huge
> initial commit out of view.
>
> My way is "give me a chain of deltas starting from this SHA-1". A big
> blob can be considered as a history of smaller pieces.
>
> The last way of saying is just "give me this object", which would be a
> big waste of bandwidth.
>
> Your move :)

Just FWIW, I recently produced some diagrams and demonstrated the resumable clone algorithm; speed is currently very limited by the implementation at 15 minutes to slice up git.git; but I'm playing with libgit2 to see if I can make a more optimal version.

See http://vilain.net/comp/git/gittorrent/commit_reel.html
Sam
Alexander Miseler· Mar 12, 2011, 21:41 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Summer of Code project ideas due this Friday

> Your move :)
Heh, I'm still pretty hampered by having no clue ^_^
> My way is "give me a chain of deltas starting from this SHA-1". A big
> blob can be considered as a history of smaller pieces.
I originally missed the fact that it is completely irrelevant where in the chain the reference point is and that you can go easily from any arbitrary point in the chain to any other arbitrary point in the same chain. This makes it a lot more flexible than I thought. But to support more than just resumable cloning You would still need a more powerful way to negotiate "I have this; I want that" between client and server.

My point was mostly that lazy clone, sparse clone and resumable clone are closely related and should ideally be solved in one go. You currently seem to aim at only one of them, which is a shame. For lazy clone the client would start with all blobs referenced by HEAD (and possibly other branches) and then it would walk backwards through the delta chains if/as far/whenever it wants. Though it would also need to detect when it needs to start reading new delta chains as it walks backwards through history. Sparse clone would use the same mechanism and just restrict it to certain paths.

Ævar Arnfjörð Bjarmason· Mar 11, 2011, 12:43 UTC · re: Jeff King · lore

Re: Summer of Code project ideas due this Friday

On Wed, Mar 9, 2011 at 22:58, Jeff King <peff@peff.net> wrote:
> If you have any ideas, please add them to the page!
Here's a simple one:

Currently we have a global UI color setting, but pretty much only git-status/log/etc use it.

Change git-bisect, git-am etc. to also support color output. It would be a easy but big UI win.

code.sculptor@gmail.com· Mar 11, 2011, 14:24 UTC · re: Ævar Arnfjörð Bjarmason · lore

Re: Summer of Code project ideas due this Friday

Great idea! Sent from my BlackBerry device on the Rogers Wireless Network

-----Original Message-----
From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Sender: git-owner@vger.kernel.org
Date: Fri, 11 Mar 2011 13:43:39 
To: Jeff King<peff@peff.net>
Cc: Shawn Pearce<spearce@spearce.org>; Ramkumar Ramachandra<artagnon@gmail.com>; Jonathan Nieder<jrnieder@gmail.com>; Jens Lehmann<Jens.Lehmann@web.de>; Christian Couder<chriscool@tuxfamily.org>; Thomas Rast<trast@student.ethz.ch>; git<git@vger.kernel.org>
Subject: Re: Summer of Code project ideas due this Friday
On Wed, Mar 9, 2011 at 22:58, Jeff King <peff@peff.net> wrote:
> If you have any ideas, please add them to the page!
Here's a simple one:

Currently we have a global UI color setting, but pretty much only git-status/log/etc use it.

Change git-bisect, git-am etc. to also support color output. It would be a easy but big UI win. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html

Jakub Narebski· Mar 17, 2011, 23:40 UTC · re: Jeff King · lore

Re: Summer of Code project ideas

Jeff King <peff@peff.net> writes:
> https://git.wiki.kernel.org/index.php/SoC2011Ideas
> 
> If you have any ideas, please add them to the page!
A few project ideas I am not sure if they are feasible for GSoC:
* merging-in support for caching in gitweb, and benchmarking/profiling
  gitweb in high load situation
  J.H., you would probably want gitweb [output] caching to be merged-in
  sooner that the end of Google Summer of Code 2011, isn't it?
* embedding graphical diff and graphical merge tool in git-gui, e.g. as
  "git gui diff".  I think that we can use xxdiff; the license is 
  compatibile.
  Pat and Shawn, is it something worth doing?  Does it look like a good
  project for GSoC2011, or is it too small of a project for this?  Would
  we be able to find mentor for this idea?
* splitting gitk, common library (Tcl/Tk bindings) for gitk and git-gui
  Pat and Paul, do you think it is right scope, or is it too large project
  to put as an GSoC idea?
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Heiko Voigt· Mar 22, 2011, 20:31 UTC · re: Jakub Narebski · lore

Re: Re: Summer of Code project ideas

Hi,
On Thu, Mar 17, 2011 at 04:40:44PM -0700, Jakub Narebski wrote:
Show 12 quoted lines
> * embedding graphical diff and graphical merge tool in git-gui, e.g. as
>   "git gui diff".  I think that we can use xxdiff; the license is 
>   compatibile.
> 
>   Pat and Shawn, is it something worth doing?  Does it look like a good
>   project for GSoC2011, or is it too small of a project for this?  Would
>   we be able to find mentor for this idea?
> 
> * splitting gitk, common library (Tcl/Tk bindings) for gitk and git-gui
> 
>   Pat and Paul, do you think it is right scope, or is it too large project
>   to put as an GSoC idea?

I would be interested in mentoring those projects. I do not know whether we can reach consensus how to split up things. The last time we discussed a possible approach[1] to share code between gitk and git gui we did not reach one.

Cheers Heiko
[1] http://thread.gmane.org/gmane.comp.version-control.git/166663/focus=166695
J.H.· Mar 22, 2011, 22:55 UTC · re: Jakub Narebski · lore

Re: Summer of Code project ideas

On 03/17/2011 04:40 PM, Jakub Narebski wrote:
Show 13 quoted lines
> Jeff King <peff@peff.net> writes:
> 
>> https://git.wiki.kernel.org/index.php/SoC2011Ideas
>>
>> If you have any ideas, please add them to the page!
> 
> A few project ideas I am not sure if they are feasible for GSoC:
> 
> * merging-in support for caching in gitweb, and benchmarking/profiling
>   gitweb in high load situation
> 
>   J.H., you would probably want gitweb [output] caching to be merged-in
>   sooner that the end of Google Summer of Code 2011, isn't it?

I think the work needed to get gitweb-caching actually merged upstream is going to be a slight bit messier than I'm willing to put a student through, and couple that with the fact I'm going to be herding 2 or 3 students for kernel.org as already, I won't have enough time to try and mentor a student through that quagmire.

Should a student be interested in the graphing stuff for gitweb, I'm happy to make commentary and review things as they come, but that's at best a co-mentor from me.

Pat Thoyts· Mar 25, 2011, 01:11 UTC · re: Jakub Narebski · lore

Re: Summer of Code project ideas

Jakub Narebski <jnareb@gmail.com> writes:
Show 21 quoted lines
>Jeff King <peff@peff.net> writes:
>
>> https://git.wiki.kernel.org/index.php/SoC2011Ideas
>> 
>> If you have any ideas, please add them to the page!
>
>A few project ideas I am not sure if they are feasible for GSoC:
>
>* merging-in support for caching in gitweb, and benchmarking/profiling
>  gitweb in high load situation
>
>  J.H., you would probably want gitweb [output] caching to be merged-in
>  sooner that the end of Google Summer of Code 2011, isn't it?
>
>* embedding graphical diff and graphical merge tool in git-gui, e.g. as
>  "git gui diff".  I think that we can use xxdiff; the license is 
>  compatibile.
>
>  Pat and Shawn, is it something worth doing?  Does it look like a good
>  project for GSoC2011, or is it too small of a project for this?  Would
>  we be able to find mentor for this idea?

There is also tkdiff for stealing from. I'm not sure about the worth - there are lots of free merge tools around. But if someone wants to do that then fine.

>* splitting gitk, common library (Tcl/Tk bindings) for gitk and git-gui
>
>  Pat and Paul, do you think it is right scope, or is it too large project
>  to put as an GSoC idea?

It shouldn't be too large. You are likely looking at doing Git.pm as a Tcl package (without looking in much detail). Testing that gitk and git-gui didn't get broken will probably be tedious. So adding some test suite to each could help. The Tcl test package is quite capable of being used to test Tk apps provided some tests get written.

-- 
Pat Thoyts                            http://www.patthoyts.tk/
PGP fingerprint 2C 6E 98 07 2C 59 C8 97  10 CE 11 E6 04 E0 B9 DD
Jakub Narebski· Mar 25, 2011, 13:02 UTC · re: Pat Thoyts · lore

Re: Summer of Code project ideas

On Fri, 25 Mar 2011, Pat Thoyts wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
> > A few project ideas I am not sure if they are feasible for GSoC:
Show 11 quoted lines
> > * embedding graphical diff and graphical merge tool in git-gui, e.g. as
> >   "git gui diff".  I think that we can use xxdiff; the license is 
> >   compatibile.
> >
> >   Pat and Shawn, is it something worth doing?  Does it look like a good
> >   project for GSoC2011, or is it too small of a project for this?  Would
> >   we be able to find mentor for this idea?
> 
> There is also tkdiff for stealing from. I'm not sure about the worth -
> there are lots of free merge tools around. But if someone wants to do
> that then fine.
I meant TkDiff, not xxdiff here; I'm sorry for the mistake.

TkDiff has the advantage that is already written in Tcl/Tk, so we can borrow code (like e.g. "refining" diff), not only algorithms.

Show 10 quoted lines
> > * splitting gitk, common library (Tcl/Tk bindings) for gitk and git-gui
> >
> >   Pat and Paul, do you think it is right scope, or is it too large project
> >   to put as an GSoC idea?
> 
> It shouldn't be too large. You are likely looking at doing Git.pm as a
> Tcl package (without looking in much detail). Testing that gitk and
> git-gui didn't get broken will probably be tedious. So adding some test
> suite to each could help. The Tcl test package is quite capable of being
> used to test Tk apps provided some tests get written.

I thought that would be mainly re-using library part of git-gui in gitk; tests are decidely a good idea, though I don't know if there are ready tools to do tests for programs written in Tcl/Tk , and for testing UI.

-- 
Jakub Narebski
Poland
Ramkumar Ramachandra· Mar 3, 2011, 21:04 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

Hi,
Shawn Pearce writes:
> Anyone want to mentor this year?

Although I'm probably not experienced enough to independently mentor a project, I'd be more than happy to co-mentor, or step in if a mentor is suddenly unavailable. I should have a lot of time to give in summer.

-- Ram
Jonathan Nieder· Mar 3, 2011, 22:08 UTC · re: Ramkumar Ramachandra · lore

Re: Google Summer of Code 2011

Hi,
Ramkumar Ramachandra wrote:
> Although I'm probably not experienced enough to independently mentor a
> project, I'd be more than happy to co-mentor, or step in if a mentor
> is suddenly unavailable. I should have a lot of time to give in
> summer.

I'd also be willing to co-mentor. Time might be a constraint, but I can find time.

Jonathan
Sverre Rabbelier· Mar 7, 2011, 12:15 UTC · re: Ramkumar Ramachandra · lore

Re: Google Summer of Code 2011

Heya,
On Thu, Mar 3, 2011 at 23:08, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 8 quoted lines
> On Thu, Mar 3, 2011 at 22:04, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
>> Although I'm probably not experienced enough to independently mentor a
>> project, I'd be more than happy to co-mentor, or step in if a mentor
>> is suddenly unavailable. I should have a lot of time to give in
>> summer.
>
> I'd also be willing to co-mentor.  Time might be a constraint, but I can
> find time.

Perhaps we can mentor a student to work on git-remote-svn with the three of us? :)

-- 
Cheers,

Sverre Rabbelier
Ramkumar Ramachandra· Mar 8, 2011, 12:33 UTC · re: Sverre Rabbelier · lore

Re: Google Summer of Code 2011

Hi,
Sverre Rabbelier writes:
Show 12 quoted lines
> On Thu, Mar 3, 2011 at 23:08, Jonathan Nieder <jrnieder@gmail.com> wrote:
> > On Thu, Mar 3, 2011 at 22:04, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
> >> Although I'm probably not experienced enough to independently mentor a
> >> project, I'd be more than happy to co-mentor, or step in if a mentor
> >> is suddenly unavailable. I should have a lot of time to give in
> >> summer.
> >
> > I'd also be willing to co-mentor.  Time might be a constraint, but I can
> > find time.
> 
> Perhaps we can mentor a student to work on git-remote-svn with the
> three of us? :)

Sure, but I was hoping for an exciting new project idea- what do you think?

-- Ram
Sverre Rabbelier· Mar 8, 2011, 12:49 UTC · re: Ramkumar Ramachandra · lore

Re: Google Summer of Code 2011

Heya,
On Tue, Mar 8, 2011 at 13:33, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
> Sure, but I was hoping for an exciting new project idea- what do you
> think?

I don't know, having a working bidi git-remote-svn is pretty exciting in itself :)

-- 
Cheers,

Sverre Rabbelier
Jens Lehmann· Mar 3, 2011, 22:38 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

Am 03.03.2011 19:08, schrieb Shawn Pearce:
> Anyone want to mentor this year?

I can offer to either be a co-mentor (being a fill in for a mentor who is not available the whole time, like I did last year for Thomas) or to mentor a student full time when (s)he is working on submodules.

Sam Vilain· Mar 6, 2011, 19:24 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

Hi Shawn,
On 04/03/11 07:08, Shawn Pearce wrote:
> Anyone want to mentor this year?

This year I'm likely to be far too busy to mentor anyone or review applications; however I expect to find time to deliver on my earlier promise to revisit GitTorrent with a series of articles and how-to's on the comp.git section of my blog. I've made at least administrative progress towards this goal; by setting up ikiwiki and arranging a discrete comp.git section, so that readers can follow without getting my other articles.

The introductory article is at http://vilain.net/comp/git/gittorrent/past_synthesis.html and I hope to be able to keep producing one article a week. I would love following, input, criticism etc from anyone who has been involved in the GitTorrent project or its many spin-offs over the years.

Cheers and hope GSoC 2011 works out well for git! Sam

Heiko Voigt· Mar 7, 2011, 19:40 UTC · re: Shawn Pearce · lore

Re: Google Summer of Code 2011

Hi,
On Thu, Mar 03, 2011 at 10:08:25AM -0800, Shawn Pearce wrote:
> Anyone want to mentor this year?

I can offer to mentor a project either about submodule improvements or on gui stuff (git-gui or gitk). Since I am still not a native speaker of the full git code base co-mentoring would be an option for other projects.

Cheers Heiko
Fredrik Gustafsson· Mar 7, 2011, 20:50 UTC · re: Heiko Voigt · lore

Re: Google Summer of Code 2011

On Mon, Mar 07, 2011 at 08:40:47PM +0100, Heiko Voigt wrote:
> I can offer to mentor a project either about submodule improvements or
> on gui stuff (git-gui or gitk). Since I am still not a native speaker of
> the full git code base co-mentoring would be an option for other
> projects.
That's sounds very interesting.

I'm using git with submodules a lot (daily in 5-10 different smaller projects with 1-5 developers in each) and suffers from lacking submodule support, specially in the gui-tools.

Being a student this is a part of git I would be very interested in helping to improve.

-- 
Med vänliga hälsningar
Fredrik Gustafsson

tel: +46 (0)733-608274
e-post: iveqy@iveqy.com
Heiko Voigt· Mar 9, 2011, 21:52 UTC · re: Fredrik Gustafsson · lore

Re: Re: Google Summer of Code 2011

Hi,
On Mon, Mar 07, 2011 at 09:50:23PM +0100, Fredrik Gustafsson wrote:
Show 14 quoted lines
> On Mon, Mar 07, 2011 at 08:40:47PM +0100, Heiko Voigt wrote:
> > I can offer to mentor a project either about submodule improvements or
> > on gui stuff (git-gui or gitk). Since I am still not a native speaker of
> > the full git code base co-mentoring would be an option for other
> > projects.
> 
> That's sounds very interesting.
> 
> I'm using git with submodules a lot (daily in 5-10 different smaller
> projects with 1-5 developers in each) and suffers from lacking submodule
> support, specially in the gui-tools. 
> 
> Being a student this is a part of git I would be very interested in
> helping to improve.

Sounds promising. When I was talking about gui or submodules I did not think about gui *and* submodules. Do you have some concrete areas you would like to improve in mind?

Cheers Heiko
Fredrik Gustafsson· Mar 9, 2011, 23:16 UTC · re: Heiko Voigt · lore

Re: Re: Google Summer of Code 2011

On Wed, Mar 09, 2011 at 10:52:56PM +0100, Heiko Voigt wrote:
Show 21 quoted lines
> Hi,
> 
> On Mon, Mar 07, 2011 at 09:50:23PM +0100, Fredrik Gustafsson wrote:
> > On Mon, Mar 07, 2011 at 08:40:47PM +0100, Heiko Voigt wrote:
> > > I can offer to mentor a project either about submodule improvements or
> > > on gui stuff (git-gui or gitk). Since I am still not a native speaker of
> > > the full git code base co-mentoring would be an option for other
> > > projects.
> > 
> > That's sounds very interesting.
> > 
> > I'm using git with submodules a lot (daily in 5-10 different smaller
> > projects with 1-5 developers in each) and suffers from lacking submodule
> > support, specially in the gui-tools. 
> > 
> > Being a student this is a part of git I would be very interested in
> > helping to improve.
> 
> Sounds promising. When I was talking about gui or submodules I did not
> think about gui *and* submodules. Do you have some concrete areas you
> would like to improve in mind?

Many of the ideas I had was already mentioned in https://github.com/jlehmann/git-submod-enhancements/wiki/

The ones I feel is most important for me is:
* gitk: Add popup menu for submodules to see the detailed history of
changes
* Check before a push in the superproject that all submodules HEADs are
pushed
* Showing that a submodule has a HEAD not on any branch in “git status”
* Move the submodules git directories into the superproject’s .git so that
submodules can be created and deleted

With this said, I'm not familiar with the git codebase yet and does not have any concrete solutions. For example, I don't understand why a submodule doesn't get a default branch.

-- 
Med vänliga hälsningar
Fredrik Gustafsson

tel: 0733-608274
e-post: iveqy@iveqy.com
Heiko Voigt· Mar 10, 2011, 22:46 UTC · re: Fredrik Gustafsson · lore

Re: Re: Re: Google Summer of Code 2011

Hi,
On Thu, Mar 10, 2011 at 12:16:04AM +0100, Fredrik Gustafsson wrote:
Show 16 quoted lines
> On Wed, Mar 09, 2011 at 10:52:56PM +0100, Heiko Voigt wrote:
> > Sounds promising. When I was talking about gui or submodules I did not
> > think about gui *and* submodules. Do you have some concrete areas you
> > would like to improve in mind?
> 
> Many of the ideas I had was already mentioned in 
> https://github.com/jlehmann/git-submod-enhancements/wiki/
> 
> The ones I feel is most important for me is:
> * gitk: Add popup menu for submodules to see the detailed history of
> changes
> * Check before a push in the superproject that all submodules HEADs are
> pushed
> * Showing that a submodule has a HEAD not on any branch in “git status”
> * Move the submodules git directories into the superproject’s .git so that
> submodules can be created and deleted

Sounds like a good roadmap. From my viewpoint this includes enough work for a summer. There are also enough small steps so even if only part of this would be finished it would contain enough improvement for git. Since this is the first time I am offering to mentor I am not that familar how much work can be done during summer. What do others think?

(added Jens to the CC)
> With this said, I'm not familiar with the git codebase yet and does not
> have any concrete solutions. For example, I don't understand why a
> submodule doesn't get a default branch.

The familiarity with the code should not be a problem since the idea of the Summer of Code is to allow more people to get involved into a project.

Regarding the default branch: The short answer is that git does not record any branchname but a specific revision using its SHA1. This is on purpose to make sure that you get exactly the code you had when you created the commit. But a default branch has been requested many times to make working easier. AFAIR it the consensus was that creating a branch recursively by default would not be a good idea. But doing that on explicit user request could be implemented as an option to ease users workflow. So something like this could be discussed.

Cheers Heiko

← back to recent threads