Yet more work on record match.
[idzebra-moved-to-github.git] / index / trav.c
index faf7571..12fa18c 100644 (file)
@@ -4,7 +4,13 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: trav.c,v $
- * Revision 1.7  1995-11-20 11:56:28  adam
+ * Revision 1.9  1995-11-21 09:20:32  adam
+ * Yet more work on record match.
+ *
+ * Revision 1.8  1995/11/20  16:59:46  adam
+ * New update method: the 'old' keys are saved for each records.
+ *
+ * Revision 1.7  1995/11/20  11:56:28  adam
  * Work on new traversal.
  *
  * Revision 1.6  1995/11/17  15:54:42  adam
@@ -39,6 +45,7 @@
 #include <alexutil.h>
 #include "index.h"
 
+#if 0
 static void repository_extract_r (int cmd, char *rep, char *databaseName)
 {
     struct dir_entry *e;
@@ -290,6 +297,23 @@ void repository_update_r (int cmd, char *dst, char *src, char *databaseName)
     dir_free (&e_src);
 }
 
+void repository (int cmd, const char *rep, const char *base_path,
+                 char *databaseName)
+{
+    char rep_tmp1[2048];
+    char rep_tmp2[2048];
+
+    strcpy (rep_tmp1, rep);
+    if (base_path)
+    {
+        strcpy (rep_tmp2, base_path);
+        repository_update_r (cmd, rep_tmp2, rep_tmp1, databaseName);
+    }
+    else
+        repository_extract_r (cmd, rep_tmp1, databaseName);
+}
+#endif
+
 static int repComp (const char *a, const char *b, size_t len)
 {
     if (!len)
@@ -316,13 +340,11 @@ static void repositoryUpdateR (struct dirs_info *di, struct dirs_entry *dst,
     {
         if (!e_src)
             return;
-#if 1
         if (src_len && src[src_len-1] == '/')
             --src_len;
         else
             src[src_len] = '/';
         src[src_len+1] = '\0';
-#endif
         dirs_mkdir (di, src, 0);
         dst = NULL;
     }
@@ -333,13 +355,11 @@ static void repositoryUpdateR (struct dirs_info *di, struct dirs_entry *dst,
     }
     else
     {
-#if 1
         if (src_len && src[src_len-1] == '/')
             --src_len;
         else
             src[src_len] = '/';
         src[src_len+1] = '\0';
-#endif
         dst = dirs_read (di); 
     }
     dir_sort (e_src);
@@ -348,7 +368,7 @@ static void repositoryUpdateR (struct dirs_info *di, struct dirs_entry *dst,
     {
         int sd;
 
-        if (dst && !repComp (dst->path, src, src_len))
+        if (dst && !repComp (dst->path, src, src_len+1))
         {
             if (e_src[i_src].name)
             {
@@ -374,11 +394,10 @@ static void repositoryUpdateR (struct dirs_info *di, struct dirs_entry *dst,
             case dirs_file:
                 if (e_src[i_src].ctime > dst->ctime)
                 {
-                    file_extract ('d', tmppath, tmppath, databaseName);
-                    file_extract ('a', tmppath, tmppath, databaseName);
-                    dirs_add (di, src, dst->sysno, e_src[i_src].ctime);
+                    if (fileExtract (&dst->sysno, tmppath, databaseName, 0))
+                        dirs_add (di, src, dst->sysno, e_src[i_src].ctime);
                 }
-                dst = dirs_read (di); 
+                dst = dirs_read (di);
                 break;
             case dirs_dir:
                 repositoryUpdateR (di, dst, base, src, databaseName);
@@ -392,18 +411,20 @@ static void repositoryUpdateR (struct dirs_info *di, struct dirs_entry *dst,
         }
         else if (sd > 0)
         {
-            SYSNO sysno;
+            SYSNO sysno = 0;
             strcpy (src + src_len+1, e_src[i_src].name);
             sprintf (tmppath, "%s%s", base, src);
 
             switch (e_src[i_src].kind)
             {
             case dirs_file:
-                sysno = file_extract ('a', tmppath, tmppath, databaseName);
-                dirs_add (di, src, sysno, e_src[i_src].ctime);            
+                if (fileExtract (&sysno, tmppath, databaseName, 0))
+                    dirs_add (di, src, sysno, e_src[i_src].ctime);            
                 break;
             case dirs_dir:
                 repositoryUpdateR (di, dst, base, src, databaseName);
+                if (dst)
+                    dst = dirs_last (di);
                 break;
             }
             i_src++;
@@ -431,20 +452,3 @@ void repositoryUpdate (const char *path, char *databaseName)
 
     dict_close (dict);
 }
-
-void repository (int cmd, const char *rep, const char *base_path,
-                 char *databaseName)
-{
-    char rep_tmp1[2048];
-    char rep_tmp2[2048];
-
-    strcpy (rep_tmp1, rep);
-    if (base_path)
-    {
-        strcpy (rep_tmp2, base_path);
-        repository_update_r (cmd, rep_tmp2, rep_tmp1, databaseName);
-    }
-    else
-        repository_extract_r (cmd, rep_tmp1, databaseName);
-}
-