@@ -117,31 +117,6 @@ async function saveVersion(path, label) {
117117 return res ;
118118}
119119
120- export async function overwriteCopy ( url , title ) {
121- let blob ;
122- // If source content was supplied upstream, use it.
123- if ( url . sourceContent ) {
124- const type = url . destination . includes ( '.json' ) ? 'application/json' : 'text/html' ;
125- blob = new Blob ( [ url . sourceContent ] , { type } ) ;
126- } else {
127- const srcResp = await daFetch ( `${ DA_ORIGIN } /source${ url . source } ` ) ;
128- if ( ! srcResp . ok ) {
129- url . status = 'error' ;
130- return srcResp ;
131- }
132- blob = await srcResp . blob ( ) ;
133- }
134-
135- const body = new FormData ( ) ;
136- body . append ( 'data' , blob ) ;
137- const opts = { method : 'POST' , body } ;
138- const daResp = await daFetch ( `${ DA_ORIGIN } /source${ url . destination } ` , opts ) ;
139- url . status = 'success' ;
140- // Don't wait for the version save
141- saveVersion ( url . destination , `${ title } - Rolled Out` ) ;
142- return daResp ;
143- }
144-
145120function collapseInnerTextSpaces ( html ) {
146121 return html . replace ( / > ( [ ^ < ] * ) < / g, ( match , textContent ) => {
147122 // Only process if there's actual text content
@@ -173,13 +148,55 @@ const getDaUrl = (url) => {
173148 return { org, repo, pathname } ;
174149} ;
175150
151+ export async function overwriteCopy ( url , title ) {
152+ let resp ;
153+ if ( url . sourceContent ) {
154+ // If source content was supplied upstream, use it.
155+ const type = url . destination . includes ( '.json' ) ? 'application/json' : 'text/html' ;
156+ const blob = new Blob ( [ url . sourceContent ] , { type } ) ;
157+ const opts = {
158+ method : 'POST' ,
159+ body : new FormData ( ) ,
160+ } ;
161+ opts . body . append ( 'data' , blob ) ;
162+ resp = await daFetch ( `${ DA_ORIGIN } /source${ url . destination } ` , opts ) ;
163+ } else {
164+ const srcHtml = await getHtml ( url . source ) ;
165+ if ( srcHtml ) {
166+ removeLocTags ( srcHtml ) ;
167+ const daMetadata = getElementMetadata ( srcHtml . querySelector ( DA_METADATA_SELECTOR ) ) ;
168+ delete daMetadata ?. acceptedhashes ;
169+ delete daMetadata ?. rejectedhashes ;
170+ resp = await saveToDa (
171+ srcHtml . querySelector ( 'main' ) . innerHTML ,
172+ getDaUrl ( url . destination ) ,
173+ daMetadata ,
174+ ) ;
175+ }
176+ }
177+
178+ if ( ! resp ?. ok ) {
179+ url . status = 'error' ;
180+ return null ;
181+ }
182+
183+ url . status = 'success' ;
184+ // Don't wait for the version save
185+ saveVersion ( url . destination , `${ title } - Rolled Out` ) ;
186+ return resp ;
187+ }
188+
176189function getPreviousHashes ( metadata ) {
177190 const acceptedHashes = metadata . acceptedhashes ?. text ?. split ( ',' ) || [ ] ;
178191 const rejectedHashes = metadata . rejectedhashes ?. text ?. split ( ',' ) || [ ] ;
179192 return { acceptedHashes, rejectedHashes } ;
180193}
181194
182- export async function rolloutCopy ( url , projectTitle ) {
195+ export async function rolloutCopy (
196+ url ,
197+ projectTitle ,
198+ { labelLocal = null , labelUpstream = null } = { } ,
199+ ) {
183200 // if the regional folder has content that differs from langstore,
184201 // then a regional diff needs to be done
185202 try {
@@ -203,14 +220,18 @@ export async function rolloutCopy(url, projectTitle) {
203220 }
204221
205222 const daMetadataEl = regionalCopy . querySelector ( DA_METADATA_SELECTOR ) ;
206- const { acceptedHashes, rejectedHashes } = getPreviousHashes ( getElementMetadata ( daMetadataEl ) ) ;
223+ const daMetadata = getElementMetadata ( daMetadataEl ) ;
224+ const { acceptedHashes, rejectedHashes } = getPreviousHashes ( daMetadata ) ;
207225
208226 // There are differences, upload the diffed regional file
209227 const diffed = await regionalDiff ( langstoreCopy , regionalCopy , acceptedHashes , rejectedHashes ) ;
210228
229+ if ( labelLocal ) daMetadata [ 'diff-label-local' ] = labelLocal ;
230+ if ( labelUpstream ) daMetadata [ 'diff-label-upstream' ] = labelUpstream ;
231+
211232 return new Promise ( ( resolve ) => {
212233 const daUrl = getDaUrl ( url ) ;
213- const savePromise = saveToDa ( diffed . innerHTML , daUrl , { daMetadataEl } ) ;
234+ const savePromise = saveToDa ( diffed . innerHTML , daUrl , daMetadata ) ;
214235
215236 const timedout = setTimeout ( ( ) => {
216237 url . status = 'timeout' ;
@@ -235,10 +256,17 @@ export async function rolloutCopy(url, projectTitle) {
235256 }
236257}
237258
238- export async function mergeCopy ( url , projectTitle ) {
259+ export async function mergeCopy (
260+ url ,
261+ projectTitle ,
262+ { labelLocal = null , labelUpstream = null } = { } ,
263+ ) {
239264 try {
240265 const regionalCopy = await getHtml ( url . destination ) ;
241- if ( ! regionalCopy ) throw new Error ( 'No regional content or error fetching' ) ;
266+ const regionalMain = regionalCopy ?. querySelector ( 'body > main' ) . innerHTML ;
267+ if ( ! regionalCopy || regionalMain === '' || regionalMain === '<div></div>' ) {
268+ throw new Error ( 'No regional content or error fetching' ) ;
269+ }
242270
243271 const langstoreCopy = url . sourceContent
244272 ? await getHtml ( null , url . sourceContent )
@@ -255,13 +283,17 @@ export async function mergeCopy(url, projectTitle) {
255283 }
256284
257285 const daMetadataEl = regionalCopy . querySelector ( DA_METADATA_SELECTOR ) ;
258- const { acceptedHashes, rejectedHashes } = getPreviousHashes ( getElementMetadata ( daMetadataEl ) ) ;
286+ const daMetadata = getElementMetadata ( daMetadataEl ) ;
287+ const { acceptedHashes, rejectedHashes } = getPreviousHashes ( daMetadata ) ;
259288
260289 // There are differences, upload the annotated loc file
261290 const diffed = await regionalDiff ( langstoreCopy , regionalCopy , acceptedHashes , rejectedHashes ) ;
262291
292+ if ( labelLocal ) daMetadata [ 'diff-label-local' ] = labelLocal ;
293+ if ( labelUpstream ) daMetadata [ 'diff-label-upstream' ] = labelUpstream ;
294+
263295 const daUrl = getDaUrl ( url ) ;
264- const { daResp } = await saveToDa ( diffed . innerHTML , daUrl , { daMetadataEl } ) ;
296+ const { daResp } = await saveToDa ( diffed . innerHTML , daUrl , daMetadata ) ;
265297 if ( daResp . ok ) {
266298 url . status = 'success' ;
267299 saveVersion ( url . destination , `${ projectTitle } - Rolled Out` ) ;
0 commit comments