Skip to content

Commit

Permalink
feat(resolve): implement state becomes logic
Browse files Browse the repository at this point in the history
  • Loading branch information
ssube authored and bzlibby committed Aug 20, 2020
1 parent 2eba08e commit b18d6f3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 20 deletions.
54 changes: 35 additions & 19 deletions src/resolve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,25 +69,22 @@ export function resolveLabels(options: ResolveInput): ResolveResult {
const errors: Array<ErrorRecord> = [];

function checkLabelRules(label: BaseLabel) {
let isRemoved = false;
if (activeLabels.has(label.name)) {
for (const requiredLabel of label.requires) {
if (!activeLabels.has(requiredLabel.name)) {
if (activeLabels.delete(label.name)) {
changes.push({
cause: requiredLabel.name,
effect: ChangeVerb.REQUIRED,
label: label.name,
});
}
if (activeLabels.has(label.name) === false) {
return true;
}

isRemoved = true;
for (const requiredLabel of label.requires) {
if (!activeLabels.has(requiredLabel.name)) {
if (activeLabels.delete(label.name)) {
changes.push({
cause: requiredLabel.name,
effect: ChangeVerb.REQUIRED,
label: label.name,
});
}
}
}

if (isRemoved) {
return true;
return true;
}
}

for (const addedLabel of label.adds) {
Expand Down Expand Up @@ -137,7 +134,6 @@ export function resolveLabels(options: ResolveInput): ResolveResult {
});
}
} else {
// TODO: combine rules, but use state/value name
const combinedValue: BaseLabel = {
adds: [...state.adds, ...value.adds],
name,
Expand All @@ -146,11 +142,31 @@ export function resolveLabels(options: ResolveInput): ResolveResult {
requires: [...state.requires, ...value.requires],
};

if (!checkLabelRules(combinedValue)) {
if (checkLabelRules(combinedValue)) {
break;
}

// TODO: check becomes rules
for (const become of value.becomes) {
if (become.matches.every((l) => activeLabels.has(l.name))) {
checkLabelRules({
...combinedValue,
adds: become.adds,
removes: [...become.matches, ...become.removes],
requires: [],
});

if (activeLabels.delete(name)) {
changes.push({
cause: name,
effect: ChangeVerb.REMOVED,
label: name,
});
}

break;
}
}

activeValue = name;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export async function syncIssueLabels(options: SyncOptions): Promise<unknown> {
// TODO: prompt user to update this particular issue
const sameLabels = compareItems(issue.labels, labels) || changes.length === 0;
if (sameLabels === false && errors.length === 0) {
options.logger.info({ issue, labels }, 'updating issue');
options.logger.info({ changes, errors, issue, labels }, 'updating issue');
await options.remote.updateIssue({
...issue,
labels,
Expand Down

0 comments on commit b18d6f3

Please sign in to comment.