@@ -7,7 +7,7 @@ import { minimatch } from 'minimatch';
77import chalk from 'chalk' ;
88import Conf from 'conf' ;
99import fetch from 'node-fetch' ;
10- import { API_BASE , BASE_URL , PROJECT_NAME , getHeaders , showDiskSpaceUsage , resolvePath } from '../commons.js' ;
10+ import { API_BASE , BASE_URL , PROJECT_NAME , getHeaders , showDiskSpaceUsage , resolvePath , resolveRemotePath } from '../commons.js' ;
1111import { formatDateTime , formatSize , getSystemEditor } from '../utils.js' ;
1212import inquirer from 'inquirer' ;
1313import { getAuthToken , getCurrentDirectory , getCurrentUserName } from './auth.js' ;
@@ -1263,7 +1263,7 @@ async function ensureRemoteDirectoryExists(remotePath) {
12631263 * @param {string[] } args - Command-line arguments (e.g., [localDir, remoteDir, --delete, -r]).
12641264 */
12651265export async function syncDirectory ( args = [ ] ) {
1266- const usageMessage = 'Usage: update <local_directory> <remote_directory> [--delete] [-r]' ;
1266+ const usageMessage = 'Usage: update <local_directory> <remote_directory> [--delete] [-r] [--overwrite] ' ;
12671267 if ( args . length < 2 ) {
12681268 console . log ( chalk . red ( usageMessage ) ) ;
12691269 return ;
@@ -1273,11 +1273,13 @@ export async function syncDirectory(args = []) {
12731273 let remoteDir = '' ;
12741274 let deleteFlag = '' ;
12751275 let recursiveFlag = false ;
1276+ let overwriteFlag = false ;
12761277 try {
12771278 localDir = await resolveLocalDirectory ( args [ 0 ] ) ;
1278- remoteDir = resolvePath ( getCurrentDirectory ( ) , args [ 1 ] ) ;
1279+ remoteDir = resolveRemotePath ( getCurrentDirectory ( ) , args [ 1 ] ) ;
12791280 deleteFlag = args . includes ( '--delete' ) ; // Whether to delete extra files
12801281 recursiveFlag = args . includes ( '-r' ) ; // Whether to recursively process subdirectories
1282+ overwriteFlag = args . includes ( '--overwrite' ) ;
12811283 } catch ( error ) {
12821284 console . error ( chalk . red ( error . message ) ) ;
12831285 console . log ( chalk . green ( usageMessage ) ) ;
@@ -1294,10 +1296,10 @@ export async function syncDirectory(args = []) {
12941296 }
12951297
12961298 // Step 2: Fetch remote directory contents
1297- const remoteFiles = await listRemoteFiles ( remoteDir ) ;
1299+ let remoteFiles = await listRemoteFiles ( remoteDir ) ;
12981300 if ( ! Array . isArray ( remoteFiles ) ) {
1299- console . error ( chalk . red ( 'Failed to fetch remote directory contents .') ) ;
1300- return ;
1301+ console . log ( chalk . yellow ( 'Remote directory is empty or does not exist. Continuing.. .') ) ;
1302+ remoteFiles = [ ] ;
13011303 }
13021304
13031305 // Step 3: List local files
@@ -1311,30 +1313,34 @@ export async function syncDirectory(args = []) {
13111313 // Step 5: Handle conflicts (if any)
13121314 const conflicts = findConflicts ( toUpload , toDownload ) ;
13131315 if ( conflicts . length > 0 ) {
1314-
1315- console . log ( chalk . yellow ( 'The following files have conflicts:' ) ) ;
1316- conflicts . forEach ( file => console . log ( chalk . dim ( `- ${ file } ` ) ) ) ;
1317-
1318- const { resolve } = await inquirer . prompt ( [
1319- {
1320- type : 'list' ,
1321- name : 'resolve' ,
1322- message : 'How would you like to resolve conflicts?' ,
1323- choices : [
1324- { name : 'Keep local version' , value : 'local' } ,
1325- { name : 'Keep remote version' , value : 'remote' } ,
1326- { name : 'Skip conflicting files' , value : 'skip' }
1327- ]
1328- }
1329- ] ) ;
1330-
1331- if ( resolve === 'local' ) {
1316+ if ( overwriteFlag ) {
1317+ console . log ( chalk . yellow ( 'Overwriting existing files with local version.' ) ) ;
13321318 filteredToDownload = filteredToDownload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1333- } else if ( resolve === 'remote' ) {
1334- filteredToUpload = filteredToUpload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
13351319 } else {
1336- filteredToUpload = filteredToUpload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1337- filteredToDownload = filteredToDownload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1320+ console . log ( chalk . yellow ( 'The following files have conflicts:' ) ) ;
1321+ conflicts . forEach ( file => console . log ( chalk . dim ( `- ${ file } ` ) ) ) ;
1322+
1323+ const { resolve } = await inquirer . prompt ( [
1324+ {
1325+ type : 'list' ,
1326+ name : 'resolve' ,
1327+ message : 'How would you like to resolve conflicts?' ,
1328+ choices : [
1329+ { name : 'Keep local version' , value : 'local' } ,
1330+ { name : 'Keep remote version' , value : 'remote' } ,
1331+ { name : 'Skip conflicting files' , value : 'skip' }
1332+ ]
1333+ }
1334+ ] ) ;
1335+
1336+ if ( resolve === 'local' ) {
1337+ filteredToDownload = filteredToDownload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1338+ } else if ( resolve === 'remote' ) {
1339+ filteredToUpload = filteredToUpload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1340+ } else {
1341+ filteredToUpload = filteredToUpload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1342+ filteredToDownload = filteredToDownload . filter ( file => ! conflicts . includes ( file . relativePath ) ) ;
1343+ }
13381344 }
13391345 }
13401346
0 commit comments