1diff a/Documentation/git-rpull.txt b/Documentation/git-rpull.txt
2--- a/Documentation/git-rpull.txt
3+++ /dev/null
4@@ -1,50 +0,0 @@
5-git-rpull(1)
6-============
7-v0.1, May 2005
8-
9-NAME
10-----
11-git-rpull - Pulls from a remote repository over ssh connection
12-
13-
14-
15-SYNOPSIS
16---------
17-'git-rpull' [-c] [-t] [-a] [-d] [-v] [--recover] commit-id url
18-
19-DESCRIPTION
20------------
21-Pulls from a remote repository over ssh connection, invoking git-rpush on
22-the other end.
23-
24-OPTIONS
25--------
26--c::
27- Get the commit objects.
28--t::
29- Get trees associated with the commit objects.
30--a::
31- Get all the objects.
32--d::
33- Do not check for delta base objects (use this option
34- only when you know the remote repository is not
35- deltified).
36---recover::
37- Check dependency of deltified object more carefully than
38- usual, to recover after earlier pull that was interrupted.
39--v::
40- Report what is downloaded.
41-
42-
43-Author
44-------
45-Written by Linus Torvalds <torvalds@osdl.org>
46-
47-Documentation
48---------------
49-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
50-
51-GIT
52----
53-Part of the link:git.html[git] suite
54-
55diff a/Documentation/git-rpush.txt b/Documentation/git-rpush.txt
56--- a/Documentation/git-rpush.txt
57+++ /dev/null
58@@ -1,30 +0,0 @@
59-git-rpush(1)
60-============
61-v0.1, May 2005
62-
63-NAME
64-----
65-git-rpush - Helper "server-side" program used by git-rpull
66-
67-
68-SYNOPSIS
69---------
70-'git-rpush'
71-
72-DESCRIPTION
73------------
74-Helper "server-side" program used by git-rpull.
75-
76-
77-Author
78-------
79-Written by Linus Torvalds <torvalds@osdl.org>
80-
81-Documentation
82---------------
83-Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
84-
85-GIT
86----
87-Part of the link:git.html[git] suite
88-
89diff a/Documentation/git-ssh-pull.txt b/Documentation/git-ssh-pull.txt
90--- /dev/null
91+++ b/Documentation/git-ssh-pull.txt
92@@ -0,0 +1,50 @@
93+git-ssh-pull(1)
94+===============
95+v0.1, May 2005
96+
97+NAME
98+----
99+git-ssh-pull - Pulls from a remote repository over ssh connection
100+
101+
102+
103+SYNOPSIS
104+--------
105+'git-ssh-pull' [-c] [-t] [-a] [-d] [-v] [--recover] commit-id url
106+
107+DESCRIPTION
108+-----------
109+Pulls from a remote repository over ssh connection, invoking git-ssh-push
110+on the other end.
111+
112+OPTIONS
113+-------
114+-c::
115+ Get the commit objects.
116+-t::
117+ Get trees associated with the commit objects.
118+-a::
119+ Get all the objects.
120+-d::
121+ Do not check for delta base objects (use this option
122+ only when you know the remote repository is not
123+ deltified).
124+--recover::
125+ Check dependency of deltified object more carefully than
126+ usual, to recover after earlier pull that was interrupted.
127+-v::
128+ Report what is downloaded.
129+
130+
131+Author
132+------
133+Written by Linus Torvalds <torvalds@osdl.org>
134+
135+Documentation
136+--------------
137+Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
138+
139+GIT
140+---
141+Part of the link:git.html[git] suite
142+
143diff a/Documentation/git-ssh-push.txt b/Documentation/git-ssh-push.txt
144--- /dev/null
145+++ b/Documentation/git-ssh-push.txt
146@@ -0,0 +1,30 @@
147+git-ssh-push(1)
148+===============
149+v0.1, May 2005
150+
151+NAME
152+----
153+git-ssh-push - Helper "server-side" program used by git-ssh-pull
154+
155+
156+SYNOPSIS
157+--------
158+'git-ssh-push'
159+
160+DESCRIPTION
161+-----------
162+Helper "server-side" program used by git-ssh-pull.
163+
164+
165+Author
166+------
167+Written by Linus Torvalds <torvalds@osdl.org>
168+
169+Documentation
170+--------------
171+Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
172+
173+GIT
174+---
175+Part of the link:git.html[git] suite
176+
177diff a/Documentation/git.txt b/Documentation/git.txt
178--- a/Documentation/git.txt
179+++ b/Documentation/git.txt
180@@ -148,7 +148,7 @@ link:git-resolve-script.html[git-resolve
181 link:git-tag-script.html[git-tag-script]::
182 An example script to create a tag object signed with GPG
183
184-link:git-rpull.html[git-rpull]::
185+link:git-ssh-pull.html[git-ssh-pull]::
186 Pulls from a remote repository over ssh connection
187
188 Interogators:
189@@ -156,8 +156,8 @@ Interogators:
190 link:git-diff-helper.html[git-diff-helper]::
191 Generates patch format output for git-diff-*
192
193-link:git-rpush.html[git-rpush]::
194- Helper "server-side" program used by git-rpull
195+link:git-ssh-push.html[git-ssh-push]::
196+ Helper "server-side" program used by git-ssh-pull
197
198
199
200diff a/Makefile b/Makefile
201--- a/Makefile
202+++ b/Makefile
203@@ -30,7 +30,7 @@ PROG= git-update-index git-diff-files
204 git-checkout-cache git-diff-tree git-rev-tree git-ls-files \
205 git-check-files git-ls-tree git-merge-base git-merge-cache \
206 git-unpack-file git-export git-diff-cache git-convert-cache \
207- git-http-pull git-rpush git-rpull git-rev-list git-mktag \
208+ git-http-pull git-ssh-push git-ssh-pull git-rev-list git-mktag \
209 git-diff-helper git-tar-tree git-local-pull git-write-blob \
210 git-get-tar-commit-id git-mkdelta git-apply git-stripspace
211
212@@ -105,8 +105,8 @@ git-diff-cache: diff-cache.c
213 git-convert-cache: convert-cache.c
214 git-http-pull: http-pull.c pull.c
215 git-local-pull: local-pull.c pull.c
216-git-rpush: rsh.c
217-git-rpull: rsh.c pull.c
218+git-ssh-push: rsh.c
219+git-ssh-pull: rsh.c pull.c
220 git-rev-list: rev-list.c
221 git-mktag: mktag.c
222 git-diff-helper: diff-helper.c
223diff a/rpull.c b/rpull.c
224--- a/rpull.c
225+++ /dev/null
226@@ -1,83 +0,0 @@
227-#include "cache.h"
228-#include "commit.h"
229-#include "rsh.h"
230-#include "pull.h"
231-
232-static int fd_in;
233-static int fd_out;
234-
235-static unsigned char remote_version = 0;
236-static unsigned char local_version = 1;
237-
238-int fetch(unsigned char *sha1)
239-{
240- int ret;
241- signed char remote;
242- char type = 'o';
243- if (has_sha1_file(sha1))
244- return 0;
245- write(fd_out, &type, 1);
246- write(fd_out, sha1, 20);
247- if (read(fd_in, &remote, 1) < 1)
248- return -1;
249- if (remote < 0)
250- return remote;
251- ret = write_sha1_from_fd(sha1, fd_in);
252- if (!ret)
253- pull_say("got %s\n", sha1_to_hex(sha1));
254- return ret;
255-}
256-
257-int get_version(void)
258-{
259- char type = 'v';
260- write(fd_out, &type, 1);
261- write(fd_out, &local_version, 1);
262- if (read(fd_in, &remote_version, 1) < 1) {
263- return error("Couldn't read version from remote end");
264- }
265- return 0;
266-}
267-
268-int main(int argc, char **argv)
269-{
270- char *commit_id;
271- char *url;
272- int arg = 1;
273-
274- while (arg < argc && argv[arg][0] == '-') {
275- if (argv[arg][1] == 't') {
276- get_tree = 1;
277- } else if (argv[arg][1] == 'c') {
278- get_history = 1;
279- } else if (argv[arg][1] == 'd') {
280- get_delta = 0;
281- } else if (!strcmp(argv[arg], "--recover")) {
282- get_delta = 2;
283- } else if (argv[arg][1] == 'a') {
284- get_all = 1;
285- get_tree = 1;
286- get_history = 1;
287- } else if (argv[arg][1] == 'v') {
288- get_verbosely = 1;
289- }
290- arg++;
291- }
292- if (argc < arg + 2) {
293- usage("git-rpull [-c] [-t] [-a] [-v] [-d] [--recover] commit-id url");
294- return 1;
295- }
296- commit_id = argv[arg];
297- url = argv[arg + 1];
298-
299- if (setup_connection(&fd_in, &fd_out, "git-rpush", url, arg, argv + 1))
300- return 1;
301-
302- if (get_version())
303- return 1;
304-
305- if (pull(commit_id))
306- return 1;
307-
308- return 0;
309-}
310diff a/rpush.c b/rpush.c
311--- a/rpush.c
312+++ /dev/null
313@@ -1,104 +0,0 @@
314-#include "cache.h"
315-#include "rsh.h"
316-#include <sys/socket.h>
317-#include <errno.h>
318-
319-unsigned char local_version = 1;
320-unsigned char remote_version = 0;
321-
322-int serve_object(int fd_in, int fd_out) {
323- ssize_t size;
324- int posn = 0;
325- char sha1[20];
326- unsigned long objsize;
327- void *buf;
328- signed char remote;
329- do {
330- size = read(fd_in, sha1 + posn, 20 - posn);
331- if (size < 0) {
332- perror("git-rpush: read ");
333- return -1;
334- }
335- if (!size)
336- return -1;
337- posn += size;
338- } while (posn < 20);
339-
340- /* fprintf(stderr, "Serving %s\n", sha1_to_hex(sha1)); */
341- remote = 0;
342-
343- buf = map_sha1_file(sha1, &objsize);
344-
345- if (!buf) {
346- fprintf(stderr, "git-rpush: could not find %s\n",
347- sha1_to_hex(sha1));
348- remote = -1;
349- }
350-
351- write(fd_out, &remote, 1);
352-
353- if (remote < 0)
354- return 0;
355-
356- posn = 0;
357- do {
358- size = write(fd_out, buf + posn, objsize - posn);
359- if (size <= 0) {
360- if (!size) {
361- fprintf(stderr, "git-rpush: write closed");
362- } else {
363- perror("git-rpush: write ");
364- }
365- return -1;
366- }
367- posn += size;
368- } while (posn < objsize);
369- return 0;
370-}
371-
372-int serve_version(int fd_in, int fd_out)
373-{
374- if (read(fd_in, &remote_version, 1) < 1)
375- return -1;
376- write(fd_out, &local_version, 1);
377- return 0;
378-}
379-
380-void service(int fd_in, int fd_out) {
381- char type;
382- int retval;
383- do {
384- retval = read(fd_in, &type, 1);
385- if (retval < 1) {
386- if (retval < 0)
387- perror("rpush: read ");
388- return;
389- }
390- if (type == 'v' && serve_version(fd_in, fd_out))
391- return;
392- if (type == 'o' && serve_object(fd_in, fd_out))
393- return;
394- } while (1);
395-}
396-
397-int main(int argc, char **argv)
398-{
399- int arg = 1;
400- char *commit_id;
401- char *url;
402- int fd_in, fd_out;
403- while (arg < argc && argv[arg][0] == '-') {
404- arg++;
405- }
406- if (argc < arg + 2) {
407- usage("git-rpush [-c] [-t] [-a] commit-id url");
408- return 1;
409- }
410- commit_id = argv[arg];
411- url = argv[arg + 1];
412- if (setup_connection(&fd_in, &fd_out, "git-rpull", url, arg, argv + 1))
413- return 1;
414-
415- service(fd_in, fd_out);
416- return 0;
417-}
418diff a/ssh-pull.c b/ssh-pull.c
419--- /dev/null
420+++ b/ssh-pull.c
421@@ -0,0 +1,83 @@
422+#include "cache.h"
423+#include "commit.h"
424+#include "rsh.h"
425+#include "pull.h"
426+
427+static int fd_in;
428+static int fd_out;
429+
430+static unsigned char remote_version = 0;
431+static unsigned char local_version = 1;
432+
433+int fetch(unsigned char *sha1)
434+{
435+ int ret;
436+ signed char remote;
437+ char type = 'o';
438+ if (has_sha1_file(sha1))
439+ return 0;
440+ write(fd_out, &type, 1);
441+ write(fd_out, sha1, 20);
442+ if (read(fd_in, &remote, 1) < 1)
443+ return -1;
444+ if (remote < 0)
445+ return remote;
446+ ret = write_sha1_from_fd(sha1, fd_in);
447+ if (!ret)
448+ pull_say("got %s\n", sha1_to_hex(sha1));
449+ return ret;
450+}
451+
452+int get_version(void)
453+{
454+ char type = 'v';
455+ write(fd_out, &type, 1);
456+ write(fd_out, &local_version, 1);
457+ if (read(fd_in, &remote_version, 1) < 1) {
458+ return error("Couldn't read version from remote end");
459+ }
460+ return 0;
461+}
462+
463+int main(int argc, char **argv)
464+{
465+ char *commit_id;
466+ char *url;
467+ int arg = 1;
468+
469+ while (arg < argc && argv[arg][0] == '-') {
470+ if (argv[arg][1] == 't') {
471+ get_tree = 1;
472+ } else if (argv[arg][1] == 'c') {
473+ get_history = 1;
474+ } else if (argv[arg][1] == 'd') {
475+ get_delta = 0;
476+ } else if (!strcmp(argv[arg], "--recover")) {
477+ get_delta = 2;
478+ } else if (argv[arg][1] == 'a') {
479+ get_all = 1;
480+ get_tree = 1;
481+ get_history = 1;
482+ } else if (argv[arg][1] == 'v') {
483+ get_verbosely = 1;
484+ }
485+ arg++;
486+ }
487+ if (argc < arg + 2) {
488+ usage("git-ssh-pull [-c] [-t] [-a] [-v] [-d] [--recover] commit-id url");
489+ return 1;
490+ }
491+ commit_id = argv[arg];
492+ url = argv[arg + 1];
493+
494+ if (setup_connection(&fd_in, &fd_out, "git-ssh-push", url, arg, argv + 1))
495+ return 1;
496+
497+ if (get_version())
498+ return 1;
499+
500+ if (pull(commit_id))
501+ return 1;
502+
503+ return 0;
504+}
505diff a/ssh-push.c b/ssh-push.c
506--- /dev/null
507+++ b/ssh-push.c
508@@ -0,0 +1,104 @@
509+#include "cache.h"
510+#include "rsh.h"
511+#include <sys/socket.h>
512+#include <errno.h>
513+
514+unsigned char local_version = 1;
515+unsigned char remote_version = 0;
516+
517+int serve_object(int fd_in, int fd_out) {
518+ ssize_t size;
519+ int posn = 0;
520+ char sha1[20];
521+ unsigned long objsize;
522+ void *buf;
523+ signed char remote;
524+ do {
525+ size = read(fd_in, sha1 + posn, 20 - posn);
526+ if (size < 0) {
527+ perror("git-ssh-push: read ");
528+ return -1;
529+ }
530+ if (!size)
531+ return -1;
532+ posn += size;
533+ } while (posn < 20);
534+
535+ /* fprintf(stderr, "Serving %s\n", sha1_to_hex(sha1)); */
536+ remote = 0;
537+
538+ buf = map_sha1_file(sha1, &objsize);
539+
540+ if (!buf) {
541+ fprintf(stderr, "git-ssh-push: could not find %s\n",
542+ sha1_to_hex(sha1));
543+ remote = -1;
544+ }
545+
546+ write(fd_out, &remote, 1);
547+
548+ if (remote < 0)
549+ return 0;
550+
551+ posn = 0;
552+ do {
553+ size = write(fd_out, buf + posn, objsize - posn);
554+ if (size <= 0) {
555+ if (!size) {
556+ fprintf(stderr, "git-ssh-push: write closed");
557+ } else {
558+ perror("git-ssh-push: write ");
559+ }
560+ return -1;
561+ }
562+ posn += size;
563+ } while (posn < objsize);
564+ return 0;
565+}
566+
567+int serve_version(int fd_in, int fd_out)
568+{
569+ if (read(fd_in, &remote_version, 1) < 1)
570+ return -1;
571+ write(fd_out, &local_version, 1);
572+ return 0;
573+}
574+
575+void service(int fd_in, int fd_out) {
576+ char type;
577+ int retval;
578+ do {
579+ retval = read(fd_in, &type, 1);
580+ if (retval < 1) {
581+ if (retval < 0)
582+ perror("git-ssh-push: read ");
583+ return;
584+ }
585+ if (type == 'v' && serve_version(fd_in, fd_out))
586+ return;
587+ if (type == 'o' && serve_object(fd_in, fd_out))
588+ return;
589+ } while (1);
590+}
591+
592+int main(int argc, char **argv)
593+{
594+ int arg = 1;
595+ char *commit_id;
596+ char *url;
597+ int fd_in, fd_out;
598+ while (arg < argc && argv[arg][0] == '-') {
599+ arg++;
600+ }
601+ if (argc < arg + 2) {
602+ usage("git-ssh-push [-c] [-t] [-a] commit-id url");
603+ return 1;
604+ }
605+ commit_id = argv[arg];
606+ url = argv[arg + 1];
607+ if (setup_connection(&fd_in, &fd_out, "git-ssh-pull", url, arg, argv + 1))
608+ return 1;
609+
610+ service(fd_in, fd_out);
611+ return 0;
612+}