# HG changeset patch # User mpm@selenic.com # Date 1119411073 28800 # Node ID 28511fc21073d2ed5d18f33bfffebd6597d7e917 # Parent 0446f698d38e38b603131c71c207d3f69342e866 [PATCH] file seperator handling for the other 'OS' -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [PATCH] file seperator handling for the other 'OS' From: K Thananchayan The following patch maintains repo root relative source file names in canonical form (with '/' as file seperator). Mercurial calls os.path.join, os.path.normpath, os.path.walk that use platform's file seperator. This patch does not change seperator in these circumstances (except when the result refer to source files). manifest hash: 2fbb4cb0d3d0bc4f4de5c7c8803fb738072ec6c5 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCuNuBywK+sNU5EO8RAhAZAKCV8cz11+rdof9n1tHb0uDScF34GgCeITNi 4aVikToPXqXyReN9kFP5pnY= =xcV5 -----END PGP SIGNATURE----- diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -6,7 +6,7 @@ # of the GNU General Public License, incorporated herein by reference. import os, re, sys, signal -import fancyopts, ui, hg +import fancyopts, ui, hg, util from demandload import * demandload(globals(), "mdiff time hgweb traceback random signal errno") @@ -16,20 +16,20 @@ def filterfiles(filters, files): l = [ x for x in files if x in filters ] for t in filters: - if t and t[-1] != os.sep: t += os.sep + if t and t[-1] != "/": t += "/" l += [ x for x in files if x.startswith(t) ] return l def relfilter(repo, files): if os.getcwd() != repo.root: p = os.getcwd()[len(repo.root) + 1: ] - return filterfiles([p], files) + return filterfiles([util.pconvert(p)], files) return files def relpath(repo, args): if os.getcwd() != repo.root: p = os.getcwd()[len(repo.root) + 1: ] - return [ os.path.normpath(os.path.join(p, x)) for x in args ] + return [ util.pconvert(os.path.normpath(os.path.join(p, x))) for x in args ] return args def dodiff(ui, repo, path, files = None, node1 = None, node2 = None): diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -6,6 +6,7 @@ # of the GNU General Public License, incorporated herein by reference. import sys, struct, os +import util from revlog import * from demandload import * demandload(globals(), "re lock urllib urllib2 transaction time socket") @@ -389,7 +390,7 @@ class localrepository: l = file(self.wjoin(".hgignore")) for pat in l: if pat != "\n": - self.ignorelist.append(re.compile(pat[:-1])) + self.ignorelist.append(re.compile(util.pconvert(pat[:-1]))) except IOError: pass for pat in self.ignorelist: if pat.search(f): return True @@ -639,7 +640,7 @@ class localrepository: if ".hg" in subdirs: subdirs.remove(".hg") for f in files: - fn = os.path.join(d, f) + fn = util.pconvert(os.path.join(d, f)) try: s = os.stat(os.path.join(self.root, fn)) except: continue if fn in dc: diff --git a/mercurial/util.py b/mercurial/util.py new file mode 100644 --- /dev/null +++ b/mercurial/util.py @@ -0,0 +1,16 @@ +# util.py - utility functions and platform specfic implementations +# +# Copyright 2005 K. Thananchayan +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. + +import os + +if os.name == 'nt': + def pconvert(path): + return path.replace("\\", "/") +else: + def pconvert(path): + return path +