@@ -49,7 +49,15 @@ export class GitUtil {
4949 this . _token = token ;
5050 this . _logger = logger ;
5151
52- this . _octokit = new Octokit ( { auth : token } ) ;
52+ this . _octokit = new Octokit ( {
53+ auth : token ,
54+ log : {
55+ debug : msg => logger . verbose ( msg ) ,
56+ info : msg => logger . info ( msg ) ,
57+ warn : msg => logger . warn ( msg ) ,
58+ error : msg => logger . error ( msg ) ,
59+ } ,
60+ } ) ;
5361 }
5462
5563 async clone ( { distDir } : { distDir : string } ) {
@@ -88,19 +96,30 @@ export class GitUtil {
8896
8997 async listRemoteFiles ( { prefix } : { prefix : string } ) : Promise < ObjectListResult > {
9098 try {
91- const res = await this . _octokit . request ( "GET /repos/{owner}/{repo}/contents/{path}" , {
92- owner : this . _owner ,
93- repo : this . _repo ,
94- ref : this . _branchName ,
95- path : prefix ,
96- } ) ;
97- if ( ! Array . isArray ( res . data ) ) {
98- throw new Error ( `${ prefix } must be a directory` ) ;
99+ const open : string [ ] = [ prefix ] ;
100+ const result = [ ] ;
101+ while ( open . length ) {
102+ const prefix = open . pop ( ) ! ;
103+ this . _logger . verbose ( `${ prefix } : Visit` ) ;
104+ const res = await this . _octokit . request ( "GET /repos/{owner}/{repo}/contents/{path}" , {
105+ owner : this . _owner ,
106+ repo : this . _repo ,
107+ ref : this . _branchName ,
108+ path : prefix ,
109+ } ) ;
110+ if ( ! Array . isArray ( res . data ) ) {
111+ throw new Error ( `${ prefix } must be a directory` ) ;
112+ }
113+ const nextPaths = res . data . filter ( f => f . type === "dir" ) . map ( f => f . path ) ;
114+ const files = res . data . filter ( f => f . type === "file" ) ;
115+ this . _logger . verbose ( `${ prefix } : ${ files . length } files and ${ nextPaths } folders are found` ) ;
116+ open . push ( ...nextPaths ) ;
117+ result . push ( ...files ) ;
99118 }
100119
101120 return {
102121 isTruncated : false ,
103- contents : res . data
122+ contents : result
104123 . filter ( f => f . type === "file" )
105124 . map ( f => ( {
106125 key : f . path ,
0 commit comments