Browse Source

Merge branch 'cvsserver' of http://locke.catalyst.net.nz/git/git-martinlanghoff; branch 'master' into next

Conflicts:

	Documentation/git-cvsserver.txt
	git-cvsserver.perl

Originally Martin's tree was based on "next", which meant that all
the other things that I am not ready to push out to "master" were
contained in it.  His changes looked good, and I wanted to have them
in "master".

So, here is what I did:

 - fetch Martin's tree into a temporary topic branch.
   $ git fetch $URL $remote:ml/cvsserver
   $ git checkout ml/cvsserver

 - rebase it on top of "master".
   $ git rebase --onto master next

 - pull that master into "next", recording Martin's head as well.
   $ git pull --append . master

Since I have apply.whitespace=strip in my configuration file, the
rebased cvsserver changes have trailing whitespaces introduced by
Martin's tree cleansed out.  Hence the above conflicts.

The reason I made this octopus is to make sure that next time Martin
pulls from my "next" branch, it results in a fast forward.  There is
no reason to force him do the same conflict resolution I did with this
merge.

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 19 years ago
parent
commit
6ecc321ba5
  1. 24
      Documentation/git-cvsserver.txt
  2. 12
      Makefile
  3. 49
      contrib/gitview/gitview
  4. 4
      diffcore-break.c
  5. 44
      git-cvsserver.perl

24
Documentation/git-cvsserver.txt

@ -54,6 +54,30 @@ INSTALLATION @@ -54,6 +54,30 @@ INSTALLATION
of branches in git).
$ cvs co -d mylocaldir master

Eclipse CVS Client Notes
------------------------

To get a checkout with the Eclipse CVS client:

1. Create a new project from CVS checkout, giving it repository and module
2. Context Menu->Team->Share Project...
3. Enter the repository and module information again and click Finish
4. The Synchronize view appears. Untick "launch commit wizard" to avoid
committing the .project file, and select HEAD as the tag to synchronize to.
Update all incoming changes.

Note that most versions of Eclipse ignore CVS_SERVER (which you can set in
the Preferences->Team->CVS->ExtConnection pane), so you may have to
rename, alias or symlink git-cvsserver to 'cvs' on the server.

Clients known to work
---------------------

CVS 1.12.9 on Debian
CVS 1.11.17 on MacOSX (from Fink package)
Eclipse 3.0, 3.1.2 on MacOSX (see Eclipse CVS Client Notes)
TortoiseCVS

Operations supported
--------------------


12
Makefile

@ -223,11 +223,15 @@ ifeq ($(uname_S),Darwin) @@ -223,11 +223,15 @@ ifeq ($(uname_S),Darwin)
NEEDS_SSL_WITH_CRYPTO = YesPlease
NEEDS_LIBICONV = YesPlease
## fink
ALL_CFLAGS += -I/sw/include
ALL_LDFLAGS += -L/sw/lib
ifeq ($(shell test -d /sw/lib && echo y),y)
ALL_CFLAGS += -I/sw/include
ALL_LDFLAGS += -L/sw/lib
endif
## darwinports
ALL_CFLAGS += -I/opt/local/include
ALL_LDFLAGS += -L/opt/local/lib
ifeq ($(shell test -d /opt/local/lib && echo y),y)
ALL_CFLAGS += -I/opt/local/include
ALL_LDFLAGS += -L/opt/local/lib
endif
endif
ifeq ($(uname_S),SunOS)
NEEDS_SOCKET = YesPlease

49
contrib/gitview/gitview

@ -239,20 +239,23 @@ class CellRendererGraph(gtk.GenericCellRenderer): @@ -239,20 +239,23 @@ class CellRendererGraph(gtk.GenericCellRenderer):
box_size / 4, 0, 2 * math.pi)


self.set_colour(ctx, colour, 0.0, 0.5)
ctx.stroke_preserve()

self.set_colour(ctx, colour, 0.5, 1.0)
ctx.fill_preserve()

if (len(names) != 0):
name = " "
for item in names:
name = name + item + " "

ctx.select_font_face("Monospace")
ctx.set_font_size(13)
ctx.text_path(name)

self.set_colour(ctx, colour, 0.0, 0.5)
ctx.stroke_preserve()

self.set_colour(ctx, colour, 0.5, 1.0)
ctx.fill()
if (flags & 1):
self.set_colour(ctx, colour, 0.5, 1.0)
else:
self.set_colour(ctx, colour, 0.0, 0.5)
ctx.show_text(name)

