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