@@ -18,6 +18,7 @@ const glob = require('glob');
18
18
const pGitconfig = promisify ( gitconfig ) ;
19
19
const { readCypressConfigFile } = require ( './readCypressConfigUtil' ) ;
20
20
const CrashReporter = require ( '../testObservability/crashReporter' ) ;
21
+ const { MAX_GIT_META_DATA_SIZE_IN_KB , GIT_META_DATA_TRUNCATED } = require ( './constants' )
21
22
22
23
exports . debug = ( text , shouldReport = false , throwable = null ) => {
23
24
if ( process . env . BROWSERSTACK_OBSERVABILITY_DEBUG === "true" || process . env . BROWSERSTACK_OBSERVABILITY_DEBUG === "1" ) {
@@ -119,7 +120,7 @@ exports.getGitMetaData = () => {
119
120
120
121
const { remote } = await pGitconfig ( info . commonGitDir ) ;
121
122
const remotes = Object . keys ( remote ) . map ( remoteName => ( { name : remoteName , url : remote [ remoteName ] [ 'url' ] } ) ) ;
122
- resolve ( {
123
+ let gitMetaData = {
123
124
"name" : "git" ,
124
125
"sha" : info [ "sha" ] ,
125
126
"short_sha" : info [ "abbreviatedSha" ] ,
@@ -136,7 +137,11 @@ exports.getGitMetaData = () => {
136
137
"last_tag" : info [ "lastTag" ] ,
137
138
"commits_since_last_tag" : info [ "commitsSinceLastTag" ] ,
138
139
"remotes" : remotes
139
- } ) ;
140
+ } ;
141
+
142
+ gitMetaData = this . checkAndTruncateVCSInfo ( gitMetaData ) ;
143
+
144
+ resolve ( gitMetaData ) ;
140
145
} catch ( e ) {
141
146
exports . debug ( `Exception in populating Git Metadata with error : ${ e } ` , true , e ) ;
142
147
logger . debug ( `Exception in populating Git Metadata with error : ${ e } ` , true , e ) ;
@@ -146,7 +151,7 @@ exports.getGitMetaData = () => {
146
151
} else {
147
152
const { remote } = await pGitconfig ( info . commonGitDir ) ;
148
153
const remotes = Object . keys ( remote ) . map ( remoteName => ( { name : remoteName , url : remote [ remoteName ] [ 'url' ] } ) ) ;
149
- resolve ( {
154
+ let gitMetaData = {
150
155
"name" : "git" ,
151
156
"sha" : info [ "sha" ] ,
152
157
"short_sha" : info [ "abbreviatedSha" ] ,
@@ -163,7 +168,11 @@ exports.getGitMetaData = () => {
163
168
"last_tag" : info [ "lastTag" ] ,
164
169
"commits_since_last_tag" : info [ "commitsSinceLastTag" ] ,
165
170
"remotes" : remotes
166
- } ) ;
171
+ } ;
172
+
173
+ gitMetaData = this . checkAndTruncateVCSInfo ( gitMetaData ) ;
174
+
175
+ resolve ( gitMetaData ) ;
167
176
}
168
177
} catch ( err ) {
169
178
exports . debug ( `Exception in populating Git metadata with error : ${ err } ` , true , err ) ;
@@ -387,3 +396,52 @@ exports.getSupportFiles = (bsConfig, isA11y) => {
387
396
cleanupParams : Object . keys ( cleanupParams ) . length ? cleanupParams : null
388
397
} ;
389
398
}
399
+
400
+ exports . checkAndTruncateVCSInfo = ( gitMetaData ) => {
401
+ const gitMetaDataSizeInKb = this . getSizeOfJsonObjectInKb ( gitMetaData ) ;
402
+
403
+ if ( gitMetaDataSizeInKb && gitMetaDataSizeInKb > 0 && gitMetaDataSizeInKb > MAX_GIT_META_DATA_SIZE_IN_KB ) {
404
+ const truncateSize = gitMetaDataSizeInKb - MAX_GIT_META_DATA_SIZE_IN_KB ;
405
+ const truncatedCommitMessage = this . truncateString ( gitMetaData . commit_message , truncateSize ) ;
406
+ gitMetaData . commit_message = truncatedCommitMessage ;
407
+ exports . debug ( 'The commit has been truncated' ) ;
408
+ logger . debug ( 'The commit has been truncated' ) ;
409
+ }
410
+
411
+ return gitMetaData ;
412
+ } ;
413
+
414
+ exports . getSizeOfJsonObjectInKb = ( jsonData ) => {
415
+ try {
416
+ if ( jsonData ) {
417
+ const buffer = Buffer . from ( JSON . stringify ( jsonData ) ) ;
418
+
419
+ return Math . floor ( buffer . length / 1024 ) ;
420
+ }
421
+ } catch ( error ) {
422
+ exports . debug ( `Something went wrong while calculating size of JSON object: ${ error } ` , true , error ) ;
423
+ logger . debug ( `Something went wrong while calculating size of JSON object: ${ error } ` , true , error ) ;
424
+ }
425
+
426
+ return - 1 ;
427
+ } ;
428
+
429
+ exports . truncateString = ( field , truncateSizeInKb ) => {
430
+ try {
431
+ const bufferSizeInBytes = Buffer . from ( GIT_META_DATA_TRUNCATED ) . length ;
432
+
433
+ const fieldBufferObj = Buffer . from ( field ) ;
434
+ const lenOfFieldBufferObj = fieldBufferObj . length ;
435
+ const finalLen = Math . round ( lenOfFieldBufferObj - ( truncateSizeInKb * 1024 ) - ( bufferSizeInBytes ) ) ;
436
+ if ( finalLen > 0 ) {
437
+ const truncatedString = fieldBufferObj . subarray ( 0 , finalLen ) . toString ( ) + GIT_META_DATA_TRUNCATED ;
438
+
439
+ return truncatedString ;
440
+ }
441
+ } catch ( error ) {
442
+ exports . debug ( `Error while truncating field, nothing was truncated here: ${ error } ` , true , error ) ;
443
+ logger . debug ( `Error while truncating field, nothing was truncated here: ${ error } ` , true , error ) ;
444
+ }
445
+
446
+ return field ;
447
+ } ;
0 commit comments