History

use subprocess for git fetching

Noam Preil committed 5 years agomaster

Commit 62c9fc11 parent d61e0ed1 file · +26 −11Browse files

Unified · Split

src.c+26−11
@@ -10,36 +10,51 @@ typedef struct Exec Exec; · 9 unmodified lines
10struct Exec {10struct Exec {
11 char *file;11 char *file;
12 char **argv;12 char **argv;
13 Channel *pid;13 Channel *pidch;
14};14};
15 15
16void16void
17pexec(void *args)17pexec(void *args)
18{18{
19 Exec *e = args;19 Exec *e = args;
20 procexec(e->pid, e->file, e->argv);20 procexec(e->pidch, e->file, e->argv);
21}21}
22 22
23static int23static int
24fetchgit(char *url, char *rev, char *dir)24fetchgit(char *url, char *rev, char *dir)
25{25{
26 char *argv[] = {"rc", "-c", nil, nil};
27 Exec e;26 Exec e;
27 char *argv[] = {"rc", "-c", smprint("git/clone %s %s", url, dir), nil};
28 Channel *c = threadwaitchan();
29 Waitmsg *w;
30 int pid, rpid;
28 31
29 e.file = "/bin/rc";
30 e.argv = argv;32 e.argv = argv;
31 e.pid = nil;33 e.file = "/bin/rc";
32 if(rev == nil)34 e.pidch = chancreate(sizeof(int), 0);
33 argv[2] = smprint("git/clone %s %s", url, dir);35
34 else{36 if(rev != nil){
37 free(argv[2]);
35 fprint(2, "FIXME git/clone %s rev %s\n", url, dir);38 fprint(2, "FIXME git/clone %s rev %s\n", url, dir);
36 return -1;39 return -1;
37 }40 }
38 41
39 pexec(&e);42 procrfork(pexec, &e, 0x2000, RFFDG);
43 recv(e.pidch, &pid);
44 chanfree(e.pidch);
45 if(pid < 0){
46 fprint(2, "failed to spawn process\n");
47 return -1;
48 }
49 w = recvp(c);
40 free(argv[2]);50 free(argv[2]);
41 51 if(w == nil){
42 return -1;52 fprint(2, "Receiving pid failed\n");
53 return -1;
54 }
55 rpid = w->pid;
56 free(w);
57 return rpid == pid;
43}58}
44 59
45int60int

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t