]> pd.if.org Git - zpackage/blobdiff - zpm-syncfs.c
move progress bar
[zpackage] / zpm-syncfs.c
index 51b010ef3f96daa8b32f8321f538851b20ecdff3..9a50be1856c1aca9aa4c66f90ca02e174e878b5d 100644 (file)
@@ -628,15 +628,6 @@ static int remove_files(void *f, int ncols, char **vals, char **cols) {
                return 0;
        }
 
-       if (lstat(dest, &st) == -1) {
-               return seterror(conf,"can't stat");
-       }
-
-       if (S_ISDIR(st.st_mode)) {
-               flags = AT_REMOVEDIR;
-       }
-       /* TODO check that expected filetype matches actual filetype */
-
        if (conf->verbose) {
                if (conf->progress == 2) {
                        fprintf(stderr, "%s(%s)\n", flags ? "rmdir" : "unlink", dest);
@@ -651,14 +642,37 @@ static int remove_files(void *f, int ncols, char **vals, char **cols) {
                }
        }
 
+       errno = 0;
+
+       if (lstat(dest, &st) == -1) {
+               switch (errno) {
+                       case ENOENT:
+                               /* TODO chatter if verbose */
+                               break;
+                       default:
+                               return seterror(conf, "can't stat %s: %s", dest, strerror(errno));
+               }
+               return 0;
+       }
+
+       if (S_ISDIR(st.st_mode)) {
+               flags = AT_REMOVEDIR;
+       }
+       /* TODO check that expected filetype matches actual filetype */
+
+
        errno = 0;
 
        if (unlinkat(AT_FDCWD, dest, flags) == -1) {
                switch (errno) {
                        case ENOENT:
                                break;
+                       case ENOTEMPTY: /* fall through */
+                       case EEXIST:
+                               /* TODO chatter, or possibly require */
+                               break;
                        default:
-                               return seterror(conf, "can't unlink");
+                               return seterror(conf, "can't unlink %s: %s", dest, strerror(errno));
                }
        }
        
@@ -1475,7 +1489,7 @@ int main(int ac, char **av) {
                        fprintf(stderr, "file ops: %d\n", conf.ops_total);
                        if (conf.ops_remove > 0) {
                                if (conf.verbose) {
-                                       fprintf(stderr, "removing %d files\n", conf.ops_remove);
+                                       fprintf(stderr, "removing %d file%s\n", conf.ops_remove, conf.ops_remove > 0 ? "s" : "");
                                }
                                conf.reverse = 1;
                                conf.ops_completed = 0;
@@ -1489,7 +1503,7 @@ int main(int ac, char **av) {
 
                        if (conf.ops_update > 0) {
                                if (conf.verbose) {
-                                       fprintf(stderr, "updating %d files\n", conf.ops_update);
+                                       fprintf(stderr, "updating %d file%s\n", conf.ops_update, conf.ops_update > 0 ? "s" : "");
                                }
                                conf.reverse = 0;
                                conf.ops_completed = 0;
@@ -1503,7 +1517,7 @@ int main(int ac, char **av) {
 
                        if (conf.ops_install > 0) {
                                if (conf.verbose) {
-                                       fprintf(stderr, "installing %d files\n", conf.ops_install);
+                                       fprintf(stderr, "installing %d file%s\n", conf.ops_install, conf.ops_install > 0 ? "s" : "");
                                }
                                conf.reverse = 0;
                                conf.ops_completed = 0;