Merge "Split app move into separate copy/delete steps." into mnc-dev
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp
index f2c76d5..0c3ae02 100644
--- a/cmds/installd/commands.cpp
+++ b/cmds/installd/commands.cpp
@@ -177,7 +177,7 @@
     return 0;
 }
 
-int move_complete_app(const char *from_uuid, const char *to_uuid,
+int copy_complete_app(const char *from_uuid, const char *to_uuid,
         const char *package_name, const char *data_app_name, appid_t appid,
         const char* seinfo) {
     std::vector<userid_t> users = get_known_users(from_uuid);
@@ -264,19 +264,9 @@
         }
     }
 
-    // Delete old app and data
-    {
-        std::string from(create_data_app_package_path(from_uuid, data_app_name));
-        if (delete_dir_contents(from.c_str(), 1, NULL) != 0) {
-            LOG(WARNING) << "Failed to delete " << from;
-        }
-    }
-    for (auto user : users) {
-        std::string from(create_data_user_package_path(from_uuid, user, package_name));
-        if (delete_dir_contents(from.c_str(), 1, NULL) != 0) {
-            LOG(WARNING) << "Failed to delete " << from;
-        }
-    }
+    // We let the framework scan the new location and persist that before
+    // deleting the data in the old location; this ordering ensures that
+    // we can recover from things like battery pulls.
     return 0;
 
 fail:
diff --git a/cmds/installd/installd.cpp b/cmds/installd/installd.cpp
index 297b3a1..13e3168 100644
--- a/cmds/installd/installd.cpp
+++ b/cmds/installd/installd.cpp
@@ -124,10 +124,10 @@
     return delete_user_data(parse_null(arg[0]), arg[1], atoi(arg[2])); /* uuid, pkgname, userid */
 }
 
-static int do_mv_complete_app(char **arg, char reply[REPLY_MAX] __unused)
+static int do_cp_complete_app(char **arg, char reply[REPLY_MAX] __unused)
 {
     // from_uuid, to_uuid, package_name, data_app_name, appid, seinfo
-    return move_complete_app(parse_null(arg[0]), parse_null(arg[1]), arg[2], arg[3], atoi(arg[4]), arg[5]);
+    return copy_complete_app(parse_null(arg[0]), parse_null(arg[1]), arg[2], arg[3], atoi(arg[4]), arg[5]);
 }
 
 static int do_mk_user_data(char **arg, char reply[REPLY_MAX] __unused)
@@ -206,7 +206,7 @@
     { "rmcodecache",          3, do_rm_code_cache },
     { "getsize",              8, do_get_size },
     { "rmuserdata",           3, do_rm_user_data },
-    { "mvcompleteapp",        6, do_mv_complete_app },
+    { "cpcompleteapp",        6, do_cp_complete_app },
     { "movefiles",            0, do_movefiles },
     { "linklib",              4, do_linklib },
     { "mkuserdata",           5, do_mk_user_data },
diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h
index 744ed3a..7ec5793 100644
--- a/cmds/installd/installd.h
+++ b/cmds/installd/installd.h
@@ -225,7 +225,7 @@
 int delete_user_data(const char *uuid, const char *pkgname, userid_t userid);
 int make_user_data(const char *uuid, const char *pkgname, uid_t uid,
         userid_t userid, const char* seinfo);
-int move_complete_app(const char* from_uuid, const char *to_uuid,
+int copy_complete_app(const char* from_uuid, const char *to_uuid,
         const char *package_name, const char *data_app_name, appid_t appid,
         const char* seinfo);
 int make_user_config(userid_t userid);