mirror of
https://github.com/urbit/shrub.git
synced 2024-12-04 04:35:02 +03:00
generalized endpoint translation
This commit is contained in:
parent
1e6d290243
commit
c66fe58402
295
app/gh.hoon
295
app/gh.hoon
@ -7,20 +7,23 @@
|
|||||||
::
|
::
|
||||||
:: - subscribe to /scry/x/listen/{owner}/{repo}/{events...}
|
:: - subscribe to /scry/x/listen/{owner}/{repo}/{events...}
|
||||||
:: for webhook-powered event notifications. For event list,
|
:: for webhook-powered event notifications. For event list,
|
||||||
:: see https://developer.github.com/webhooks/.
|
:: see kttps://developer.github.com/webhooks/.
|
||||||
::
|
::
|
||||||
:: See the %github app for example usage.
|
:: See the %github app for example usage.
|
||||||
::
|
::
|
||||||
/? 314
|
/? 314
|
||||||
/- gh, plan-acct
|
/- gh, plan-acct
|
||||||
/+ gh-parse
|
/+ gh-parse
|
||||||
:: /ape/gh/split.hoon defines ++split, which splits a request
|
|
||||||
:: at the end of the longest possible endpoint.
|
|
||||||
::
|
|
||||||
// /%/split
|
|
||||||
::
|
::
|
||||||
!:
|
!:
|
||||||
=> |%
|
=> |%
|
||||||
|
++ place
|
||||||
|
$: guard/mold
|
||||||
|
read-x/$-(path move)
|
||||||
|
read-y/$-(path move)
|
||||||
|
sigh-x/$-(jon/json (unit sub-result))
|
||||||
|
sigh-y/$-(jon/json (unit arch))
|
||||||
|
==
|
||||||
++ move (pair bone card)
|
++ move (pair bone card)
|
||||||
++ sub-result
|
++ sub-result
|
||||||
$% {$arch arch}
|
$% {$arch arch}
|
||||||
@ -44,6 +47,106 @@
|
|||||||
|_ {hid/bowl cnt/@ hook/(map @t {id/@t listeners/(set bone)})}
|
|_ {hid/bowl cnt/@ hook/(map @t {id/@t listeners/(set bone)})}
|
||||||
++ prep _`.
|
++ prep _`.
|
||||||
::
|
::
|
||||||
|
:: List of endpoints
|
||||||
|
::
|
||||||
|
++ places
|
||||||
|
|= wir/wire
|
||||||
|
=<
|
||||||
|
^- (list place)
|
||||||
|
:~ ^- place
|
||||||
|
:* guard=$~
|
||||||
|
read-x=read-null
|
||||||
|
read-y=(read-static %issues ~)
|
||||||
|
sigh-x=sigh-strange
|
||||||
|
sigh-y=sigh-strange
|
||||||
|
==
|
||||||
|
^- place
|
||||||
|
:* guard={$issues $~}
|
||||||
|
read-x=read-null
|
||||||
|
read-y=(read-static %mine %by-repo ~)
|
||||||
|
sigh-x=sigh-strange
|
||||||
|
sigh-y=sigh-strange
|
||||||
|
==
|
||||||
|
^- place
|
||||||
|
:* guard={$issues $mine $~}
|
||||||
|
read-x=(read-get /issues)
|
||||||
|
read-y=(read-get /issues)
|
||||||
|
sigh-x=sigh-list-issues-x
|
||||||
|
sigh-y=sigh-list-issues-y
|
||||||
|
==
|
||||||
|
^- place
|
||||||
|
:* guard={$issues $by-repo $~}
|
||||||
|
read-x=read-null
|
||||||
|
^= read-y
|
||||||
|
|= pax/path
|
||||||
|
=+ /(scot %p our.hid)/home/(scot %da now.hid)/web/plan
|
||||||
|
=+ .^({* acc/(map knot plan-acct)} %cx -)
|
||||||
|
::
|
||||||
|
((read-static usr:(~(got by acc) %github) ~) pax)
|
||||||
|
sigh-x=sigh-strange
|
||||||
|
sigh-y=sigh-strange
|
||||||
|
==
|
||||||
|
^- place
|
||||||
|
:* guard={$issues $by-repo @t $~}
|
||||||
|
read-x=read-null
|
||||||
|
read-y=|=(pax/path (get /users/[-.+>.pax]/repos))
|
||||||
|
sigh-x=sigh-strange
|
||||||
|
^= sigh-y
|
||||||
|
|= jon/json
|
||||||
|
%+ bind ((ar:jo repository:gh-parse) jon)
|
||||||
|
|= repos/(list repository:gh)
|
||||||
|
:- `(shax (jam repos))
|
||||||
|
(malt (turn repos |=(repository:gh [name ~])))
|
||||||
|
==
|
||||||
|
^- place
|
||||||
|
:* guard={$issues $by-repo @t @t $~}
|
||||||
|
read-x=|=(pax/path (get /repos/[-.+>.pax]/[-.+>+.pax]/issues))
|
||||||
|
read-y=|=(pax/path (get /repos/[-.+>.pax]/[-.+>+.pax]/issues))
|
||||||
|
sigh-x=sigh-list-issues-x
|
||||||
|
sigh-y=sigh-list-issues-y
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=>
|
||||||
|
|% :: generic helpers (should be library)
|
||||||
|
++ read-null |=(pax/path [ost.hid %diff %null ~])
|
||||||
|
++ read-static
|
||||||
|
|= children/(list @t)
|
||||||
|
|= pax/path
|
||||||
|
[ost.hid %diff %arch ~ (malt (turn children |=(@t [+< ~])))]
|
||||||
|
::
|
||||||
|
++ read-get
|
||||||
|
|= endpoint/path
|
||||||
|
|= pax/path
|
||||||
|
(get endpoint)
|
||||||
|
::
|
||||||
|
++ sigh-strange |=(jon/json ~)
|
||||||
|
::
|
||||||
|
++ get
|
||||||
|
|= endpoint/path
|
||||||
|
^- move
|
||||||
|
:* ost.hid %hiss wir `~ %httr %hiss
|
||||||
|
(endpoint-to-purl endpoint) %get ~ ~
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ endpoint-to-purl
|
||||||
|
|= endpoint/path
|
||||||
|
(scan "https://api.github.com{<`path`endpoint>}" auri:epur)
|
||||||
|
--
|
||||||
|
|% :: gh-specific helpers
|
||||||
|
++ sigh-list-issues-x
|
||||||
|
|= jon/json
|
||||||
|
%+ bind ((ar:jo issue:gh-parse) jon)
|
||||||
|
|= issues/(list issue:gh)
|
||||||
|
gh-list-issues+issues
|
||||||
|
::
|
||||||
|
++ sigh-list-issues-y
|
||||||
|
|= jon/json
|
||||||
|
%+ bind ((ar:jo issue:gh-parse) jon)
|
||||||
|
|= issues/(list issue:gh)
|
||||||
|
:- `(shax (jam issues))
|
||||||
|
(malt (turn issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~])))
|
||||||
|
--
|
||||||
|
::
|
||||||
:: This core manages everything related to a particular request.
|
:: This core manages everything related to a particular request.
|
||||||
::
|
::
|
||||||
:: Each request has a particular 'style', which is currently
|
:: Each request has a particular 'style', which is currently
|
||||||
@ -68,93 +171,36 @@
|
|||||||
|= mov/move
|
|= mov/move
|
||||||
+>.$(mow [mov mow])
|
+>.$(mow [mov mow])
|
||||||
::
|
::
|
||||||
:: Produce null
|
|
||||||
::
|
|
||||||
++ send-null
|
|
||||||
(send ost.hid %diff %null ~)
|
|
||||||
::
|
|
||||||
:: Produce empty arch
|
|
||||||
::
|
|
||||||
++ send-null-arch
|
|
||||||
(send ost.hid %diff %arch ~ ~)
|
|
||||||
::
|
|
||||||
:: Append path to api.github.com and parse to a purl.
|
|
||||||
::
|
|
||||||
++ endpoint-to-purl
|
|
||||||
|= endpoint/path
|
|
||||||
(scan "https://api.github.com{<`path`endpoint>}" auri:epur)
|
|
||||||
::
|
|
||||||
:: Send a hiss
|
:: Send a hiss
|
||||||
::
|
::
|
||||||
++ send-hiss
|
++ send-hiss
|
||||||
|= hiz/hiss
|
|= hiz/hiss
|
||||||
^+ +>
|
^+ +>
|
||||||
=+ wir=`wire`[ren (scot %ud cnt) (scot %uv (jam arg)) style pax]
|
=+ wir=`wire`[ren style pax]
|
||||||
(send ost.hid %hiss wir `~ %httr [%hiss hiz])
|
(send ost.hid %hiss wir `~ %httr [%hiss hiz])
|
||||||
::
|
::
|
||||||
:: Send a %get hiss
|
|
||||||
::
|
|
||||||
++ get
|
|
||||||
|= endpoint/path
|
|
||||||
(send-hiss (endpoint-to-purl endpoint) %get ~ ~)
|
|
||||||
::
|
|
||||||
:: Decide how to handle a request based on its style.
|
:: Decide how to handle a request based on its style.
|
||||||
::
|
::
|
||||||
++ scry
|
++ scry
|
||||||
^+ .
|
^+ .
|
||||||
?+ style ~|([%invalid-style style] !!)
|
?+ style ~|([%invalid-style style] !!)
|
||||||
$read ?+(ren ~&([%invalid-care ren] !!) $x read-x, $y read-y)
|
$read read
|
||||||
$listen listen
|
$listen listen
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ read-x
|
:: Match to the endpoint in ++places and execute read-x or read-y
|
||||||
~& [%read-x pax]
|
|
||||||
?+ pax ~&([%strange-path pax] send-null)
|
|
||||||
$~ send-null
|
|
||||||
{$issues *}
|
|
||||||
?+ +.pax ~&([%strange-path pax] send-null)
|
|
||||||
$~ send-null
|
|
||||||
{$mine *} (get /issues)
|
|
||||||
{$by-repo *}
|
|
||||||
?+ +>.pax ~&([%strange-path pax] send-null)
|
|
||||||
$~ send-null
|
|
||||||
{@t $~} send-null
|
|
||||||
{@t @t $~} (get /repos/[-.+>.pax]/[-.+>+.pax]/issues)
|
|
||||||
==
|
|
||||||
==
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
++ read-y
|
++ read
|
||||||
~& [%read-y pax]
|
~& [%read pax]
|
||||||
?+ pax ~&([%strange-path pax] send-null-arch)
|
=+ places=(places ren style pax)
|
||||||
$~ (send-children %issues ~)
|
|- ^+ +>.$
|
||||||
{$issues *}
|
?~ places
|
||||||
?+ +.pax ~&([%strange-path pax] send-null-arch)
|
~& [%strange-path pax]
|
||||||
$~ (send-children %mine %by-repo ~)
|
(send ost.hid %diff ?+(ren !! $x null+~, $y arch+*arch))
|
||||||
{$mine *} (get /issues)
|
=+ match=((soft guard.i.places) pax)
|
||||||
{$by-repo *}
|
?~ match
|
||||||
?+ +>.pax ~&([%strange-path pax] send-null-arch)
|
$(places t.places)
|
||||||
$~
|
(send (?+(ren !! $x read-x.i.places, $y read-y.i.places) pax))
|
||||||
=+ /(scot %p our.hid)/home/(scot %da now.hid)/web/plan
|
|
||||||
=+ .^({* acc/(map knot plan-acct)} %cx -)
|
|
||||||
(send-children usr:(~(got by acc) %github) ~)
|
|
||||||
::
|
|
||||||
{@t $~} (get /users/[-.+>.pax]/repos)
|
|
||||||
{@t @t $~} (get /repos/[-.+>.pax]/[-.+>+.pax]/issues)
|
|
||||||
==
|
|
||||||
==
|
|
||||||
==
|
|
||||||
::
|
|
||||||
:: (send-hiss (endpoint-to-purl /issues) %get ~ ~)
|
|
||||||
::
|
|
||||||
:: Produce an arch with the given list of children
|
|
||||||
::
|
|
||||||
++ send-children
|
|
||||||
|= children/(list @t)
|
|
||||||
%- send :*
|
|
||||||
ost.hid %diff %arch ~
|
|
||||||
(malt (turn children |=(@t [+< ~])))
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
:: Create or update a webhook to listen for a set of events.
|
:: Create or update a webhook to listen for a set of events.
|
||||||
::
|
::
|
||||||
@ -272,14 +318,15 @@
|
|||||||
++ sigh-httr
|
++ sigh-httr
|
||||||
|= {way/wire res/httr}
|
|= {way/wire res/httr}
|
||||||
^- {(list move) _+>.$}
|
^- {(list move) _+>.$}
|
||||||
?. ?=({care @ @ @ *} way)
|
?. ?=({care ?($read $listen) @ *} way)
|
||||||
~& res=res
|
~& res=res
|
||||||
[~ +>.$]
|
[~ +>.$]
|
||||||
=+ arg=(path (cue (slav %uv i.t.t.way)))
|
=* ren i.way
|
||||||
=* pax t.t.t.way
|
=* style i.t.way
|
||||||
|
=* pax t.t.way
|
||||||
:_ +>.$ :_ ~
|
:_ +>.$ :_ ~
|
||||||
:+ ost.hid %diff
|
:+ ost.hid %diff
|
||||||
?+ i.way null+~
|
?+ ren null+~
|
||||||
$x
|
$x
|
||||||
?~ r.res
|
?~ r.res
|
||||||
json+(jobe err+s+%empty-response code+(jone p.res) ~)
|
json+(jobe err+s+%empty-response code+(jone p.res) ~)
|
||||||
@ -288,33 +335,18 @@
|
|||||||
json+(jobe err+s+%bad-json code+(jone p.res) body+s+q.u.r.res ~)
|
json+(jobe err+s+%bad-json code+(jone p.res) body+s+q.u.r.res ~)
|
||||||
?. =(2 (div p.res 100))
|
?. =(2 (div p.res 100))
|
||||||
json+(jobe err+s+%request-rejected code+(jone p.res) msg+u.jon ~)
|
json+(jobe err+s+%request-rejected code+(jone p.res) msg+u.jon ~)
|
||||||
?+ +.pax ~&([%sigh-strange-path pax] null+~)
|
=+ places=(places ren style pax)
|
||||||
{$issues $mine $~}
|
|- ^- sub-result
|
||||||
=+ issues=((ar:jo issue:gh-parse) u.jon)
|
?~ places
|
||||||
?~ issues
|
~&([%sigh-strange-path pax] null+~)
|
||||||
~& [err+s+%response-not-issues pax+pax code+(jone p.res) msg+u.jon]
|
=+ match=((soft guard.i.places) pax)
|
||||||
null+~
|
?~ match
|
||||||
gh-list-issues+u.issues
|
$(places t.places)
|
||||||
::
|
=+ (sigh-x.i.places u.jon)
|
||||||
{$issues $by-repo @t @t $~}
|
?~ -
|
||||||
=+ issues=((ar:jo issue:gh-parse) u.jon)
|
~& [err+s+%response-not-valid pax+pax code+(jone p.res) msg+u.jon]
|
||||||
?~ issues
|
null+~
|
||||||
~& [err+s+%response-not-issues pax+pax code+(jone p.res) msg+u.jon]
|
u.-
|
||||||
null+~
|
|
||||||
gh-list-issues+u.issues
|
|
||||||
==
|
|
||||||
:: ::
|
|
||||||
:: :: Once we know we have good data, we drill into the JSON
|
|
||||||
:: :: to find the specific piece of data referred to by 'arg'
|
|
||||||
:: ::
|
|
||||||
:: |- ^- sub-result
|
|
||||||
:: ?~ arg
|
|
||||||
:: json+u.jon
|
|
||||||
:: =+ dir=((om:jo some) u.jon)
|
|
||||||
:: ?~ dir
|
|
||||||
:: json+(jobe err+s+%json-not-object code+(jone p.res) body+u.jon ~)
|
|
||||||
:: =+ new-jon=(~(get by u.dir) i.arg)
|
|
||||||
:: $(arg t.arg, u.jon ?~(new-jon ~ u.new-jon))
|
|
||||||
::
|
::
|
||||||
$y
|
$y
|
||||||
?~ r.res
|
?~ r.res
|
||||||
@ -327,43 +359,18 @@
|
|||||||
?. =(2 (div p.res 100))
|
?. =(2 (div p.res 100))
|
||||||
~& [err+s+%request-rejected code+(jone p.res) msg+u.jon]
|
~& [err+s+%request-rejected code+(jone p.res) msg+u.jon]
|
||||||
arch+*arch
|
arch+*arch
|
||||||
?+ +.pax ~&([%sigh-strange-path pax] arch+*arch)
|
=+ places=(places ren style pax)
|
||||||
{$issues $mine $~}
|
|- ^- sub-result
|
||||||
=+ issues=((ar:jo issue:gh-parse) u.jon)
|
?~ places
|
||||||
?~ issues
|
~&([%sigh-strange-path pax] arch+*arch)
|
||||||
~& [err+s+%response-not-issues pax+pax code+(jone p.res) msg+u.jon]
|
=+ match=((soft guard.i.places) pax)
|
||||||
arch+*arch
|
?~ match
|
||||||
:+ %arch `(shax (jam u.issues))
|
$(places t.places)
|
||||||
(malt (turn u.issues |=(issue:gh [id ~])))
|
=+ (sigh-y.i.places u.jon)
|
||||||
::
|
?~ -
|
||||||
{$issues $by-repo @t $~}
|
~& [err+s+%response-not-valid pax+pax code+(jone p.res) msg+u.jon]
|
||||||
=+ repos=((ar:jo repository:gh-parse) u.jon)
|
arch+*arch
|
||||||
?~ repos
|
arch+u.-
|
||||||
~& [err+s+%response-not-repos pax+pax code+(jone p.res) msg+u.jon]
|
|
||||||
arch+*arch
|
|
||||||
:+ %arch `(shax (jam u.repos))
|
|
||||||
(malt (turn u.repos |=(repository:gh [name ~])))
|
|
||||||
::
|
|
||||||
{$issues $by-repo @t @t $~}
|
|
||||||
=+ issues=((ar:jo issue:gh-parse) u.jon)
|
|
||||||
?~ issues
|
|
||||||
~& [err+s+%response-not-issues pax+pax code+(jone p.res) msg+u.jon]
|
|
||||||
arch+*arch
|
|
||||||
:+ %arch `(shax (jam u.issues))
|
|
||||||
(malt (turn u.issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~])))
|
|
||||||
==
|
|
||||||
:: ::
|
|
||||||
:: :: Once we know we have good data, we drill into the JSON
|
|
||||||
:: :: to find the specific piece of data referred to by 'arg'
|
|
||||||
:: ::
|
|
||||||
:: |- ^- sub-result
|
|
||||||
:: =+ dir=((om:jo some) u.jon)
|
|
||||||
:: ?~ dir
|
|
||||||
:: [%arch `(shax (jam u.jon)) ~]
|
|
||||||
:: ?~ arg
|
|
||||||
:: [%arch `(shax (jam u.jon)) (~(run by u.dir) _~)]
|
|
||||||
:: =+ new-jon=(~(get by u.dir) i.arg)
|
|
||||||
:: $(arg t.arg, u.jon ?~(new-jon ~ u.new-jon))
|
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ sigh-tang
|
++ sigh-tang
|
||||||
|
@ -1,179 +0,0 @@
|
|||||||
!:
|
|
||||||
|%
|
|
||||||
:: Splits a path into the endpoint prefix and the remainder,
|
|
||||||
:: which is assumed to be a path within the JSON object. We
|
|
||||||
:: choose the longest legal endpoint prefix.
|
|
||||||
::
|
|
||||||
++ split
|
|
||||||
|= pax/path
|
|
||||||
:: =- ~& [%pax pax - (valid-endpoint pax)] -
|
|
||||||
=+ l=(lent pax)
|
|
||||||
|- ^- {path path}
|
|
||||||
?~ l
|
|
||||||
[~ pax]
|
|
||||||
?: ?=(valid-endpoint (scag l pax))
|
|
||||||
[(scag l pax) (slag l pax)]
|
|
||||||
$(l (dec l))
|
|
||||||
::
|
|
||||||
:: These are all the github GET endpoints, sorted with
|
|
||||||
:: `env LC_ALL=C sort`
|
|
||||||
::
|
|
||||||
++ valid-endpoint
|
|
||||||
$? {$emojis $~}
|
|
||||||
{$events $~}
|
|
||||||
{$feeds $~}
|
|
||||||
{$gists $public $~}
|
|
||||||
{$gists $starred $~}
|
|
||||||
{$gists gist-id/@ta $comments id/@ta $~}
|
|
||||||
{$gists gist-id/@ta $comments $~}
|
|
||||||
{$gists id/@ta $commits $~}
|
|
||||||
{$gists id/@ta $forks $~}
|
|
||||||
{$gists id/@ta $star $~}
|
|
||||||
{$gists id/@ta sha/@ta $~}
|
|
||||||
{$gists id/@ta $~}
|
|
||||||
{$gists $~}
|
|
||||||
{$gitignore $templates language/@ta $~}
|
|
||||||
{$gitignore $templates $~}
|
|
||||||
{$issues $~}
|
|
||||||
{$licenses license/@ta $~}
|
|
||||||
{$licenses $~}
|
|
||||||
{$meta $~}
|
|
||||||
{$networks onwer/@ta repo/@ta $events $~}
|
|
||||||
{$notifications $threads id/@ta $subscription $~}
|
|
||||||
{$notifications $threads id/@ta $~}
|
|
||||||
{$notifications $~}
|
|
||||||
{$organizations $~}
|
|
||||||
{$orgs org/@ta $events $~}
|
|
||||||
{$orgs org/@ta $hooks id/@ta $~}
|
|
||||||
{$orgs org/@ta $hooks $~}
|
|
||||||
{$orgs org/@ta $members username/@ta $~}
|
|
||||||
{$orgs org/@ta $members $~}
|
|
||||||
{$orgs org/@ta $memberships username/@ta $~}
|
|
||||||
{$orgs org/@ta $migrations id/@ta $archive $~}
|
|
||||||
{$orgs org/@ta $migrations id/@ta $~}
|
|
||||||
{$orgs org/@ta $migrations $~}
|
|
||||||
{$orgs org/@ta $'public_members' username/@ta $~}
|
|
||||||
{$orgs org/@ta $'public_members' $~}
|
|
||||||
{$orgs org/@ta $repos $~}
|
|
||||||
{$orgs org/@ta $teams $~}
|
|
||||||
{$orgs org/@ta $~}
|
|
||||||
{$'rate_limit' $~}
|
|
||||||
{$repos owner/@ta repo/@ta $assignees assignee/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $assignees $~}
|
|
||||||
{$repos owner/@ta repo/@ta $branches branch/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $branches $~}
|
|
||||||
{$repos owner/@ta repo/@ta $collaborators username/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $collaborators $~}
|
|
||||||
{$repos owner/@ta repo/@ta $comments id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $commits ref/@ta $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $commits ref/@ta $status $~}
|
|
||||||
{$repos owner/@ta repo/@ta $commits ref/@ta $statuses $~}
|
|
||||||
{$repos owner/@ta repo/@ta $commits sha/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $commits $~}
|
|
||||||
{$repos owner/@ta repo/@ta $compare base-head/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $contents path/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $contributors $~}
|
|
||||||
{$repos owner/@ta repo/@ta $deployments id/@ta $statuses $~}
|
|
||||||
{$repos owner/@ta repo/@ta $deployments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $events $~}
|
|
||||||
{$repos owner/@ta repo/@ta $forks $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $blobs sha/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $commits sha/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $refs ref/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $refs $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $tags sha/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $git $trees sha/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $hooks id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $hooks $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues $comments id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues $events id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues $events $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues issue-number/@ta $events $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues number/@ta $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues number/@ta $labels $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues number/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $issues $~}
|
|
||||||
{$repos owner/@ta repo/@ta $keys id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $keys $~}
|
|
||||||
{$repos owner/@ta repo/@ta $labels name/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $labels $~}
|
|
||||||
{$repos owner/@ta repo/@ta $language $~}
|
|
||||||
{$repos owner/@ta repo/@ta $license $~}
|
|
||||||
{$repos owner/@ta repo/@ta $milestones number/@ta $labels $~}
|
|
||||||
{$repos owner/@ta repo/@ta $milestones number/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $milestones $~}
|
|
||||||
{$repos owner/@ta repo/@ta $notifications $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pages $builds $latest $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pages $builds $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pages $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls $comments id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls number/@ta $comments $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls number/@ta $commits $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls number/@ta $files $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls number/@ta $merge $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls number/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $pulls $~}
|
|
||||||
{$repos owner/@ta repo/@ta $readme $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases $assets id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases $latest $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases $tags tag/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases id/@ta $assets $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases id/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $releases $~}
|
|
||||||
{$repos owner/@ta repo/@ta $stargazers $~}
|
|
||||||
{$repos owner/@ta repo/@ta $stats $'commit_activity' $~}
|
|
||||||
{$repos owner/@ta repo/@ta $stats $contributors $~}
|
|
||||||
{$repos owner/@ta repo/@ta $stats $participation $~}
|
|
||||||
{$repos owner/@ta repo/@ta $stats $'punch_card' $~}
|
|
||||||
{$repos owner/@ta repo/@ta $subscribers $~}
|
|
||||||
{$repos owner/@ta repo/@ta $subscription $~}
|
|
||||||
{$repos owner/@ta repo/@ta $tags $~}
|
|
||||||
{$repos owner/@ta repo/@ta $teams $~}
|
|
||||||
{$repos owner/@ta repo/@ta archive-format/@ta ref/@ta $~}
|
|
||||||
{$repos owner/@ta repo/@ta $~}
|
|
||||||
{$repositories $~}
|
|
||||||
{$search $code $~}
|
|
||||||
{$search $issues $~}
|
|
||||||
{$search $repositories $~}
|
|
||||||
{$search $users $~}
|
|
||||||
{$teams id/@ta $members $~}
|
|
||||||
{$teams id/@ta $memberships username/@ta $~}
|
|
||||||
{$teams id/@ta $repos owner/@ta repo/@ta $~}
|
|
||||||
{$teams id/@ta $~}
|
|
||||||
{$user $emails $~}
|
|
||||||
{$user $followers $~}
|
|
||||||
{$user $following username/@ta $~}
|
|
||||||
{$user $following $~}
|
|
||||||
{$user $issues $~}
|
|
||||||
{$user $keys id/@ta $~}
|
|
||||||
{$user $keys $~}
|
|
||||||
{$user $memberships $orgs org/@ta $~}
|
|
||||||
{$user $memberships $orgs $~}
|
|
||||||
{$user $orgs $~}
|
|
||||||
{$user $repos $~}
|
|
||||||
{$user $starred owner/@ta repo/@ta $~}
|
|
||||||
{$user $starred $~}
|
|
||||||
{$user $subscriptions $~}
|
|
||||||
{$user $teams $~}
|
|
||||||
{$user username/@ta $orgs $~}
|
|
||||||
{$user $~}
|
|
||||||
{$users username/@ta $events $orgs org/@ta $~}
|
|
||||||
{$users username/@ta $events $public $~}
|
|
||||||
{$users username/@ta $events $~}
|
|
||||||
{$users username/@ta $followers $~}
|
|
||||||
{$users username/@ta $following target-user/@ta $~}
|
|
||||||
{$users username/@ta $following $~}
|
|
||||||
{$users username/@ta $gists $~}
|
|
||||||
{$users username/@ta $keys $~}
|
|
||||||
{$users username/@ta $'received_events' $public $~}
|
|
||||||
{$users username/@ta $'received_events' $~}
|
|
||||||
{$users username/@ta $starred $~}
|
|
||||||
{$users username/@ta $subscriptions $~}
|
|
||||||
{$users username/@ta $~}
|
|
||||||
{$users usernmae/@ta $repos $~}
|
|
||||||
{$users $~}
|
|
||||||
==
|
|
||||||
--
|
|
Loading…
Reference in New Issue
Block a user