UNPKG

@aaronshaf/ger

Version:

Gerrit CLI and SDK - A modern CLI tool and TypeScript SDK for Gerrit Code Review, built with Effect-TS

65 lines (59 loc) 2.05 kB
import { Effect } from 'effect' import { type ApiError, GerritApiService } from '@/api/gerrit' interface RestoreOptions { message?: string xml?: boolean json?: boolean } /** * Restores an abandoned Gerrit change to NEW status. * * @param changeId - Change number or Change-ID to restore * @param options - Configuration options * @param options.message - Optional restoration message * @param options.xml - Whether to output in XML format for LLM consumption * @returns Effect that completes when the change is restored */ export const restoreCommand = ( changeId?: string, options: RestoreOptions = {}, ): Effect.Effect<void, ApiError, GerritApiService> => Effect.gen(function* () { const gerritApi = yield* GerritApiService if (!changeId || changeId.trim() === '') { console.error('✗ Change ID is required') console.error(' Usage: ger restore <change-id>') return } // Perform the restore - this returns the restored change info const change = yield* gerritApi.restoreChange(changeId, options.message) if (options.json) { console.log( JSON.stringify( { status: 'success', change_number: change._number, subject: change.subject, ...(options.message ? { message: options.message } : {}), }, null, 2, ), ) } else if (options.xml) { console.log(`<?xml version="1.0" encoding="UTF-8"?>`) console.log(`<restore_result>`) console.log(` <status>success</status>`) console.log(` <change_number>${change._number}</change_number>`) console.log(` <subject><![CDATA[${change.subject}]]></subject>`) if (options.message) { console.log(` <message><![CDATA[${options.message}]]></message>`) } console.log(`</restore_result>`) } else { console.log(`✓ Restored change ${change._number}: ${change.subject}`) if (options.message) { console.log(` Message: ${options.message}`) } } })