comparison src/org/tmatesoft/hg/util/Path.java @ 634:170b6ecc890e

Issue 46: Files with backslashes (legal on Linux) cause troubles
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 06 Jun 2013 14:21:11 +0200
parents fedc54356091
children 5d8798772cca
comparison
equal deleted inserted replaced
633:e66788de0cf8 634:170b6ecc890e
1 /* 1 /*
2 * Copyright (c) 2011-2012 TMate Software Ltd 2 * Copyright (c) 2011-2013 TMate Software Ltd
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by 5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License. 6 * the Free Software Foundation; version 2 of the License.
7 * 7 *
18 18
19 import java.util.Collection; 19 import java.util.Collection;
20 import java.util.Iterator; 20 import java.util.Iterator;
21 import java.util.NoSuchElementException; 21 import java.util.NoSuchElementException;
22 22
23 import org.tmatesoft.hg.internal.Internals;
24
23 /** 25 /**
24 * Identify repository files (not String nor io.File). Convenient for pattern matching. Memory-friendly. 26 * Identify repository files (not String nor io.File). Convenient for pattern matching. Memory-friendly.
25 * 27 *
26 * @author Artem Tikhomirov 28 * @author Artem Tikhomirov
27 * @author TMate Software Ltd. 29 * @author TMate Software Ltd.
146 assert p1.startsWith(p2); 148 assert p1.startsWith(p2);
147 String p1Tail= p1.substring(p2.length()); 149 String p1Tail= p1.substring(p2.length());
148 int slashLoc = p1Tail.indexOf('/'); 150 int slashLoc = p1Tail.indexOf('/');
149 return slashLoc == -1 || slashLoc == p1Tail.length() - 1; 151 return slashLoc == -1 || slashLoc == p1Tail.length() - 1;
150 } 152 }
153
154 private static final boolean runningOnWindows;
155
156 static {
157 runningOnWindows = Internals.runningOnWindows();
158 }
151 159
152 public static Path create(CharSequence path) { 160 public static Path create(CharSequence path) {
153 if (path == null) { 161 if (path == null) {
154 throw new IllegalArgumentException(); 162 throw new IllegalArgumentException();
155 } 163 }
156 if (path instanceof Path) { 164 if (path instanceof Path) {
157 Path o = (Path) path; 165 Path o = (Path) path;
158 return o; 166 return o;
159 } 167 }
160 String p = path.toString(); 168 String p = path.toString();
161 if (p.indexOf('\\') != -1) { 169 if (runningOnWindows && p.indexOf('\\') != -1) {
162 throw new IllegalArgumentException(String.format("Path '%s' contains illegal char at %d", p, p.indexOf('\\'))); 170 throw new IllegalArgumentException(String.format("Path '%s' contains illegal char at %d", p, p.indexOf('\\')));
163 } 171 }
164 Path rv = new Path(p); 172 Path rv = new Path(p);
165 return rv; 173 return rv;
166 } 174 }