git-svn: support -C<num> passing to git-diff-tree
[git.git] / t / t4100 / t-apply-5.patch
1 diff 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 -
55 diff 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 -
89 diff 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 +
143 diff 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 +
177 diff 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  
200 diff a/Makefile b/Makefile
201 --- a/Makefile
202 +++ b/Makefile
203 @@ -30,7 +30,7 @@ PROG=   git-update-cache 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
223 diff 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 -}
310 diff 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 -}
418 diff 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 +}
505 diff 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 +}