From f0bd10ef6612233bdbf11fbf3825a58a6f9c6e75 Mon Sep 17 00:00:00 2001 From: Isaac Paul Date: Thu, 28 May 2026 22:24:48 -0400 Subject: [PATCH] Add install/uninstall safety check via --signature flag Automated-By: Claude Sonnet 4.6 --- Makefile | 28 +++++++++++++++++++++------- Sources/CodeMapper/main.swift | 9 +++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index ab1bd1f..e4f3801 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,27 @@ -PREFIX ?= $(HOME)/.local/bin +PREFIX ?= $(HOME)/.local/bin +TARGET := $(PREFIX)/CodeMapper +SIG := CODEMAPPER-SIGNATURE-izackp -.PHONY: build install uninstall +.PHONY: build install uninstall _check_existing build: swift build -c release -install: build - install -d $(PREFIX) - install .build/release/CodeMapper $(PREFIX)/CodeMapper +_check_existing: + @if [ -f "$(TARGET)" ]; then \ + GOT=$$("$(TARGET)" --signature 2>/dev/null || true); \ + if [ "$$GOT" != "$(SIG)" ]; then \ + if [ "$(FORCE)" != "1" ]; then \ + echo "ERROR: $(TARGET) exists but is not this CodeMapper build."; \ + echo " Pass FORCE=1 to override."; \ + exit 1; \ + fi; \ + fi \ + fi -uninstall: - rm -f $(PREFIX)/CodeMapper +install: build _check_existing + install -d $(PREFIX) + install .build/release/CodeMapper $(TARGET) + +uninstall: _check_existing + rm -f $(TARGET) diff --git a/Sources/CodeMapper/main.swift b/Sources/CodeMapper/main.swift index 8ca0027..2d99cc3 100644 --- a/Sources/CodeMapper/main.swift +++ b/Sources/CodeMapper/main.swift @@ -1,12 +1,15 @@ import Foundation import ArgumentParser +let buildSignature = "CODEMAPPER-SIGNATURE-izackp" + struct CodeMapper: ParsableCommand { static let configuration = CommandConfiguration( commandName: "CodeMapper", abstract: "Generate LLM-friendly architectural maps from Swift source files." ) + @Option(name: .long, help: "Root of the Swift package to analyze.") var sources: String @@ -103,4 +106,10 @@ struct CodeMapper: ParsableCommand { // Ignore SIGPIPE so LSP subprocess death returns an error instead of killing this process signal(SIGPIPE, SIG_IGN) + +if CommandLine.arguments.contains("--signature") { + print(buildSignature) + exit(0) +} + CodeMapper.main()