Sigrid Haflínudóttirsome more random key bashing3ae73276 years agoHistory
151 lines · 2.5 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <thread.h>#include "pkg.h"#include "src.h" #define MAX(a,b) ((a)>=(b)?(a):(b)) Pkg *pkgs[] = {	&fontsel,	&git9,	&hx,	&libtags,	&makeu,	&mpl,	&orca,	&pal,	&picker,	&unionfs,	&whiteboardfs,	&xmpp,	&zuke,}; static int maxname; static voidusage(void){	print("usage: %s ...\n", argv0);	threadexitsall("usage");} static intpkgcmp(void *a_, void *b_){	Pkg **a, **b; 	a = a_;	b = b_;	maxname = MAX(maxname, MAX(strlen((*a)->name), strlen((*b)->name)));	return strcmp((*a)->name, (*b)->name);} static voidpkginfo(Pkg *p, int v){	int i; 	if(p == nil)		return; 	if(v){		print("name          %s\n", p->name);		if(p->ver != nil)			print("version       %s\n", p->ver);		print("description   %s\n", p->meta.descr);		print("web           %s\n", p->meta.web);		print("license       %s\n", p->meta.license);		if(p->inputs.build[0] != nil || p->inputs.runtime[0] != nil){			print("dependencies ");			for(i = 0; i < nelem(p->inputs.build) && p->inputs.build[i] != nil; i++)				print(" %s", p->inputs.build[i]->name);			for(i = 0; i < nelem(p->inputs.build) && p->inputs.runtime[i] != nil; i++)				print(" %s", p->inputs.runtime[i]->name);			print("\n");		}	}else{		print("%-*s\t%s\n", maxname, p->name, p->meta.descr);	}} static voidpkgfetch(Pkg *p){	int d; 	if(p == nil)		return;	if((d = fetchsrc(&p->src)) < 0)		fprint(2, "fetchsrc: %r\n");	else		close(d);} static Pkg *pkgfind(char *name){	int i; 	for(i = 0; i < nelem(pkgs); i++)		if(strcmp(pkgs[i]->name, name) == 0)			return pkgs[i]; 	return nil;} static voidchtmpdir(void){	char tempdir[20] = "/tmp/pkgXXXXXXXXXXX";	char *s; 	s = mktemp(tempdir);	if(s[0] == 0)		sysfatal("mktemp failed");	if(create(s, OREAD|ORCLOSE, DMDIR|0700) < 0)		sysfatal("can't create %s: %r", s);	if(chdir(tempdir) != 0)		sysfatal("can't chdir: %r");} static intcleanup(void *, char *){	/* FIXME remove all temp files */	print("cleaning up\n");	return 0;} voidthreadmain(int argc, char **argv){	int i; 	ARGBEGIN{	}ARGEND 	quotefmtinstall();	qsort(pkgs, nelem(pkgs), sizeof(*pkgs), pkgcmp);	threadwaitchan();	threadnotify(cleanup, 1);	chtmpdir(); 	if(argc < 1){		for(i = 0; i < nelem(pkgs); i++)			pkginfo(pkgs[i], 0);		goto done;	}else if(argc >= 2 && strcmp(argv[0], "info") == 0){		for(i = 1; i < argc; i++)			pkginfo(pkgfind(argv[i]), 1);	}else if(argc >= 2 && strcmp(argv[0], "fetch") == 0){		for(i = 1; i < argc; i++)			pkgfetch(pkgfind(argv[i]));	}else{		usage();	} done:	threadexitsall(nil);}

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