@@ -72,16 +72,15 @@ export async function commitAndSync(options: ICommitAndSyncOptions): Promise<voi
7272 } ) ;
7373
7474 // preflight check
75- const repoStartingState = await getGitRepositoryState ( dir , logger ) ;
76- if ( repoStartingState . length === 0 || repoStartingState === '|DIRTY' ) {
77- logProgress ( GitStep . PrepareSync ) ;
78- logDebug ( `${ dir } repoStartingState: ${ repoStartingState } , ${ gitUserName } <${ email ?? defaultGitInfo . email } >` , GitStep . PrepareSync ) ;
79- } else if ( repoStartingState === 'NOGIT' ) {
80- throw new CantSyncGitNotInitializedError ( dir ) ;
81- } else {
82- // we may be in middle of a rebase, try fix that
83- await continueRebase ( dir , gitUserName , email ?? defaultGitInfo . email , logger , repoStartingState ) ;
84- }
75+ await syncPreflightCheck ( {
76+ dir,
77+ logger,
78+ logProgress,
79+ logDebug,
80+ defaultGitInfo,
81+ userInfo,
82+ } ) ;
83+
8584 if ( await haveLocalChanges ( dir ) ) {
8685 logProgress ( GitStep . HaveThingsToCommit ) ;
8786 logDebug ( commitMessage , GitStep . HaveThingsToCommit ) ;
@@ -189,3 +188,32 @@ export async function commitAndSync(options: ICommitAndSyncOptions): Promise<voi
189188 await credentialOff ( dir , remoteUrl ) ;
190189 }
191190}
191+
192+ /**
193+ * Check for git repo state, if it is not clean, try fix it. If not init will throw error.
194+ * This method is used by commitAndSync and forcePull before they doing anything.
195+ */
196+ export async function syncPreflightCheck ( configs : {
197+ /** defaultGitInfo from ICommitAndSyncOptions */
198+ defaultGitInfo ?: typeof defaultDefaultGitInfo ;
199+ dir : string ;
200+ logDebug ?: ( message : string , step : GitStep ) => unknown ;
201+ logProgress ?: ( step : GitStep ) => unknown ;
202+ logger ?: ILogger ;
203+ /** userInfo from ICommitAndSyncOptions */
204+ userInfo ?: IGitUserInfos ;
205+ } ) {
206+ const { dir, logger, logProgress, logDebug, defaultGitInfo = defaultDefaultGitInfo , userInfo } = configs ;
207+ const { gitUserName, email } = userInfo ?? defaultGitInfo ;
208+
209+ const repoStartingState = await getGitRepositoryState ( dir , logger ) ;
210+ if ( repoStartingState . length === 0 || repoStartingState === '|DIRTY' ) {
211+ logProgress ?.( GitStep . PrepareSync ) ;
212+ logDebug ?.( `${ dir } repoStartingState: ${ repoStartingState } , ${ gitUserName } <${ email ?? defaultGitInfo . email } >` , GitStep . PrepareSync ) ;
213+ } else if ( repoStartingState === 'NOGIT' ) {
214+ throw new CantSyncGitNotInitializedError ( dir ) ;
215+ } else {
216+ // we may be in middle of a rebase, try fix that
217+ await continueRebase ( dir , gitUserName , email ?? defaultGitInfo . email , logger , repoStartingState ) ;
218+ }
219+ }
0 commit comments