diff --git a/src/main/java/dev/jbang/Settings.java b/src/main/java/dev/jbang/Settings.java index ae0b14be7..eca590bb6 100644 --- a/src/main/java/dev/jbang/Settings.java +++ b/src/main/java/dev/jbang/Settings.java @@ -56,7 +56,12 @@ public static Path getConfigDir(boolean init) { if (jd != null) { dir = Paths.get(jd); } else { - dir = Paths.get(System.getProperty("user.home")).resolve(".jbang"); + // On Windows, USERPROFILE is more reliable than user.home for non-ASCII + // usernames + String home = Util.isWindows() + ? System.getenv().getOrDefault("USERPROFILE", System.getProperty("user.home")) + : System.getProperty("user.home"); + dir = Paths.get(home).resolve(".jbang"); } if (init) diff --git a/src/main/java/dev/jbang/cli/Edit.java b/src/main/java/dev/jbang/cli/Edit.java index 7e9e9382c..a32ccece0 100644 --- a/src/main/java/dev/jbang/cli/Edit.java +++ b/src/main/java/dev/jbang/cli/Edit.java @@ -379,7 +379,17 @@ private static void setupEditor(Path editorBinPath, Path dataPath) throws IOExce } private static List findEditorsOnPath() { - return Arrays.stream(knownEditors).filter(e -> Util.searchPath(e) != null).collect(Collectors.toList()); + return Arrays.stream(knownEditors) + .filter(e -> Util.searchPath(e) != null) + .map(e -> { + Path found = Util.searchPath(e); + // On Windows, use the full path with extension so Git Bash can execute it + if (Util.isWindows() && found != null) { + return found.toString(); + } + return e; + }) + .collect(Collectors.toList()); } private static void showStartingMsg(String ed, boolean showConfig) { diff --git a/src/main/java/dev/jbang/dependencies/DependencyCache.java b/src/main/java/dev/jbang/dependencies/DependencyCache.java index 6e9687e38..dfcc41c57 100644 --- a/src/main/java/dev/jbang/dependencies/DependencyCache.java +++ b/src/main/java/dev/jbang/dependencies/DependencyCache.java @@ -140,6 +140,22 @@ public static List findDependenciesByHash(String depsHash) { public static void clear() { depCache = null; + // Also clear the dependency cache JSON file from disk + try { + Path cacheFile = Settings.getCacheDependencyFile(); + if (Files.exists(cacheFile)) { + Util.verboseMsg("Deleting dependency cache file: " + cacheFile); + Files.deleteIfExists(cacheFile); + } + // Also clear the depcache directory containing actual JARs + Path depCacheDir = Settings.getCacheDir(dev.jbang.Cache.CacheClass.deps); + if (Files.exists(depCacheDir)) { + Util.verboseMsg("Deleting dependency cache dir: " + depCacheDir); + Util.deletePath(depCacheDir, true); + } + } catch (IOException e) { + Util.errorMsg("Could not clear dependency cache files", e); + } } }