11const Diffable = require ( './diffable' )
22const NopCommand = require ( '../nopcommand' )
33const MergeDeep = require ( '../mergeDeep' )
4+ const Overrides = require ( './overrides' )
45const ignorableFields = [ ]
56const overrides = [
67 'required_status_checks' ,
@@ -95,51 +96,6 @@ module.exports = class Rulesets extends Diffable {
9596 return merged . hasChanges
9697 }
9798
98- getObjectRef ( data , dataKey ) {
99- const results = [ ]
100- const traverse = ( obj ) => {
101- for ( const key in obj ) {
102- if ( key === dataKey ) {
103- results . push ( obj )
104- } else if ( Array . isArray ( obj [ key ] ) ) {
105- obj [ key ] . forEach ( element => traverse ( element ) )
106- } else if ( typeof obj [ key ] === 'object' && obj [ key ] ) {
107- traverse ( obj [ key ] )
108- }
109- }
110- }
111- traverse ( data )
112- return results
113- }
114-
115- // When {{EXTERNALLY_DEFINED}} is found in the override value, retain the
116- // existing value from GitHub.
117- // Note:
118- // - The admin settings could define multiple overrides, but the GitHub API
119- // retains one only.
120- // - The PUT method for rulesets (update) allows for multiple overrides.
121- // - The POST method for rulesets (create) allows for one override only.
122- removeOverrides ( source , existing ) {
123- overrides . forEach ( override => {
124- let sourceRefs = this . getObjectRef ( source , override )
125- let data = JSON . stringify ( sourceRefs , null , 2 )
126- if ( data . includes ( '{{EXTERNALLY_DEFINED}}' ) ) {
127- let existingRefs = this . getObjectRef ( existing , override )
128- sourceRefs . forEach ( sourceRef => {
129- if ( existingRefs [ 0 ] ) {
130- sourceRef [ override ] = existingRefs [ 0 ] [ override ]
131- } else if ( Array . isArray ( sourceRef [ override ] ) ) {
132- sourceRef [ override ] = [ ]
133- } else if ( typeof sourceRef [ override ] === 'object' && sourceRef [ override ] ) {
134- sourceRef [ override ] = { }
135- } else {
136- sourceRef [ override ] = ''
137- }
138- } )
139- }
140- } )
141- }
142-
14399 update ( existing , attrs ) {
144100 const parms = this . wrapAttrs ( Object . assign ( { id : existing . id } , attrs ) )
145101 if ( this . scope === 'org' ) {
@@ -148,7 +104,7 @@ module.exports = class Rulesets extends Diffable {
148104 new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'PUT /orgs/{org}/rulesets/{id}' , parms ) , 'Update Ruleset' )
149105 ] )
150106 }
151- this . removeOverrides ( parms , existing )
107+ Overrides . removeOverrides ( overrides , parms , existing )
152108 this . log . debug ( `Updating Ruleset with the following values ${ JSON . stringify ( parms , null , 2 ) } ` )
153109 return this . github . request ( 'PUT /orgs/{org}/rulesets/{id}' , parms ) . then ( res => {
154110 this . log ( `Ruleset updated successfully ${ JSON . stringify ( res . url ) } ` )
@@ -162,7 +118,7 @@ module.exports = class Rulesets extends Diffable {
162118 new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'PUT /repos/{owner}/{repo}/rulesets/{id}' , parms ) , 'Update Ruleset' )
163119 ] )
164120 }
165- this . removeOverrides ( parms , existing )
121+ Overrides . removeOverrides ( overrides , parms , existing )
166122 this . log . debug ( `Updating Ruleset with the following values ${ JSON . stringify ( parms , null , 2 ) } ` )
167123 return this . github . request ( 'PUT /repos/{owner}/{repo}/rulesets/{id}' , parms ) . then ( res => {
168124 this . log ( `Ruleset updated successfully ${ JSON . stringify ( res . url ) } ` )
@@ -180,7 +136,7 @@ module.exports = class Rulesets extends Diffable {
180136 new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'POST /orgs/{org}/rulesets' , this . wrapAttrs ( attrs ) ) , 'Create Ruleset' )
181137 ] )
182138 }
183- this . removeOverrides ( attrs , { } )
139+ Overrides . removeOverrides ( overrides , attrs , { } )
184140 this . log . debug ( `Creating Rulesets with the following values ${ JSON . stringify ( attrs , null , 2 ) } ` )
185141 return this . github . request ( 'POST /orgs/{org}/rulesets' , this . wrapAttrs ( attrs ) ) . then ( res => {
186142 this . log ( `Ruleset created successfully ${ JSON . stringify ( res . url ) } ` )
@@ -194,7 +150,7 @@ module.exports = class Rulesets extends Diffable {
194150 new NopCommand ( this . constructor . name , this . repo , this . github . request . endpoint ( 'POST /repos/{owner}/{repo}/rulesets' , this . wrapAttrs ( attrs ) ) , 'Create Ruleset' )
195151 ] )
196152 }
197- this . removeOverrides ( attrs , { } )
153+ Overrides . removeOverrides ( overrides , attrs , { } )
198154 this . log . debug ( `Creating Rulesets with the following values ${ JSON . stringify ( attrs , null , 2 ) } ` )
199155 return this . github . request ( 'POST /repos/{owner}/{repo}/rulesets' , this . wrapAttrs ( attrs ) ) . then ( res => {
200156 this . log ( `Ruleset created successfully ${ JSON . stringify ( res . url ) } ` )
0 commit comments