class Commit:
""" This represent a commit object obtained after parsing the git-rev-list
@ -365,7 +368,7 @@ class DiffWindow: @@ -365,7 +368,7 @@ class DiffWindow:
save_menu.connect("activate", self.save_menu_response, "save")
save_menu.show()
menu_bar.append(save_menu)
vbox.pack_start(menu_bar, False, False, 2)
vbox.pack_start(menu_bar, expand=False, fill=True)
menu_bar.show()

scrollwin = gtk.ScrolledWindow()
@ -479,19 +482,10 @@ class GitView: @@ -479,19 +482,10 @@ class GitView:

def construct(self):
"""Construct the window contents."""
vbox = gtk.VBox()
paned = gtk.VPaned()
paned.pack1(self.construct_top(), resize=False, shrink=True)
paned.pack2(self.construct_bottom(), resize=False, shrink=True)
self.window.add(paned)
paned.show()


def construct_top(self):
"""Construct the top-half of the window."""
vbox = gtk.VBox(spacing=6)
vbox.set_border_width(12)
vbox.show()

menu_bar = gtk.MenuBar()
menu_bar.set_pack_direction(gtk.PACK_DIRECTION_RTL)
help_menu = gtk.MenuItem("Help")
@ -503,8 +497,20 @@ class GitView: @@ -503,8 +497,20 @@ class GitView:
help_menu.set_submenu(menu)
help_menu.show()
menu_bar.append(help_menu)
vbox.pack_start(menu_bar, False, False, 2)
menu_bar.show()
vbox.pack_start(menu_bar, expand=False, fill=True)
vbox.pack_start(paned, expand=True, fill=True)
self.window.add(vbox)
paned.show()
vbox.show()


def construct_top(self):
"""Construct the top-half of the window."""
vbox = gtk.VBox(spacing=6)
vbox.set_border_width(12)
vbox.show()


scrollwin = gtk.ScrolledWindow()
scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
@ -520,6 +526,9 @@ class GitView: @@ -520,6 +526,9 @@ class GitView:
self.treeview.show()

cell = CellRendererGraph()
# Set the default width to 265
# This make sure that we have nice display with large tag names
cell.set_property("width", 265)
column = gtk.TreeViewColumn()
column.set_resizable(True)
column.pack_start(cell, expand=True)

4
diffcore-break.c

@ -58,6 +58,10 @@ static int should_break(struct diff_filespec *src, @@ -58,6 +58,10 @@ static int should_break(struct diff_filespec *src,
if (!S_ISREG(src->mode) || !S_ISREG(dst->mode))
return 0; /* leave symlink rename alone */

if (src->sha1_valid && dst->sha1_valid &&
!memcmp(src->sha1, dst->sha1, 20))
return 0; /* they are the same */

if (diff_populate_filespec(src, 0) || diff_populate_filespec(dst, 0))
return 0; /* error but caught downstream */


44
git-cvsserver.perl

@ -53,6 +53,7 @@ my $methods = { @@ -53,6 +53,7 @@ my $methods = {
'Entry' => \&req_Entry,
'Modified' => \&req_Modified,
'Unchanged' => \&req_Unchanged,
'Questionable' => \&req_Questionable,
'Argument' => \&req_Argument,
'Argumentx' => \&req_Argument,
'expand-modules' => \&req_expandmodules,
@ -63,6 +64,7 @@ my $methods = { @@ -63,6 +64,7 @@ my $methods = {
'ci' => \&req_ci,
'diff' => \&req_diff,
'log' => \&req_log,
'rlog' => \&req_log,
'tag' => \&req_CATCHALL,
'status' => \&req_status,
'admin' => \&req_CATCHALL,
@ -459,6 +461,22 @@ sub req_Unchanged @@ -459,6 +461,22 @@ sub req_Unchanged
#$log->debug("req_Unchanged : $data");
}

# Questionable filename \n
# Response expected: no. Additional data: no.
# Tell the server to check whether filename should be ignored,
# and if not, next time the server sends responses, send (in
# a M response) `?' followed by the directory and filename.
# filename must not contain `/'; it needs to be a file in the
# directory named by the most recent Directory request.
sub req_Questionable
{
my ( $cmd, $data ) = @_;

$state->{entries}{$state->{directory}.$data}{questionable} = 1;

#$log->debug("req_Questionable : $data");
}

# Argument text \n
# Response expected: no. Save argument for use in a subsequent command.
# Arguments accumulate until an argument-using command is given, at which
@ -568,7 +586,7 @@ sub req_co @@ -568,7 +586,7 @@ sub req_co

# print some information to the client
print "MT +updated\n";
print "MT text U\n";
print "MT text U \n";
if ( defined ( $git->{dir} ) and $git->{dir} ne "./" )
{
print "MT fname $checkout_path/$git->{dir}$git->{name}\n";
@ -579,9 +597,9 @@ sub req_co @@ -579,9 +597,9 @@ sub req_co
print "MT -updated\n";

# instruct client we're sending a file to put in this path
print "Created $checkout_path/" . ( defined ( $git->{dir} ) ? $git->{dir} . "/" : "" ) . "\n";
print "Created $checkout_path/" . ( defined ( $git->{dir} ) and $git->{dir} ne "./" ? $git->{dir} . "/" : "" ) . "\n";

print $state->{CVSROOT} . "/$module/" . ( defined ( $git->{dir} ) ? $git->{dir} . "/" : "" ) . "$git->{name}\n";
print $state->{CVSROOT} . "/$module/" . ( defined ( $git->{dir} ) and $git->{dir} ne "./" ? $git->{dir} . "/" : "" ) . "$git->{name}\n";

# this is an "entries" line
print "/$git->{name}/1.$git->{revision}///\n";
@ -612,6 +630,26 @@ sub req_update @@ -612,6 +630,26 @@ sub req_update

argsplit("update");

#
# It may just be a client exploring the available heads/modukles
# in that case, list them as top level directories and leave it
# at that. Eclipse uses this technique to offer you a list of
# projects (heads in this case) to checkout.
#
if ($state->{module} eq '') {
print "E cvs update: Updating .\n";
opendir HEADS, $state->{CVSROOT} . '/refs/heads';
while (my $head = readdir(HEADS)) {
if (-f $state->{CVSROOT} . '/refs/heads/' . $head) {
print "E cvs update: New directory `$head'\n";
}
}
closedir HEADS;
print "ok\n";
return 1;
}


# Grab a handle to the SQLite db and do any necessary updates
my $updater = GITCVS::updater->new($state->{CVSROOT}, $state->{module}, $log);


Loading…
Cancel
Save