extra: Add cli.git and github.sync.
cli.git is a command-line git wrapper. github.sync is a way to sync an organization to local disk.modern-harvey2
parent
b92a3e109d
commit
21e42a5d3b
|
@ -0,0 +1 @@
|
||||||
|
Doug Coleman
|
|
@ -0,0 +1,37 @@
|
||||||
|
! Copyright (C) 2017 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: arrays concurrency.combinators concurrency.semaphores fry
|
||||||
|
io.directories io.files.info io.launcher io.pathnames kernel
|
||||||
|
math namespaces sequences splitting system-info ;
|
||||||
|
IN: cli.git
|
||||||
|
|
||||||
|
SYMBOL: cli-git-num-parallel
|
||||||
|
cli-git-num-parallel [ cpus 2 * ] initialize
|
||||||
|
|
||||||
|
: git-clone-as ( ssh-url path -- process )
|
||||||
|
[ { "git" "clone" } ] 2dip 2array append run-process ;
|
||||||
|
|
||||||
|
: git-clone ( ssh-url -- process )
|
||||||
|
[ { "git" "clone" } ] dip suffix run-process ;
|
||||||
|
|
||||||
|
: git-pull ( path -- process )
|
||||||
|
[ { "git" "pull" } run-process ] with-directory ;
|
||||||
|
|
||||||
|
: git-repository? ( directory -- ? )
|
||||||
|
".git" append-path current-directory get prepend-path
|
||||||
|
?file-info dup [ directory? ] when ;
|
||||||
|
|
||||||
|
: repository-url>name ( string -- string' )
|
||||||
|
file-name ".git" ?tail drop ;
|
||||||
|
|
||||||
|
: update-repository ( url -- process )
|
||||||
|
dup repository-url>name git-repository?
|
||||||
|
[ repository-url>name git-pull ] [ git-clone ] if ;
|
||||||
|
|
||||||
|
: sync-repositories ( directory urls -- )
|
||||||
|
'[
|
||||||
|
_ cli-git-num-parallel get <semaphore> '[
|
||||||
|
_ [ update-repository ] with-semaphore
|
||||||
|
] parallel-each
|
||||||
|
] with-ensure-directory ;
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
! Copyright (C) 2017 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: assocs cli.git concurrency.combinators
|
||||||
|
concurrency.semaphores formatting fry http.client io
|
||||||
|
io.directories json.reader kernel locals math namespaces
|
||||||
|
sequences ;
|
||||||
|
IN: github
|
||||||
|
|
||||||
|
SYMBOL: github-username
|
||||||
|
SYMBOL: github-token
|
||||||
|
|
||||||
|
:: get-organization-repositories-with-credentials ( organization username token -- seq )
|
||||||
|
0 [ dup ] [
|
||||||
|
1 + dup
|
||||||
|
[ username token organization ] dip
|
||||||
|
"https://%s:%s@api.github.com/orgs/%s/repos?per_page=100&page=%d" sprintf http-get nip json>
|
||||||
|
dup empty? [ 2drop f f ] [ ] if
|
||||||
|
] produce nip concat ;
|
||||||
|
|
||||||
|
: get-organization-repositories ( organization -- seq )
|
||||||
|
github-username get
|
||||||
|
github-token get
|
||||||
|
get-organization-repositories-with-credentials ;
|
||||||
|
|
||||||
|
: sync-organization-with-credentials ( directory organization username token -- )
|
||||||
|
get-organization-repositories-with-credentials
|
||||||
|
[ "ssh_url" of ] map sync-repositories ;
|
||||||
|
|
||||||
|
: sync-organization ( directory organization -- )
|
||||||
|
github-username get
|
||||||
|
github-token get
|
||||||
|
sync-organization-with-credentials ;
|
||||||
|
|
Loading…
Reference in New Issue