# HG changeset patch
# User Remi Chaintron <r...@fb.com>
# Date 1483377654 18000
#      Mon Jan 02 12:20:54 2017 -0500
# Node ID 49eef591aa30f65223c4d5a1cd252840296ca983
# Parent  d4aaac74e17118d59373b8380fcd98b7bb0419d8
tests: test-flagprocessor.t

This patch introduces a test to check the behavior of the revlog flag processor.
- Introduces three extensions in tests/: base64, gzip and usr0:
  - the base64 extension encodes/decodes filelog contents.
  - the gzip extension compresses/decompresses filelog contents.
  - the usr0 extension simply registers None transforms on flag REVIDX_USR0.
- Tests that several extensions cannot register on the same flag (base64 + usr0)
- Tests the composition of base64 and gzip.

diff --git a/tests/base64ext.py b/tests/base64ext.py
new file mode 100644
--- /dev/null
+++ b/tests/base64ext.py
@@ -0,0 +1,59 @@
+# coding=UTF-8
+
+from __future__ import absolute_import
+
+import base64
+
+from mercurial import (
+    changegroup,
+    extensions,
+    filelog,
+    revlog,
+)
+
+def supportedoutgoingversions(orig, repo):
+    versions = orig(repo)
+    versions.discard('01')
+    versions.discard('02')
+    versions.add('03')
+    return versions
+
+def allsupportedversions(orig, ui):
+    versions = orig(ui)
+    versions.add('03')
+    return versions
+
+def bypass(self, text):
+    return (text, False)
+
+def encode(self, text):
+    return (base64.b64encode(text), False)
+
+def decode(self, text):
+    return (base64.b64decode(text), True)
+
+def addrevision(orig, self, text, transaction, link, p1, p2, cachedelta=None,
+                node=None, flags=revlog.REVIDX_DEFAULT_FLAGS):
+    if node is None:
+        node = revlog.hash(text, p1, p2)
+    flags |= revlog.REVIDX_USR0
+    return orig(self, text, transaction, link, p1, p2, cachedelta=cachedelta,
+                node=node, flags=flags)
+
+def extsetup(ui):
+    wrapfunction = extensions.wrapfunction
+
+    wrapfunction(changegroup,
+                 'supportedoutgoingversions',
+                 supportedoutgoingversions)
+    wrapfunction(changegroup,
+                 'allsupportedversions',
+                 allsupportedversions)
+
+    wrapfunction(filelog.filelog, 'addrevision', addrevision)
+
+    transform = (decode, encode, bypass)
+    revlog.addflagtransform(revlog.REVIDX_USR0, transform)
+
+
+
diff --git a/tests/gzipext.py b/tests/gzipext.py
new file mode 100644
--- /dev/null
+++ b/tests/gzipext.py
@@ -0,0 +1,59 @@
+# coding=UTF-8
+
+from __future__ import absolute_import
+
+import zlib
+
+from mercurial import (
+    changegroup,
+    extensions,
+    filelog,
+    revlog,
+)
+
+def supportedoutgoingversions(orig, repo):
+    versions = orig(repo)
+    versions.discard('01')
+    versions.discard('02')
+    versions.add('03')
+    return versions
+
+def allsupportedversions(orig, ui):
+    versions = orig(ui)
+    versions.add('03')
+    return versions
+
+def bypass(self, text):
+    return (text, False)
+
+def compress(self, text):
+    return (zlib.compress(text), False)
+
+def decompress(self, text):
+    return (zlib.decompress(text), True)
+
+def addrevision(orig, self, text, transaction, link, p1, p2, cachedelta=None,
+                node=None, flags=revlog.REVIDX_DEFAULT_FLAGS):
+    if node is None:
+        node = revlog.hash(text, p1, p2)
+    flags |= revlog.REVIDX_USR1
+    return orig(self, text, transaction, link, p1, p2, cachedelta=cachedelta,
+                node=node, flags=flags)
+
+def extsetup(ui):
+    wrapfunction = extensions.wrapfunction
+
+    wrapfunction(changegroup,
+                 'supportedoutgoingversions',
+                 supportedoutgoingversions)
+    wrapfunction(changegroup,
+                 'allsupportedversions',
+                 allsupportedversions)
+
+    wrapfunction(filelog.filelog, 'addrevision', addrevision)
+
+    transform = (decompress, compress, bypass)
+    revlog.addflagtransform(revlog.REVIDX_USR1, transform)
+
+
+
diff --git a/tests/test-flagprocessor.t b/tests/test-flagprocessor.t
new file mode 100644
--- /dev/null
+++ b/tests/test-flagprocessor.t
@@ -0,0 +1,81 @@
+# TEST 1: test extension composition
+  $ hg init server
+
+# Clone server and enable extensions
+  $ hg clone -q server client
+  $ cd client
+  $ cat >> .hg/hgrc <<EOF
+  > [extensions]
+  > base64=$TESTDIR/base64ext.py
+  > gzip=$TESTDIR/gzipext.py
+  > EOF
+
+# Commit file
+  $ echo contents > file
+  $ hg commit -Aqm 'add file'
+
+# Check base64 of the gzip compressed content is stored
+  $ hg debugdata file 0
+  eJxLzs8rSc0rKeYCABKzA3k= (no-eol)
+
+# Push changes to the server
+  $ hg push --traceback
+  pushing to $TESTTMP/server
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+
+# Initialize new client and setup extensions (no cloning)
+# Extensions loading is reversed to ensure flags follow the stable order
+  $ cd ../
+  $ mkdir client2
+  $ cd client2
+  $ hg init
+  $ cat >> .hg/hgrc <<EOF
+  > [paths]
+  > default = $TESTTMP/server
+  > [extensions]
+  > gzip=$TESTDIR/gzipext.py
+  > base64=$TESTDIR/base64ext.py
+  > EOF
+
+# Pull from server and update to the latest version
+  $ hg pull default
+  pulling from $TESTTMP/server
+  requesting all changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg update --traceback
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+# Check base64 version is fetched and decoded correctly
+  $ hg debugdata file 0
+  eJxLzs8rSc0rKeYCABKzA3k= (no-eol)
+  $ hg cat -r . file
+  contents
+
+# TEST 2: Error on registering multiple transforms on the same flag
+  $ cd ../
+  $ hg init server2
+  $ cd server2
+  $ cat >> .hg/hgrc <<EOF
+  > [extensions]
+  > base64=$TESTDIR/base64ext.py
+  > usr0=$TESTDIR/usr0ext.py
+  > EOF
+
+# Commit file
+  $ echo contents > file
+  $ hg commit -Aqm 'add file'
+  abort: cannot register multiple transforms on flag '8'.
+  [255]
+
+
+
+
+
diff --git a/tests/usr0ext.py b/tests/usr0ext.py
new file mode 100644
--- /dev/null
+++ b/tests/usr0ext.py
@@ -0,0 +1,17 @@
+# coding=UTF-8
+
+from __future__ import absolute_import
+
+from mercurial import (
+    revlog,
+)
+
+def donothing(self, text):
+    return (text, True)
+
+def extsetup(ui):
+    transform = (donothing, donothing, donothing)
+    revlog.addflagtransform(revlog.REVIDX_USR0, transform)
+
+
+
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to