Thread (24 messages) flat view 24 messages, 4 authors, 2016-06-15

Re: GSoC 2010: "Integrated Web Client for git" proposal

From: Jakub Narebski <hidden>
Date: 2016-06-15 22:48:40

On Mon, Apr 19, 2010, Petr Baudis wrote:
On Mon, Apr 19, 2010 at 12:43:22PM +0200, Jakub Narebski wrote:
quoted
On Sun, Apr 18, 2010 at 21:56 +0200, Petr Baudis wrote:
quoted
quoted
If the project is a success, I wanted to use it for mob branch editing
on repo.or.cz. It could also be used as open-source Gist alternative.
For that you would need editing file / editing contents action, but
this is explicitely excluded in current version of Pavan's proposal :-(
Is it? I see it only being omitted.
At the end, in the section which describes what would be not included
in the project, there was editing files excluded from project.

Which is a bit strange because you need some kind of web editor (even
if it is simply textarea) for the commit message if this "Web Client"
is to implement [git commit]...
 
quoted
quoted
But it needs to be coded so that it does not require an actual checked
out copy (which shouldn't be too much hassle).
It would require using 'git hash-object -t blob -w --stdin' (from body
submitted via POST from textarea) plus 'git update-index --cacheinfo'.
Yes. Not a whole lot of effort, seems to me. A downside is that you
cannot use the working tree - index dichotomy, but life isn't perfect.
What do you mean here by "working tree - index dichotomy"?
 
quoted
There is however complication that you would need to do open2/open3
because git-hash-object would require bidirectional communication unless
you would use temporary file (command_bidi_pipe in Git.pm, untested).
I think even just going through a temporary file is fine for initial
implementation.
It is not that difficult.  You can use IPC::Open2 (which is in core)
and IO::Handle (for easier coding; using IO::Handle is not strictly
necessary), like that:

  use IPC::Open2 qw(open2);
  use IO::Handle;

  ...

  my $pid = open2($out, $in, git_cmd(), 'hash-object', '-w', '--stdin');
  $in->printflush($cgi->param('textarea'))
     or die...;
  my $sha1 = $out->getline();
  chomp $sha1;

  close $out;
  waitpid $pid, 0;

Then you would need:

  system(git_cmd(), 'update-index', '--cacheinfo',
         '100644', $sha1, $pretend_path)
    or die...;

Not tested!
-- 
Jakub Narebski
Poland
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help