Skip to content
This repository has been archived by the owner on Aug 31, 2021. It is now read-only.

Commit

Permalink
improved handling multi auto deploy operations at once
Browse files Browse the repository at this point in the history
  • Loading branch information
mkloubert committed Jan 24, 2018
1 parent 3d9a612 commit 314687d
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 60 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
[![Share via Facebook](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Facebook.png)](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&quote=vscode-deploy-reloaded) [![Share via Twitter](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Twitter.png)](https://twitter.com/intent/tweet?source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&text=vscode-deploy-reloaded:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&via=mjkloubert) [![Share via Google+](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Google+.png)](https://plus.google.com/share?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded) [![Share via Pinterest](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Pinterest.png)](https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&media=https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo1.gif&description=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.) [![Share via Reddit](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Reddit.png)](https://www.reddit.com/submit?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&title=vscode-deploy-reloaded) [![Share via LinkedIn](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/LinkedIn.png)](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&title=vscode-deploy-reloaded&summary=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.&source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded) [![Share via Wordpress](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Wordpress.png)](https://wordpress.com/press-this.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&quote=vscode-deploy-reloaded&s=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.&i=https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo1.gif) [![Share via Email](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Email.png)](mailto:?subject=vscode-deploy-reloaded&body=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20'vs-deploy'%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded)


## 0.30.2 (January 24th, 2018; context menu)
## 0.30.3 (January 24th, 2018; context menu)

* can deploy, pull or delete files and folders from context menu now, s. [issue #15](https://github.com/mkloubert/vscode-deploy-reloaded/issues/15)

![Demo Deploy from context menu](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo17.gif)

* bug fixes:
* [Can I pull remote files into an empty folder?](https://github.com/mkloubert/vscode-deploy-reloaded/issues/13#issuecomment-357482420)
* [too many SFTP connections](https://github.com/mkloubert/vscode-deploy-reloaded/issues/14)

## 0.29.0 (January 11th, 2018; pull remote files)

Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "vscode-deploy-reloaded",
"displayName": "Deploy (Reloaded)",
"description": "Deploys files of a workspace to a destination.",
"version": "0.30.2",
"version": "0.30.3",
"publisher": "mkloubert",
"engines": {
"vscode": "^1.19.0"
Expand Down
43 changes: 0 additions & 43 deletions src/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -574,46 +574,3 @@ export async function deletePackage(pkg: deploy_packages.Package,
RELOADER,
deleteLocalFiles);
}

/**
* Handles a file for "remove on change" feature.
*
* @param {string} file The file to check.
*/
export async function removeOnChange(file: string) {
const ME: deploy_workspaces.Workspace = this;

if (ME.isInFinalizeState) {
return;
}

try {
const TARGETS = await deploy_helpers.applyFuncFor(
deploy_packages.findTargetsForFileOfPackage, ME
)(file,
(pkg) => pkg.removeOnChange,
(pkg) => true);

if (false === TARGETS) {
return;
}

for (const T of Enumerable.from(TARGETS).distinct(true)) {
const TARGET_NAME = deploy_targets.getTargetName(T);

try {
await ME.deleteFileIn(file, T, false);
}
catch (e) {
ME.showErrorMessage(
ME.t('DELETE.onChange.failed',
file, TARGET_NAME, e)
);
}
}
}
catch (e) {
deploy_log.CONSOLE
.trace(e, 'delete.removeOnChange()');
}
}
107 changes: 95 additions & 12 deletions src/packages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ export interface WithFastFileCheckSettings {
readonly fastFileCheck?: boolean;
}


const AUTO_DEPLOY_STATES: deploy_contracts.KeyValuePairs<deploy_targets.Target> = {};
const KEY_PACKAGE_USAGE = 'vscdrLastExecutedPackageActions';

/**
Expand Down Expand Up @@ -209,17 +209,19 @@ export async function autoDeployFile(file: string,
}

for (const T of Enumerable.from(TARGETS).distinct(true)) {
const TARGET_NAME = deploy_targets.getTargetName(T);

try {
await ME.deployFileTo(file, T);
}
catch (e) {
ME.showErrorMessage(
ME.t(errorMsgTemplate,
file, TARGET_NAME, e)
);
}
await invokeForAutoTargetOperation(T, async (target) => {
const TARGET_NAME = deploy_targets.getTargetName(target);

try {
await ME.deployFileTo(file, target);
}
catch (e) {
ME.showErrorMessage(
ME.t(errorMsgTemplate,
file, TARGET_NAME, e)
);
}
});
}
}
catch (e) {
Expand Down Expand Up @@ -481,6 +483,27 @@ export function getTargetsOfPackage(pkg: Package): deploy_targets.Target[] | fal
return targets;
}

async function invokeForAutoTargetOperation(target: deploy_targets.Target, action: (t: deploy_targets.Target) => any) {
if (!target) {
return;
}

await waitForOtherAutoTargetOperations(target);

try {
AUTO_DEPLOY_STATES[ target.__id ] = target;

if (action) {
await Promise.resolve(
action(target)
);
}
}
finally {
delete AUTO_DEPLOY_STATES[ target.__id ];
}
}

/**
* Import files from git to a package.
*
Expand Down Expand Up @@ -877,6 +900,51 @@ export async function importPackageFilesFromGit(pkg: Package, operation: deploy_
return files;
}

/**
* Handles a file for "remove on change" feature.
*
* @param {string} file The file to check.
*/
export async function removeOnChange(file: string) {
const ME: deploy_workspaces.Workspace = this;

if (ME.isInFinalizeState) {
return;
}

try {
const TARGETS = await deploy_helpers.applyFuncFor(
findTargetsForFileOfPackage, ME
)(file,
(pkg) => pkg.removeOnChange,
(pkg) => true);

if (false === TARGETS) {
return;
}

for (const T of Enumerable.from(TARGETS).distinct(true)) {
await invokeForAutoTargetOperation(T, async (target) => {
const TARGET_NAME = deploy_targets.getTargetName(target);

try {
await ME.deleteFileIn(file, target, false);
}
catch (e) {
ME.showErrorMessage(
ME.t('DELETE.onChange.failed',
file, TARGET_NAME, e)
);
}
});
}
}
catch (e) {
deploy_log.CONSOLE
.trace(e, 'delete.removeOnChange()');
}
}

/**
* Resets the package usage statistics.
*
Expand Down Expand Up @@ -950,3 +1018,18 @@ export async function showPackageQuickPick(context: vscode.ExtensionContext,
return selectedItem.action();
}
}

async function waitForOtherAutoTargetOperations(target: deploy_targets.Target) {
if (!target) {
return;
}

await deploy_helpers.waitWhile(() => {
return !deploy_helpers.isNullOrUndefined(
AUTO_DEPLOY_STATES[ target.__id ]
);
}, {
timeout: 60000,
timeUntilNextCheck: 250,
});
}
6 changes: 4 additions & 2 deletions src/workspaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3141,8 +3141,10 @@ export class Workspace extends deploy_objects.DisposableBase implements deploy_c

if (!deploy_helpers.isEmptyString(file)) {
if (!this.isFileIgnored(file)) {
await deploy_delete.removeOnChange
.apply(this, arguments);
await deploy_helpers.applyFuncFor(
deploy_packages.removeOnChange,
this
)(file);
}
}
}
Expand Down

0 comments on commit 314687d

Please sign in to comment.