[PATCH] convert: Make P4 conversion cope with keywords, binary files and symbolic links

Frank Kingswood frank at kingswood-consulting.co.uk
Sat Apr 4 06:20:33 CDT 2009


# HG changeset patch
# User Frank Kingswood <frank at kingswood-consulting.co.uk>
# Date 1238842989 -3600
# Node ID 0670df1e3f5de0b3dc35cb853ad203a6ac2206a4
# Parent  f5d4f59a9996ea0a4e7571f0a30596e4917a70ed
convert: Make P4 conversion cope with keywords, binary files and symbolic links.
Now handles errors from p4 during conversion more gracefully.
If keyword expansion is enabled in a P4 file then keywords will be unexpanded in hg.
Added testcase for p4 filetypes and keyword (un)expansion.
Set executable bit on test-convert-p4.

diff --git a/hgext/convert/p4.py b/hgext/convert/p4.py
--- a/hgext/convert/p4.py
+++ b/hgext/convert/p4.py
@@ -12,6 +12,7 @@
 
 from common import commit, converter_source, checktool
 import marshal
+import re
 
 def loaditer(f):
     "Yield the dictionary objects generated by p4"
@@ -40,6 +41,9 @@
         self.encoding = "latin_1"
         self.depotname = {}           # mapping from local name to depot name
         self.modecache = {}
+        self.re_type = re.compile("([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)(\+\w+)?$")
+        self.re_keywords = re.compile(r"\$(Id|Header|Date|DateTime|Change|File|Revision|Author):[^$\n]*\$")
+        self.re_keywords_old = re.compile("\$(Id|Header):[^$\n]*\$")
 
         self._parse(ui, path)
 
@@ -143,22 +147,44 @@
         stdout = util.popen(cmd)
 
         mode = None
-        data = ""
+        contents = ""
+        keywords = None
 
         for d in loaditer(stdout):
-            if d["code"] == "stat":
-                if "+x" in d["type"]:
-                    mode = "x"
-                else:
+            code = d["code"]
+            data = d.get("data")
+
+            if code == "error":
+                raise IOError(d["generic"], data)
+
+            elif code == "stat":
+                p4type = self.re_type.match(d["type"])
+                if p4type:
                     mode = ""
-            elif d["code"] == "text":
-                data += d["data"]
+                    flags = (p4type.group(1) or "") + (p4type.group(3) or "")
+                    if "x" in flags:
+                        mode = "x"
+                    if p4type.group(2) == "symlink":
+                        mode = "l"
+                    if "ko" in flags:
+                        keywords = self.re_keywords_old
+                    elif "k" in flags:
+                        keywords = self.re_keywords
+
+            elif code == "text" or code == "binary":
+                contents += data
 
         if mode is None:
-            raise IOError()
+            raise IOError(0, "bad stat")
 
         self.modecache[(name, rev)] = mode
-        return data
+
+        if keywords:
+            contents = keywords.sub("$\\1$", contents)
+        if mode == "l" and contents.endswith("\n"):
+            contents = contents[:-1]
+
+        return contents
 
     def getmode(self, name, rev):
         return self.modecache[(name, rev)]
