@@ -18,6 +18,7 @@ const glob = require('glob');
1818const pGitconfig = promisify ( gitconfig ) ;
1919const { readCypressConfigFile } = require ( './readCypressConfigUtil' ) ;
2020const CrashReporter = require ( '../testObservability/crashReporter' ) ;
21+ const { MAX_GIT_META_DATA_SIZE_IN_BYTES , GIT_META_DATA_TRUNCATED } = require ( './constants' )
2122
2223exports . debug = ( text , shouldReport = false , throwable = null ) => {
2324 if ( process . env . BROWSERSTACK_OBSERVABILITY_DEBUG === "true" || process . env . BROWSERSTACK_OBSERVABILITY_DEBUG === "1" ) {
@@ -119,7 +120,7 @@ exports.getGitMetaData = () => {
119120
120121 const { remote } = await pGitconfig ( info . commonGitDir ) ;
121122 const remotes = Object . keys ( remote ) . map ( remoteName => ( { name : remoteName , url : remote [ remoteName ] [ 'url' ] } ) ) ;
122- resolve ( {
123+ let gitMetaData = {
123124 "name" : "git" ,
124125 "sha" : info [ "sha" ] ,
125126 "short_sha" : info [ "abbreviatedSha" ] ,
@@ -136,7 +137,11 @@ exports.getGitMetaData = () => {
136137 "last_tag" : info [ "lastTag" ] ,
137138 "commits_since_last_tag" : info [ "commitsSinceLastTag" ] ,
138139 "remotes" : remotes
139- } ) ;
140+ } ;
141+
142+ gitMetaData = exports . checkAndTruncateVCSInfo ( gitMetaData ) ;
143+
144+ resolve ( gitMetaData ) ;
140145 } catch ( e ) {
141146 exports . debug ( `Exception in populating Git Metadata with error : ${ e } ` , true , e ) ;
142147 logger . debug ( `Exception in populating Git Metadata with error : ${ e } ` , true , e ) ;
@@ -146,7 +151,7 @@ exports.getGitMetaData = () => {
146151 } else {
147152 const { remote } = await pGitconfig ( info . commonGitDir ) ;
148153 const remotes = Object . keys ( remote ) . map ( remoteName => ( { name : remoteName , url : remote [ remoteName ] [ 'url' ] } ) ) ;
149- resolve ( {
154+ let gitMetaData = {
150155 "name" : "git" ,
151156 "sha" : info [ "sha" ] ,
152157 "short_sha" : info [ "abbreviatedSha" ] ,
@@ -163,7 +168,11 @@ exports.getGitMetaData = () => {
163168 "last_tag" : info [ "lastTag" ] ,
164169 "commits_since_last_tag" : info [ "commitsSinceLastTag" ] ,
165170 "remotes" : remotes
166- } ) ;
171+ } ;
172+
173+ gitMetaData = exports . checkAndTruncateVCSInfo ( gitMetaData ) ;
174+
175+ resolve ( gitMetaData ) ;
167176 }
168177 } catch ( err ) {
169178 exports . debug ( `Exception in populating Git metadata with error : ${ err } ` , true , err ) ;
@@ -387,3 +396,48 @@ exports.getSupportFiles = (bsConfig, isA11y) => {
387396 cleanupParams : Object . keys ( cleanupParams ) . length ? cleanupParams : null
388397 } ;
389398}
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