internal async Task <IIpcResult> AddFileAsync(IDropItem dropItem, Func <string, bool> symlinkTester) { Contract.Requires(dropItem != null); // Check if the file is a symlink, only if the file exists on disk at this point; if it is a symlink, reject it outright. if (System.IO.File.Exists(dropItem.FullFilePath) && symlinkTester(dropItem.FullFilePath)) { return(new IpcResult(IpcResultStatus.ExecutionError, SymlinkAddErrorMessagePrefix + dropItem.FullFilePath)); } return(await WrapDropErrorsIntoIpcResult(async() => { IDropClient dropClient = await m_dropClientTask; AddFileResult result = await dropClient.AddFileAsync(dropItem); switch (result) { case AddFileResult.Associated: case AddFileResult.UploadedAndAssociated: case AddFileResult.SkippedAsDuplicate: return IpcResult.Success(I($"File '{dropItem.FullFilePath}' {result} under '{dropItem.RelativeDropPath}' in drop '{DropName}'.")); case AddFileResult.RegisterFileForBuildManifestFailure: return new IpcResult(IpcResultStatus.ExecutionError, $"Failure during BuildManifest Hash generation for File '{dropItem.FullFilePath}' {result} under '{dropItem.RelativeDropPath}' in drop '{DropName}'."); default: return new IpcResult(IpcResultStatus.ExecutionError, $"Unhandled drop result: {result}"); } })); }
internal async Task <IIpcResult> AddFileAsync(IDropItem dropItem, Func <string, bool> symlinkTester) { Contract.Requires(dropItem != null); // Check if the file is a symlink, only if the file exists on disk at this point; if it is a symlink, reject it outright. if (System.IO.File.Exists(dropItem.FullFilePath) && symlinkTester(dropItem.FullFilePath)) { return(new IpcResult(IpcResultStatus.ExecutionError, SymlinkAddErrorMessagePrefix + dropItem.FullFilePath)); } return(await WrapDropErrorsIntoIpcResult(async() => { IDropClient dropClient = await m_dropClientTask; AddFileResult result = await dropClient.AddFileAsync(dropItem); return IpcResult.Success(I($"File '{dropItem.FullFilePath}' {result} under '{dropItem.RelativeDropPath}' in drop '{DropName}'.")); })); }