diff --git a/tests/test-convert-p4 b/tests/test-convert-p4
old mode 100644
new mode 100755
diff --git a/tests/test-convert-p4-filetypes b/tests/test-convert-p4-filetypes
new file mode 100755
--- /dev/null
+++ b/tests/test-convert-p4-filetypes
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" p4 execbit symlink || exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert = " >> $HGRCPATH
+
+echo % create p4 depot
+export P4ROOT=$PWD/depot
+export P4AUDIT=$P4ROOT/audit
+export P4JOURNAL=$P4ROOT/journal
+export P4LOG=$P4ROOT/log
+export P4PORT=localhost:16661
+export P4DEBUG=1
+export P4CHARSET=utf8
+
+echo % start the p4 server
+[ ! -d $P4ROOT ] && mkdir $P4ROOT
+p4d -f -J off -xi >$P4ROOT/stdout 2>$P4ROOT/stderr
+p4d -f -J off >$P4ROOT/stdout 2>$P4ROOT/stderr &
+trap "echo % stop the p4 server ; p4 admin stop" EXIT
+
+# wait for the server to initialize
+while ! p4 ; do
+   sleep 1
+done >/dev/null 2>/dev/null
+
+echo % create a client spec
+export P4CLIENT=hg-p4-import
+DEPOTPATH=//depot/test-mercurial-import/...
+p4 client -o | sed '/^View:/,$ d' >p4client
+echo View: >>p4client
+echo " $DEPOTPATH //$P4CLIENT/..." >>p4client
+p4 client -i <p4client
+
+echo % populate the depot
+TYPES="text binary symlink apple resource unicode utf16"
+TYPES="$TYPES text+m text+w text+x text+k text+kx text+ko text+l text+C text+D text+F text+S text+S2"
+TYPES="$TYPES binary+k binary+x binary+kx symlink+k"
+TYPES="$TYPES ctext cxtext ktext kxtext ltext tempobj ubinary uresource uxbinary xbinary xltext xtempobj xtext xunicode xutf16"
+for T in $TYPES ; do
+   case $T in
+      apple)
+	 ;;
+      symlink*)
+         echo "this is target $T" >target_$T
+         ln -s target_$T file_$T
+         p4 add target_$T
+         p4 add -t $T file_$T
+         ;;
+      binary*)
+         echo -n "this is $T" >file_$T
+         p4 add -t $T file_$T
+         ;;
+      *)
+         echo "this is $T" >file_$T
+         p4 add -t $T file_$T
+         ;;
+   esac
+done
+p4 submit -d initial
+
+echo % test keyword expansion
+p4 edit file_* target_*
+for T in $TYPES ; do
+   echo '$Id$'       >>file_$T
+   echo '$Header$'   >>file_$T
+   echo '$Date$'     >>file_$T
+   echo '$DateTime$' >>file_$T
+   echo '$Change$'   >>file_$T
+   echo '$File$'     >>file_$T
+   echo '$Revision$' >>file_$T
+   echo '$Header$$Header$Header$' >>file_$T
+done
+
+ln -s 'target_$Header$' crazy_symlink+k
+p4 add -t symlink+k crazy_symlink+k
+
+p4 submit -d keywords
+
+echo % check keywords in p4
+grep -H Header file_*
+
+echo % convert
+hg convert -s p4 $DEPOTPATH dst
+hg -R dst log --template 'rev=#rev# desc="#desc#" tags="#tags#" files="#files#"\n'
+
+echo % revision 0
+hg -R dst update 0
+head dst/file_* | cat -v
+
+echo
+echo % revision 1
+hg -R dst update 1
+head dst/file_* | cat -v
+echo
+echo % crazy_symlink
+readlink crazy_symlink+k
+readlink dst/crazy_symlink+k
+
diff --git a/tests/test-convert-p4-filetypes.out b/tests/test-convert-p4-filetypes.out
new file mode 100644
--- /dev/null
+++ b/tests/test-convert-p4-filetypes.out
@@ -0,0 +1,744 @@
+% create p4 depot
+% start the p4 server
+% create a client spec
+Client hg-p4-import saved.
+% populate the depot
+//depot/test-mercurial-import/file_text#1 - opened for add
+//depot/test-mercurial-import/file_binary#1 - opened for add
+//depot/test-mercurial-import/target_symlink#1 - opened for add
+//depot/test-mercurial-import/file_symlink#1 - opened for add
+//depot/test-mercurial-import/file_resource#1 - opened for add
+//depot/test-mercurial-import/file_unicode#1 - opened for add
+//depot/test-mercurial-import/file_utf16#1 - opened for add
+//depot/test-mercurial-import/file_text+m#1 - opened for add
+//depot/test-mercurial-import/file_text+w#1 - opened for add
+//depot/test-mercurial-import/file_text+x#1 - opened for add
+//depot/test-mercurial-import/file_text+k#1 - opened for add
+//depot/test-mercurial-import/file_text+kx#1 - opened for add
+//depot/test-mercurial-import/file_text+ko#1 - opened for add
+//depot/test-mercurial-import/file_text+l#1 - opened for add
+//depot/test-mercurial-import/file_text+C#1 - opened for add
+//depot/test-mercurial-import/file_text+D#1 - opened for add
+//depot/test-mercurial-import/file_text+F#1 - opened for add
+//depot/test-mercurial-import/file_text+S#1 - opened for add
+//depot/test-mercurial-import/file_text+S2#1 - opened for add
+//depot/test-mercurial-import/file_binary+k#1 - opened for add
+//depot/test-mercurial-import/file_binary+x#1 - opened for add
+//depot/test-mercurial-import/file_binary+kx#1 - opened for add
+//depot/test-mercurial-import/target_symlink+k#1 - opened for add
+//depot/test-mercurial-import/file_symlink+k#1 - opened for add
+//depot/test-mercurial-import/file_ctext#1 - opened for add
+//depot/test-mercurial-import/file_cxtext#1 - opened for add
+//depot/test-mercurial-import/file_ktext#1 - opened for add
+//depot/test-mercurial-import/file_kxtext#1 - opened for add
+//depot/test-mercurial-import/file_ltext#1 - opened for add
+//depot/test-mercurial-import/file_tempobj#1 - opened for add
+//depot/test-mercurial-import/file_ubinary#1 - opened for add
+//depot/test-mercurial-import/file_uresource#1 - opened for add
+//depot/test-mercurial-import/file_uxbinary#1 - opened for add
+//depot/test-mercurial-import/file_xbinary#1 - opened for add
+//depot/test-mercurial-import/file_xltext#1 - opened for add
+//depot/test-mercurial-import/file_xtempobj#1 - opened for add
+//depot/test-mercurial-import/file_xtext#1 - opened for add
+//depot/test-mercurial-import/file_xunicode#1 - opened for add
+//depot/test-mercurial-import/file_xutf16#1 - opened for add
+Submitting change 1.
+Locking 39 files ...
+add //depot/test-mercurial-import/file_binary#1
+add //depot/test-mercurial-import/file_binary+k#1
+add //depot/test-mercurial-import/file_binary+kx#1
+add //depot/test-mercurial-import/file_binary+x#1
+add //depot/test-mercurial-import/file_ctext#1
+add //depot/test-mercurial-import/file_cxtext#1
+add //depot/test-mercurial-import/file_ktext#1
+add //depot/test-mercurial-import/file_kxtext#1
+add //depot/test-mercurial-import/file_ltext#1
+add //depot/test-mercurial-import/file_resource#1
+add //depot/test-mercurial-import/file_symlink#1
+add //depot/test-mercurial-import/file_symlink+k#1
+add //depot/test-mercurial-import/file_tempobj#1
+add //depot/test-mercurial-import/file_text#1
+add //depot/test-mercurial-import/file_text+C#1
+add //depot/test-mercurial-import/file_text+D#1
+add //depot/test-mercurial-import/file_text+F#1
+add //depot/test-mercurial-import/file_text+S#1
+add //depot/test-mercurial-import/file_text+S2#1
+add //depot/test-mercurial-import/file_text+k#1
+add //depot/test-mercurial-import/file_text+ko#1
+add //depot/test-mercurial-import/file_text+kx#1
+add //depot/test-mercurial-import/file_text+l#1
+add //depot/test-mercurial-import/file_text+m#1
+add //depot/test-mercurial-import/file_text+w#1
+add //depot/test-mercurial-import/file_text+x#1
+add //depot/test-mercurial-import/file_ubinary#1
+add //depot/test-mercurial-import/file_unicode#1
+add //depot/test-mercurial-import/file_uresource#1
+add //depot/test-mercurial-import/file_utf16#1
+add //depot/test-mercurial-import/file_uxbinary#1
+add //depot/test-mercurial-import/file_xbinary#1
+add //depot/test-mercurial-import/file_xltext#1
+add //depot/test-mercurial-import/file_xtempobj#1
+add //depot/test-mercurial-import/file_xtext#1
+add //depot/test-mercurial-import/file_xunicode#1
+add //depot/test-mercurial-import/file_xutf16#1
+add //depot/test-mercurial-import/target_symlink#1
+add //depot/test-mercurial-import/target_symlink+k#1
+Change 1 submitted.
+//depot/test-mercurial-import/file_binary+k#1 - refreshing
+//depot/test-mercurial-import/file_binary+kx#1 - refreshing
+//depot/test-mercurial-import/file_ktext#1 - refreshing
+//depot/test-mercurial-import/file_kxtext#1 - refreshing
+//depot/test-mercurial-import/file_symlink+k#1 - refreshing
+//depot/test-mercurial-import/file_text+k#1 - refreshing
+//depot/test-mercurial-import/file_text+ko#1 - refreshing
+//depot/test-mercurial-import/file_text+kx#1 - refreshing
+% test keyword expansion
+//depot/test-mercurial-import/file_binary#1 - opened for edit
+//depot/test-mercurial-import/file_binary+k#1 - opened for edit
+//depot/test-mercurial-import/file_binary+kx#1 - opened for edit
+//depot/test-mercurial-import/file_binary+x#1 - opened for edit
+//depot/test-mercurial-import/file_ctext#1 - opened for edit
+//depot/test-mercurial-import/file_cxtext#1 - opened for edit
+//depot/test-mercurial-import/file_ktext#1 - opened for edit
+//depot/test-mercurial-import/file_kxtext#1 - opened for edit
+//depot/test-mercurial-import/file_ltext#1 - opened for edit
+//depot/test-mercurial-import/file_resource#1 - opened for edit
+//depot/test-mercurial-import/file_symlink#1 - opened for edit
+//depot/test-mercurial-import/file_symlink+k#1 - opened for edit
+//depot/test-mercurial-import/file_tempobj#1 - opened for edit
+//depot/test-mercurial-import/file_text#1 - opened for edit
+//depot/test-mercurial-import/file_text+C#1 - opened for edit
+//depot/test-mercurial-import/file_text+D#1 - opened for edit
+//depot/test-mercurial-import/file_text+F#1 - opened for edit
+//depot/test-mercurial-import/file_text+S#1 - opened for edit
+//depot/test-mercurial-import/file_text+S2#1 - opened for edit
+//depot/test-mercurial-import/file_text+k#1 - opened for edit
+//depot/test-mercurial-import/file_text+ko#1 - opened for edit
+//depot/test-mercurial-import/file_text+kx#1 - opened for edit
+//depot/test-mercurial-import/file_text+l#1 - opened for edit
+//depot/test-mercurial-import/file_text+m#1 - opened for edit
+//depot/test-mercurial-import/file_text+w#1 - opened for edit
+//depot/test-mercurial-import/file_text+x#1 - opened for edit
+//depot/test-mercurial-import/file_ubinary#1 - opened for edit
+//depot/test-mercurial-import/file_unicode#1 - opened for edit
+//depot/test-mercurial-import/file_uresource#1 - opened for edit
+//depot/test-mercurial-import/file_utf16#1 - opened for edit
+//depot/test-mercurial-import/file_uxbinary#1 - opened for edit
+//depot/test-mercurial-import/file_xbinary#1 - opened for edit
+//depot/test-mercurial-import/file_xltext#1 - opened for edit
+//depot/test-mercurial-import/file_xtempobj#1 - opened for edit
+//depot/test-mercurial-import/file_xtext#1 - opened for edit
+//depot/test-mercurial-import/file_xunicode#1 - opened for edit
+//depot/test-mercurial-import/file_xutf16#1 - opened for edit
+//depot/test-mercurial-import/target_symlink#1 - opened for edit
+//depot/test-mercurial-import/target_symlink+k#1 - opened for edit
+//depot/test-mercurial-import/crazy_symlink+k#1 - opened for add
+Submitting change 2.
+Locking 40 files ...
+add //depot/test-mercurial-import/crazy_symlink+k#1
+edit //depot/test-mercurial-import/file_binary#2
+edit //depot/test-mercurial-import/file_binary+k#2
+edit //depot/test-mercurial-import/file_binary+kx#2
+edit //depot/test-mercurial-import/file_binary+x#2
+edit //depot/test-mercurial-import/file_ctext#2
+edit //depot/test-mercurial-import/file_cxtext#2
+edit //depot/test-mercurial-import/file_ktext#2
+edit //depot/test-mercurial-import/file_kxtext#2
+edit //depot/test-mercurial-import/file_ltext#2
+edit //depot/test-mercurial-import/file_resource#2
+edit //depot/test-mercurial-import/file_symlink#2
+edit //depot/test-mercurial-import/file_symlink+k#2
+edit //depot/test-mercurial-import/file_tempobj#2
+edit //depot/test-mercurial-import/file_text#2
+edit //depot/test-mercurial-import/file_text+C#2
+edit //depot/test-mercurial-import/file_text+D#2
+edit //depot/test-mercurial-import/file_text+F#2
+edit //depot/test-mercurial-import/file_text+S#2
+edit //depot/test-mercurial-import/file_text+S2#2
+edit //depot/test-mercurial-import/file_text+k#2
+edit //depot/test-mercurial-import/file_text+ko#2
+edit //depot/test-mercurial-import/file_text+kx#2
+edit //depot/test-mercurial-import/file_text+l#2
+edit //depot/test-mercurial-import/file_text+m#2
+edit //depot/test-mercurial-import/file_text+w#2
+edit //depot/test-mercurial-import/file_text+x#2
+edit //depot/test-mercurial-import/file_ubinary#2
+edit //depot/test-mercurial-import/file_unicode#2
+edit //depot/test-mercurial-import/file_uresource#2
+edit //depot/test-mercurial-import/file_utf16#2
+edit //depot/test-mercurial-import/file_uxbinary#2
+edit //depot/test-mercurial-import/file_xbinary#2
+edit //depot/test-mercurial-import/file_xltext#2
+edit //depot/test-mercurial-import/file_xtempobj#2
+edit //depot/test-mercurial-import/file_xtext#2
+edit //depot/test-mercurial-import/file_xunicode#2
+edit //depot/test-mercurial-import/file_xutf16#2
+edit //depot/test-mercurial-import/target_symlink#2
+edit //depot/test-mercurial-import/target_symlink+k#2
+Change 2 submitted.
+//depot/test-mercurial-import/crazy_symlink+k#1 - refreshing
+//depot/test-mercurial-import/file_binary+k#2 - refreshing
+//depot/test-mercurial-import/file_binary+kx#2 - refreshing
+//depot/test-mercurial-import/file_ktext#2 - refreshing
+//depot/test-mercurial-import/file_kxtext#2 - refreshing
+//depot/test-mercurial-import/file_symlink+k#2 - refreshing
+//depot/test-mercurial-import/file_text+k#2 - refreshing
+//depot/test-mercurial-import/file_text+ko#2 - refreshing
+//depot/test-mercurial-import/file_text+kx#2 - refreshing
+% check keywords in p4
+file_apple:$Header$
+file_apple:$Header$$Header$Header$
+file_binary:$Header$
+file_binary:$Header$$Header$Header$
+file_binary+k:$Header: //depot/test-mercurial-import/file_binary+k#2 $
+file_binary+k:$Header: //depot/test-mercurial-import/file_binary+k#2 $$Header: //depot/test-mercurial-import/file_binary+k#2 $Header$
+file_binary+kx:$Header: //depot/test-mercurial-import/file_binary+kx#2 $
+file_binary+kx:$Header: //depot/test-mercurial-import/file_binary+kx#2 $$Header: //depot/test-mercurial-import/file_binary+kx#2 $Header$
+file_binary+x:$Header$
+file_binary+x:$Header$$Header$Header$
+file_ctext:$Header$
+file_ctext:$Header$$Header$Header$
+file_cxtext:$Header$
+file_cxtext:$Header$$Header$Header$
+file_ktext:$Header: //depot/test-mercurial-import/file_ktext#2 $
+file_ktext:$Header: //depot/test-mercurial-import/file_ktext#2 $$Header: //depot/test-mercurial-import/file_ktext#2 $Header$
+file_kxtext:$Header: //depot/test-mercurial-import/file_kxtext#2 $
+file_kxtext:$Header: //depot/test-mercurial-import/file_kxtext#2 $$Header: //depot/test-mercurial-import/file_kxtext#2 $Header$
+file_ltext:$Header$
+file_ltext:$Header$$Header$Header$
+file_resource:$Header$
+file_resource:$Header$$Header$Header$
+file_symlink:$Header$
+file_symlink:$Header$$Header$Header$
+file_symlink+k:$Header$
+file_symlink+k:$Header$$Header$Header$
+file_tempobj:$Header$
+file_tempobj:$Header$$Header$Header$
+file_text:$Header$
+file_text:$Header$$Header$Header$
+file_text+C:$Header$
+file_text+C:$Header$$Header$Header$
+file_text+D:$Header$
+file_text+D:$Header$$Header$Header$
+file_text+F:$Header$
+file_text+F:$Header$$Header$Header$
+file_text+S:$Header$
+file_text+S:$Header$$Header$Header$
+file_text+S2:$Header$
+file_text+S2:$Header$$Header$Header$
+file_text+k:$Header: //depot/test-mercurial-import/file_text+k#2 $
+file_text+k:$Header: //depot/test-mercurial-import/file_text+k#2 $$Header: //depot/test-mercurial-import/file_text+k#2 $Header$
+file_text+ko:$Header: //depot/test-mercurial-import/file_text+ko#2 $
+file_text+ko:$Header: //depot/test-mercurial-import/file_text+ko#2 $$Header: //depot/test-mercurial-import/file_text+ko#2 $Header$
+file_text+kx:$Header: //depot/test-mercurial-import/file_text+kx#2 $
+file_text+kx:$Header: //depot/test-mercurial-import/file_text+kx#2 $$Header: //depot/test-mercurial-import/file_text+kx#2 $Header$
+file_text+l:$Header$
+file_text+l:$Header$$Header$Header$
+file_text+m:$Header$
+file_text+m:$Header$$Header$Header$
+file_text+w:$Header$
+file_text+w:$Header$$Header$Header$
+file_text+x:$Header$
+file_text+x:$Header$$Header$Header$
+file_ubinary:$Header$
+file_ubinary:$Header$$Header$Header$
+file_unicode:$Header$
+file_unicode:$Header$$Header$Header$
+file_uresource:$Header$
+file_uresource:$Header$$Header$Header$
+file_utf16:$Header$
+file_utf16:$Header$$Header$Header$
+file_uxbinary:$Header$
+file_uxbinary:$Header$$Header$Header$
+file_xbinary:$Header$
+file_xbinary:$Header$$Header$Header$
+file_xltext:$Header$
+file_xltext:$Header$$Header$Header$
+file_xtempobj:$Header$
+file_xtempobj:$Header$$Header$Header$
+file_xtext:$Header$
+file_xtext:$Header$$Header$Header$
+file_xunicode:$Header$
+file_xunicode:$Header$$Header$Header$
+file_xutf16:$Header$
+file_xutf16:$Header$$Header$Header$
+% convert
+initializing destination dst repository
+reading p4 views
+collecting p4 changelists
+1 initial
+2 keywords
+scanning source...
+sorting...
+converting...
+1 initial
+0 keywords
+rev=1 desc="keywords" tags="tip" files="crazy_symlink+k file_binary file_binary+k file_binary+kx file_binary+x file_ctext file_cxtext file_ktext file_kxtext file_ltext file_resource file_text file_text+C file_text+D file_text+F file_text+S file_text+S2 file_text+k file_text+ko file_text+kx file_text+l file_text+m file_text+w file_text+x file_ubinary file_unicode file_uresource file_utf16 file_uxbinary file_xbinary file_xltext file_xtext file_xunicode file_xutf16 target_symlink target_symlink+k"
+rev=0 desc="initial" tags="" files="file_binary file_binary+k file_binary+kx file_binary+x file_ctext file_cxtext file_ktext file_kxtext file_ltext file_resource file_symlink file_symlink+k file_text file_text+C file_text+D file_text+F file_text+S2 file_text+k file_text+ko file_text+kx file_text+l file_text+m file_text+w file_text+x file_ubinary file_unicode file_uresource file_utf16 file_uxbinary file_xbinary file_xltext file_xtext file_xunicode file_xutf16 target_symlink target_symlink+k"
+% revision 0
+36 files updated, 0 files merged, 0 files removed, 0 files unresolved
+==> dst/file_binary <==
+this is binary
+==> dst/file_binary+k <==
+this is binary+k
+==> dst/file_binary+kx <==
+this is binary+kx
+==> dst/file_binary+x <==
+this is binary+x
+==> dst/file_ctext <==
+this is ctext
+
+==> dst/file_cxtext <==
+this is cxtext
+
+==> dst/file_ktext <==
+this is ktext
+
+==> dst/file_kxtext <==
+this is kxtext
+
+==> dst/file_ltext <==
+this is ltext
+
+==> dst/file_resource <==
+this is resource
+
+==> dst/file_symlink <==
+this is target symlink
+
+==> dst/file_symlink+k <==
+this is target symlink+k
+
+==> dst/file_text <==
+this is text
+
+==> dst/file_text+C <==
+this is text+C
+
+==> dst/file_text+D <==
+this is text+D
+
+==> dst/file_text+F <==
+this is text+F
+
+==> dst/file_text+S2 <==
+this is text+S2
+
+==> dst/file_text+k <==
+this is text+k
+
+==> dst/file_text+ko <==
+this is text+ko
+
+==> dst/file_text+kx <==
+this is text+kx
+
+==> dst/file_text+l <==
+this is text+l
+
+==> dst/file_text+m <==
+this is text+m
+
+==> dst/file_text+w <==
+this is text+w
+
+==> dst/file_text+x <==
+this is text+x
+
+==> dst/file_ubinary <==
+this is ubinary
+
+==> dst/file_unicode <==
+this is unicode
+
+==> dst/file_uresource <==
+this is uresource
+
+==> dst/file_utf16 <==
+M-fM-!M-4M-gM-^MM-)M-fM-$M- M-bM-^AM-3M-gM-^QM-5M-cM-^EM-&M-`M-(M-6
+==> dst/file_uxbinary <==
+this is uxbinary
+
+==> dst/file_xbinary <==
+this is xbinary
+
+==> dst/file_xltext <==
+this is xltext
+
+==> dst/file_xtext <==
+this is xtext
+
+==> dst/file_xunicode <==
+this is xunicode
+
+==> dst/file_xutf16 <==
+M-fM-!M-4M-gM-^MM-)M-fM-$M- M-bM-^AM-3M-gM-^UM-8M-fM-^YM-4M-cM-^XM-1
+% revision 1
+36 files updated, 0 files merged, 0 files removed, 0 files unresolved
+==> dst/file_binary <==
+this is binary$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+k <==
+this is binary+k$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+kx <==
+this is binary+kx$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+x <==
+this is binary+x$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ctext <==
+this is ctext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_cxtext <==
+this is cxtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ktext <==
+this is ktext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_kxtext <==
+this is kxtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ltext <==
+this is ltext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_resource <==
+this is resource
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_symlink <==
+this is target symlink
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_symlink+k <==
+this is target symlink+k
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text <==
+this is text
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+C <==
+this is text+C
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+D <==
+this is text+D
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+F <==
+this is text+F
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+S <==
+this is text+S
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+S2 <==
+this is text+S2
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+k <==
+this is text+k
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+ko <==
+this is text+ko
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+kx <==
+this is text+kx
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+l <==
+this is text+l
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+m <==
+this is text+m
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+w <==
+this is text+w
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+x <==
+this is text+x
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ubinary <==
+this is ubinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_unicode <==
+this is unicode
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_uresource <==
+this is uresource
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_utf16 <==
+M-fM-!M-4M-gM-^MM-)M-fM-$M- M-bM-^AM-3M-gM-^QM-5M-cM-^EM-&M-`M-(M-6M-dM-$M-$M-bM-^QM-$M-bM-^PM-^JM-fM-^UM-^HM-fM-^QM-!M-gM-^IM-%M-`M-(M-$M-dM-^PM-$M-gM-^QM-!M-bM-^QM-%M-bM-^PM-^JM-fM-^EM-^DM-fM-^UM-4M-fM-%M-^TM-fM-^UM--M-`M-(M-$M-dM-^LM-$M-fM-^EM-(M-fM-^]M-.M-bM-^QM-%M-bM-^PM-^JM-fM-%M-^FM-fM-^UM-,M-`M-(M-$M-eM-^HM-$M-gM-^YM-%M-gM-^MM-)M-fM-=M-)M-bM-^QM-.M-bM-^PM-^JM-fM-^UM-^HM-fM-^QM-!M-gM-^IM-%M-bM-^PM-$M-fM-^UM-^HM-fM-^QM-!M-gM-^IM-%M-dM- M-$M-fM-^EM-%M-fM-^UM-$M-bM-^QM-2
+==> dst/file_uxbinary <==
+this is uxbinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xbinary <==
+this is xbinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xltext <==
+this is xltext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xtext <==
+this is xtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xunicode <==
+this is xunicode
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xutf16 <==
+M-fM-!M-4M-gM-^MM-)M-fM-$M- M-bM-^AM-3M-gM-^UM-8M-fM-^YM-4M-cM-^XM-1M-bM-^PM-^JM-fM-^QM-^IM-`M-(M-$M-dM- M-$M-fM-^EM-%M-fM-^UM-$M-bM-^QM-2M-bM-^PM-^JM-fM-^EM-^DM-fM-^UM-4M-`M-(M-$M-dM-^PM-$M-gM-^QM-!M-eM-^QM-%M-fM-5M-)M-bM-^QM-%M-bM-^PM-^JM-fM-!M-^CM-fM-9M-!M-fM-^UM-'M-`M-(M-$M-dM-^XM-$M-fM-1M-)M-bM-^QM-%M-bM-^PM-^JM-fM-^UM-^RM-fM-%M-6M-fM-%M-3M-fM-9M-/M-`M-(M-$M-dM- M-$M-fM-^EM-%M-fM-^UM-$M-bM-^QM-2M-dM- M-$M-fM-^EM-%M-fM-^UM-$M-bM-^QM-2M-fM-^UM-^HM-fM-^QM-!M-gM-^IM-%M-`M-(M-$
+% crazy_symlink
+target_$Header: //depot/test-mercurial-import/crazy_symlink+k#1 $
+target_$Header$
+% stop the p4 server


More information about the Mercurial-devel mailing list