This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit 05be5f4f365ee59bb365f100d2e2d92c6a5bf74b
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Thu Oct 31 08:26:52 2024 +0000

    add cp binary tool and implement cp in backend
---
 src/backends/default/{mv.c => cp.c} | 17 ++++-------------
 src/backends/default/meson.build    | 16 +++++++++++++++-
 src/backends/default/mv.c           |  9 +--------
 src/backends/default/open.c         |  8 +++-----
 4 files changed, 23 insertions(+), 27 deletions(-)

diff --git a/src/backends/default/mv.c b/src/backends/default/cp.c
similarity index 93%
copy from src/backends/default/mv.c
copy to src/backends/default/cp.c
index 56bf28b..e7a750e 100644
--- a/src/backends/default/mv.c
+++ b/src/backends/default/cp.c
@@ -106,7 +106,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
 
   // set up status files for the op
   status_begin();
-  status_op("mv");
+  status_op("cp");
 
   // build up a list of all files to mv and scan them to find how much
   EINA_LIST_FOREACH(files, l, fs)
@@ -192,16 +192,9 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
     umask(prev_umask);
 
     // mv the file to a tmp file: mv /srcdir/filename /dstdir/.efm/filename.tmp
-    if (fs_mv(src, dsttmpfile, EINA_TRUE))
+    if (fs_cp_rm(src, dsttmpfile, EINA_TRUE, EINA_TRUE, EINA_FALSE))
       { // it worked so deal with meta/thumbs
         char *src_meta, *dst_meta;
-
-        // XXX: use meta api to:
-        // 1. meta_load src (new api that takes path + ret handle)
-        // 2. meta_dup src to dst (new api with new path dst path, ret dst hnd)
-        // 3. meta_save the duplicated meta (bew api)
-        // 4. meta_del the src meta (new api)
-        // 5. meta_free src + dst handles (new api)
         Meta_File *mfsrc, *mfdst;
 
         mfsrc = meta_file_load(src);
@@ -211,10 +204,9 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
             if (mfdst)
               {
                 meta_file_save(mfdst);
-                meta_file_del(mfsrc);
-                meta_file_free(mfsrc);
                 meta_file_free(mfdst);
               }
+            meta_file_free(mfsrc);
           }
 
         // thumbnail file for the base target file
@@ -226,7 +218,7 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
         if ((src_meta) && (dst_meta) && (meta_path_prepare(dst)))
           {
             status_count(1, src_meta);
-            fs_mv(src_meta, dst_meta, EINA_FALSE);
+            fs_cp_rm(src_meta, dst_meta, EINA_FALSE, EINA_TRUE, EINA_FALSE);
             // fix up the oprig stat info to match so thub is valid
             // get stat info of new mv'd file
             if (stat(dsttmpfile, &st) == 0)
@@ -263,7 +255,6 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
       }
     else break;
     // it all worked - let's clean up possibly empty tmp/efm dirs
-    rmdir(srctmpdir);
     rmdir(dsttmpdir);
   }
 err2:
diff --git a/src/backends/default/meson.build b/src/backends/default/meson.build
index 5034a0f..10bfec4 100644
--- a/src/backends/default/meson.build
+++ b/src/backends/default/meson.build
@@ -49,4 +49,18 @@ executable('mv', [
   include_directories: inc,
   dependencies: deps,
   install: true,
-  install_dir: dir)
\ No newline at end of file
+  install_dir: dir)
+executable('cp', [
+    '../../shared/sha.c',
+    '../../shared/esc.c',
+    '../../shared/util.c',
+    'fs.c',
+    'cp.c',
+    'meta.c',
+    'status.c'
+  ],
+  include_directories: inc,
+  dependencies: deps,
+  install: true,
+  install_dir: dir)
+  
\ No newline at end of file
diff --git a/src/backends/default/mv.c b/src/backends/default/mv.c
index 56bf28b..79a9226 100644
--- a/src/backends/default/mv.c
+++ b/src/backends/default/mv.c
@@ -195,13 +195,6 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
     if (fs_mv(src, dsttmpfile, EINA_TRUE))
       { // it worked so deal with meta/thumbs
         char *src_meta, *dst_meta;
-
-        // XXX: use meta api to:
-        // 1. meta_load src (new api that takes path + ret handle)
-        // 2. meta_dup src to dst (new api with new path dst path, ret dst hnd)
-        // 3. meta_save the duplicated meta (bew api)
-        // 4. meta_del the src meta (new api)
-        // 5. meta_free src + dst handles (new api)
         Meta_File *mfsrc, *mfdst;
 
         mfsrc = meta_file_load(src);
@@ -212,9 +205,9 @@ main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
               {
                 meta_file_save(mfdst);
                 meta_file_del(mfsrc);
-                meta_file_free(mfsrc);
                 meta_file_free(mfdst);
               }
+            meta_file_free(mfsrc);
           }
 
         // thumbnail file for the base target file
diff --git a/src/backends/default/open.c b/src/backends/default/open.c
index f281e9b..aae342c 100644
--- a/src/backends/default/open.c
+++ b/src/backends/default/open.c
@@ -1338,19 +1338,17 @@ _handle_drop_paste(const char *over, const char *action, Eina_List *files)
   else
     {
       if ((!action) || (!strcmp(action, "copy")))
-        { // XXX: implement
+        {
+          _op_run("cp", files, mondir);
         }
       else if (!strcmp(action, "move"))
         {
           _op_run("mv", files, mondir);
         }
-      else if (!strcmp(action, "ask"))
-        { // XXX: we should never get this - handled by front end right now
-        }
       else if (!strcmp(action, "link"))
         { // XXX: implement
         }
-      else // "list", "description", or anything else
+      else // "ask", "list", "description", or anything else
         { // actully we should never get this
         }
     }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to