D4005: index: store nullrev as -1 in nodetree

2018-08-03 Thread martinvonz (Martin von Zweigbergk)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGf738c502e43b: index: store nullrev as -1 in nodetree 
(authored by martinvonz, committed by ).

CHANGED PRIOR TO COMMIT
  https://phab.mercurial-scm.org/D4005?vs=9789=9880#toc

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4005?vs=9789=9880

REVISION DETAIL
  https://phab.mercurial-scm.org/D4005

AFFECTED FILES
  mercurial/cext/revlog.c

CHANGE DETAILS

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -32,7 +32,7 @@
  * A base-16 trie for fast node->rev mapping.
  *
  * Positive value is index of the next node in the trie
- * Negative value is a leaf: -(rev + 1)
+ * Negative value is a leaf: -(rev + 2)
  * Zero is empty
  */
 typedef struct {
@@ -231,7 +231,7 @@
Py_ssize_t length = index_length(self);
const char *data;
 
-   if (pos == length - 1 || pos == INT_MAX)
+   if (pos == length - 1 || pos == -1)
return nullid;
 
if (pos >= length)
@@ -1008,7 +1008,7 @@
const char *n;
Py_ssize_t i;
 
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node(self, v);
if (n == NULL)
return -2;
@@ -1060,17 +1060,17 @@
v = n->children[k];
 
if (v == 0) {
-   n->children[k] = -rev - 1;
+   n->children[k] = -rev - 2;
return 0;
}
if (v < 0) {
-   const char *oldnode = index_node_existing(self, -(v + 
1));
+   const char *oldnode = index_node_existing(self, -(v + 
2));
int noff;
 
if (oldnode == NULL)
return -1;
if (!memcmp(oldnode, node, 20)) {
-   n->children[k] = -rev - 1;
+   n->children[k] = -rev - 2;
return 0;
}
noff = nt_new(self);
@@ -1095,8 +1095,8 @@
 
 static int nt_delete_node(indexObject *self, const char *node)
 {
-   /* rev==-1 happens to get encoded as 0, which is interpreted as not set 
*/
-   return nt_insert(self, node, -1);
+   /* rev==-2 happens to get encoded as 0, which is interpreted as not set 
*/
+   return nt_insert(self, node, -2);
 }
 
 static int nt_init(indexObject *self)
@@ -1118,7 +1118,7 @@
self->ntrev = (int)index_length(self) - 1;
self->ntlookups = 1;
self->ntmisses = 0;
-   if (nt_insert(self, nullid, INT_MAX) == -1) {
+   if (nt_insert(self, nullid, -1) == -1) {
free(self->nt);
self->nt = NULL;
return -1;
@@ -1290,7 +1290,7 @@
v = n->children[k];
if (v < 0) {
const char *n;
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node_existing(self, v);
if (n == NULL)
return -3;



To: martinvonz, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D4005: index: store nullrev as -1 in nodetree

2018-08-02 Thread martinvonz (Martin von Zweigbergk)
martinvonz updated this revision to Diff 9789.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4005?vs=9697=9789

REVISION DETAIL
  https://phab.mercurial-scm.org/D4005

AFFECTED FILES
  mercurial/cext/revlog.c

CHANGE DETAILS

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -32,7 +32,7 @@
  * A base-16 trie for fast node->rev mapping.
  *
  * Positive value is index of the next node in the trie
- * Negative value is a leaf: -(rev + 1)
+ * Negative value is a leaf: -(rev + 2)
  * Zero is empty
  */
 typedef struct {
@@ -231,7 +231,7 @@
Py_ssize_t length = index_length(self);
const char *data;
 
-   if (pos == length - 1 || pos == INT_MAX)
+   if (pos == length - 1 || pos == -1)
return nullid;
 
if (pos >= length)
@@ -1010,7 +1010,7 @@
const char *n;
Py_ssize_t i;
 
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node(self, v);
if (n == NULL)
return -2;
@@ -1062,17 +1062,17 @@
v = n->children[k];
 
if (v == 0) {
-   n->children[k] = -rev - 1;
+   n->children[k] = -rev - 2;
return 0;
}
if (v < 0) {
-   const char *oldnode = index_node_existing(self, -(v + 
1));
+   const char *oldnode = index_node_existing(self, -(v + 
2));
int noff;
 
if (oldnode == NULL)
return -1;
if (!memcmp(oldnode, node, 20)) {
-   n->children[k] = -rev - 1;
+   n->children[k] = -rev - 2;
return 0;
}
noff = nt_new(self);
@@ -1097,8 +1097,8 @@
 
 static int nt_delete_node(indexObject *self, const char *node)
 {
-   /* rev==-1 happens to get encoded as 0, which is interpreted as not set 
*/
-   return nt_insert(self, node, -1);
+   /* rev==-2 happens to get encoded as 0, which is interpreted as not set 
*/
+   return nt_insert(self, node, -2);
 }
 
 static int nt_init(indexObject *self)
@@ -1120,7 +1120,7 @@
self->ntrev = (int)index_length(self) - 1;
self->ntlookups = 1;
self->ntmisses = 0;
-   if (nt_insert(self, nullid, INT_MAX) == -1)
+   if (nt_insert(self, nullid, -1) == -1)
return -1;
}
return 0;
@@ -1290,7 +1290,7 @@
v = n->children[k];
if (v < 0) {
const char *n;
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node_existing(self, v);
if (n == NULL)
return -3;



To: martinvonz, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D4005: index: store nullrev as -1 in nodetree

2018-08-01 Thread martinvonz (Martin von Zweigbergk)
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Nothing important, it just seems more natural to not map nullrev to
  INT_MAX. We just need to change the revision encoding a little to make
  space for the -1.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4005

AFFECTED FILES
  mercurial/cext/revlog.c

CHANGE DETAILS

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -32,7 +32,7 @@
  * A base-16 trie for fast node->rev mapping.
  *
  * Positive value is index of the next node in the trie
- * Negative value is a leaf: -(rev + 1)
+ * Negative value is a leaf: -(rev + 2)
  * Zero is empty
  */
 typedef struct {
@@ -231,7 +231,7 @@
Py_ssize_t length = index_length(self);
const char *data;
 
-   if (pos == length - 1 || pos == INT_MAX)
+   if (pos == length - 1 || pos == -1)
return nullid;
 
if (pos >= length)
@@ -1010,7 +1010,7 @@
const char *n;
Py_ssize_t i;
 
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node(self, v);
if (n == NULL)
return -2;
@@ -1062,17 +1062,17 @@
v = n->children[k];
 
if (v == 0) {
-   n->children[k] = -(rev + 1);
+   n->children[k] = -(rev + 2);
return 0;
}
if (v < 0) {
-   const char *oldnode = index_node_existing(self, -(v + 
1));
+   const char *oldnode = index_node_existing(self, -(v + 
2));
int noff;
 
if (oldnode == NULL)
return -1;
if (!memcmp(oldnode, node, 20)) {
-   n->children[k] = -(rev + 1);
+   n->children[k] = -(rev + 2);
return 0;
}
noff = nt_new(self);
@@ -1097,8 +1097,8 @@
 
 static int nt_delete_node(indexObject *self, const char *node)
 {
-   /* rev==-1 happens to get encoded as 0, which is interpreted as not set 
*/
-   return nt_insert(self, node, -1);
+   /* rev==-2 happens to get encoded as 0, which is interpreted as not set 
*/
+   return nt_insert(self, node, -2);
 }
 
 static int nt_init(indexObject *self)
@@ -1120,7 +1120,7 @@
self->ntrev = (int)index_length(self) - 1;
self->ntlookups = 1;
self->ntmisses = 0;
-   if (nt_insert(self, nullid, INT_MAX) == -1)
+   if (nt_insert(self, nullid, -1) == -1)
return -1;
}
return 0;
@@ -1290,7 +1290,7 @@
v = n->children[k];
if (v < 0) {
const char *n;
-   v = -(v + 1);
+   v = -(v + 2);
n = index_node_existing(self, v);
if (n == NULL)
return -3;



To: martinvonz, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel