feat: setup git configurations when full clone

This commit is contained in:
Cheng Liu 2024-07-11 14:19:06 -07:00
parent 6ab94084ff
commit d445a4dce4
No known key found for this signature in database
GPG key ID: EEC8452F7DB85CD6

View file

@ -77,16 +77,17 @@ export class CloneCommand implements ICommand<ICloneCommandOptions> {
directory: directory directory: directory
}; };
const { full, skipGitConfig } = args;
terminal.writeLine('Initializing working directory...'); terminal.writeLine('Initializing working directory...');
const stopwatch: Stopwatch = Stopwatch.start(); const stopwatch: Stopwatch = Stopwatch.start();
if (args.full) { if (full) {
this._gitCloneService.fullClone(cloneOptions); this._gitCloneService.fullClone(cloneOptions);
return; } else {
this._gitCloneService.bloblessClone(cloneOptions);
} }
this._gitCloneService.bloblessClone(cloneOptions);
process.chdir(directory); process.chdir(directory);
const { profiles, isNoProfile } = await this._sparoProfileService.preprocessProfileArgs({ const { profiles, isNoProfile } = await this._sparoProfileService.preprocessProfileArgs({
@ -94,37 +95,39 @@ export class CloneCommand implements ICommand<ICloneCommandOptions> {
addProfilesFromArg: [] addProfilesFromArg: []
}); });
await this._GitSparseCheckoutService.ensureSkeletonExistAndUpdated(); if (!full) {
this._GitSparseCheckoutService.ensureSkeletonExistAndUpdated();
// check whether profile exist in local branch // check whether profile exist in local branch
if (!isNoProfile) { if (!isNoProfile) {
const targetProfileNames: Set<string> = new Set(profiles); const targetProfileNames: Set<string> = new Set(profiles);
const nonExistProfileNames: string[] = []; const nonExistProfileNames: string[] = [];
for (const targetProfileName of targetProfileNames) { for (const targetProfileName of targetProfileNames) {
if (!this._sparoProfileService.hasProfileInFS(targetProfileName)) { if (!this._sparoProfileService.hasProfileInFS(targetProfileName)) {
nonExistProfileNames.push(targetProfileName); nonExistProfileNames.push(targetProfileName);
}
}
if (nonExistProfileNames.length) {
throw new Error(
`Clone failed. The following profile(s) are missing in cloned repo: ${Array.from(
targetProfileNames
).join(', ')}`
);
} }
} }
if (nonExistProfileNames.length) { // Avoid redundant sync if no profile is given
throw new Error( if (!isNoProfile && profiles.size) {
`Clone failed. The following profile(s) are missing in cloned repo: ${Array.from( // sync local sparse checkout state with given profiles.
targetProfileNames await this._sparoProfileService.syncProfileState({
).join(', ')}` profiles: isNoProfile ? undefined : profiles
); });
} }
} }
// Avoid redundant sync if no profile is given
if (!isNoProfile && profiles.size) {
// sync local sparse checkout state with given profiles.
await this._sparoProfileService.syncProfileState({
profiles: isNoProfile ? undefined : profiles
});
}
// set recommended git config // set recommended git config
if (!args.skipGitConfig) { if (!skipGitConfig) {
terminal.writeLine(`Applying recommended configuration...`); terminal.writeLine(`Applying recommended configuration...`);
this._gitService.setRecommendConfig({ overwrite: true }); this._gitService.setRecommendConfig({ overwrite: true });
} }
@ -139,7 +142,7 @@ export class CloneCommand implements ICommand<ICloneCommandOptions> {
terminal.writeLine(' ' + Colorize.cyan(`cd ${directory}`)); terminal.writeLine(' ' + Colorize.cyan(`cd ${directory}`));
terminal.writeLine(); terminal.writeLine();
if (isNoProfile || profiles.size === 0) { if (!full && (isNoProfile || profiles.size === 0)) {
terminal.writeLine('Your next step is to choose a Sparo profile for checkout.'); terminal.writeLine('Your next step is to choose a Sparo profile for checkout.');
terminal.writeLine('To see available profiles in this repo:'); terminal.writeLine('To see available profiles in this repo:');
terminal.writeLine(' ' + Colorize.cyan('sparo list-profiles')); terminal.writeLine(' ' + Colorize.cyan('sparo list-profiles'));