@@ -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_BYTES , 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 = exports . 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 = exports . 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,48 @@ exports.getSupportFiles = (bsConfig, isA11y) => {
387
396
cleanupParams : Object . keys ( cleanupParams ) . length ? cleanupParams : null
388
397
} ;
389
398
}
399
+
400
+ exports . checkAndTruncateVCSInfo = ( gitMetaData ) => {
401
+ const gitMetaDataSizeInBytes = exports . getSizeOfJsonObjectInBytes ( gitMetaData ) ;
402
+
403
+ if ( gitMetaDataSizeInBytes && gitMetaDataSizeInBytes > MAX_GIT_META_DATA_SIZE_IN_BYTES ) {
404
+ const truncateSize = gitMetaDataSizeInBytes - MAX_GIT_META_DATA_SIZE_IN_BYTES ;
405
+ gitMetaData . commit_message = exports . truncateString ( gitMetaData . commit_message , truncateSize ) ;
406
+ logger . info ( `The commit has been truncated. Size of commit after truncation is ${ exports . getSizeOfJsonObjectInBytes ( gitMetaData ) / 1024 } KB` ) ;
407
+ }
408
+
409
+ return gitMetaData ;
410
+ } ;
411
+
412
+ exports . getSizeOfJsonObjectInBytes = ( jsonData ) => {
413
+ try {
414
+ if ( jsonData && jsonData instanceof Object ) {
415
+ const buffer = Buffer . from ( JSON . stringify ( jsonData ) ) ;
416
+
417
+ return buffer . length ;
418
+ }
419
+ } catch ( error ) {
420
+ logger . debug ( `Something went wrong while calculating size of JSON object: ${ error } ` ) ;
421
+ }
422
+
423
+ return - 1 ;
424
+ } ;
425
+
426
+ exports . truncateString = ( field , truncateSizeInBytes ) => {
427
+ try {
428
+ const bufferSizeInBytes = Buffer . from ( GIT_META_DATA_TRUNCATED ) . length ;
429
+
430
+ const fieldBufferObj = Buffer . from ( field ) ;
431
+ const lenOfFieldBufferObj = fieldBufferObj . length ;
432
+ const finalLen = Math . ceil ( lenOfFieldBufferObj - truncateSizeInBytes - bufferSizeInBytes ) ;
433
+ if ( finalLen > 0 ) {
434
+ const truncatedString = fieldBufferObj . subarray ( 0 , finalLen ) . toString ( ) + GIT_META_DATA_TRUNCATED ;
435
+
436
+ return truncatedString ;
437
+ }
438
+ } catch ( error ) {
439
+ logger . debug ( `Error while truncating field, nothing was truncated here: ${ error } ` ) ;
440
+ }
441
+
442
+ return field ;
443
+ } ;
0 commit comments