Browse Source

Imagery modules: Ask to overwrite signature files. Fixes https://trac.osgeo.org/grass/ticket/3000

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@68434 15284696-431f-4ddb-bdfa-cd5b030d7da7
Maris Nartiss 9 years ago
parent
commit
1cd1a54f45
4 changed files with 40 additions and 18 deletions
  1. 20 5
      imagery/i.cluster/main.c
  2. 0 10
      imagery/i.cluster/open_files.c
  3. 10 2
      imagery/i.gensig/parse.c
  4. 10 1
      imagery/i.gensigset/parse.c

+ 20 - 5
imagery/i.cluster/main.c

@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
     parm.out_sig->type = TYPE_STRING;
     parm.out_sig->type = TYPE_STRING;
     parm.out_sig->key_desc = "name";
     parm.out_sig->key_desc = "name";
     parm.out_sig->required = YES;
     parm.out_sig->required = YES;
-    parm.out_sig->gisprompt = "old,sig,sigfile";
+    parm.out_sig->gisprompt = "new,sig,sigfile";
     parm.out_sig->description = _("Name for output file containing result signatures");
     parm.out_sig->description = _("Name for output file containing result signatures");
 
 
     parm.class = G_define_option();
     parm.class = G_define_option();
@@ -160,6 +160,25 @@ int main(int argc, char *argv[])
     if (G_parser(argc, argv))
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 	exit(EXIT_FAILURE);
 
 
+    group = parm.group_name->answer;	/* a required parameter */
+    subgroup = parm.subgroup_name->answer;	/* required */
+    outsigfile = parm.out_sig->answer;
+    
+    /* check all the inputs */
+    if (!I_find_group(group)) {
+        G_fatal_error(_("Group <%s> not found in current mapset"), group);
+    }
+    if (!I_find_subgroup(group, subgroup)) {
+        G_fatal_error(_("Subgroup <%s> in group <%s> not found"), subgroup, group);
+    }
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(group, subgroup, "sig", outsigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
+                        parm.out_sig->key, parm.out_sig->answer);
+    }
 
 
     G_get_window(&window);
     G_get_window(&window);
     nrows = Rast_window_rows();
     nrows = Rast_window_rows();
@@ -167,10 +186,6 @@ int main(int argc, char *argv[])
 
 
     I_cluster_clear(&C);
     I_cluster_clear(&C);
 
 
-    group = parm.group_name->answer;	/* a required parameter */
-    subgroup = parm.subgroup_name->answer;	/* required */
-
-    outsigfile = parm.out_sig->answer;
 
 
     if (sscanf(parm.class->answer, "%d", &maxclass) != 1 || maxclass < 1
     if (sscanf(parm.class->answer, "%d", &maxclass) != 1 || maxclass < 1
 	|| maxclass > 255) {
 	|| maxclass > 255) {

+ 0 - 10
imagery/i.cluster/open_files.c

@@ -12,16 +12,6 @@ int open_files(void)
     int n, missing;
     int n, missing;
 
 
     I_init_group_ref(&ref);
     I_init_group_ref(&ref);
-
-    G_strip(group);
-    if (!I_find_group(group))
-	G_fatal_error(_("Group <%s> not found in current mapset"), group);
-
-    G_strip(subgroup);
-    if (!I_find_subgroup(group, subgroup))
-	G_fatal_error(_("Subgroup <%s> in group <%s> not found"),
-		      subgroup, group);
-
     I_free_group_ref(&ref);
     I_free_group_ref(&ref);
     I_get_subgroup_ref(group, subgroup, &ref);
     I_get_subgroup_ref(group, subgroup, &ref);
 
 

+ 10 - 2
imagery/i.gensig/parse.c

@@ -22,7 +22,7 @@ int parse(int argc, char *argv[], struct parms *parms)
     sigfile->type = TYPE_STRING;
     sigfile->type = TYPE_STRING;
     sigfile->key_desc = "name";
     sigfile->key_desc = "name";
     sigfile->required = YES;
     sigfile->required = YES;
-    sigfile->gisprompt = "old,sig,sigfile";
+    sigfile->gisprompt = "new,sig,sigfile";
     sigfile->description = _("Name for output file containing result signatures");
     sigfile->description = _("Name for output file containing result signatures");
 
 
     if (G_parser(argc, argv))
     if (G_parser(argc, argv))
@@ -42,6 +42,14 @@ int parse(int argc, char *argv[], struct parms *parms)
 
 
     if (!I_find_subgroup(parms->group, parms->subgroup))
     if (!I_find_subgroup(parms->group, parms->subgroup))
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
-
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(parms->group, parms->subgroup, "sig", parms->sigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"), 
+                        sigfile->key, sigfile->answer);
+    }
+    
     return 0;
     return 0;
 }
 }

+ 10 - 1
imagery/i.gensigset/parse.c

@@ -21,7 +21,7 @@ int parse(int argc, char *argv[], struct parms *parms)
     sigfile->type = TYPE_STRING;
     sigfile->type = TYPE_STRING;
     sigfile->key_desc = "name";
     sigfile->key_desc = "name";
     sigfile->required = YES;
     sigfile->required = YES;
-    sigfile->gisprompt = "old,sig,sigfile";
+    sigfile->gisprompt = "new,sig,sigfile";
     sigfile->description = _("Name for output file containing result signatures");
     sigfile->description = _("Name for output file containing result signatures");
 
 
     maxsig = G_define_option();
     maxsig = G_define_option();
@@ -49,6 +49,15 @@ int parse(int argc, char *argv[], struct parms *parms)
     if (!I_find_subgroup(parms->group, parms->subgroup)) {
     if (!I_find_subgroup(parms->group, parms->subgroup)) {
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
     }
     }
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(parms->group, parms->subgroup, "sigset", parms->sigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
+                        sigfile->key, sigfile->answer);
+    }
+    
     if (sscanf(maxsig->answer, "%d", &parms->maxsubclasses) != 1 ||
     if (sscanf(maxsig->answer, "%d", &parms->maxsubclasses) != 1 ||
 	parms->maxsubclasses <= 0) {
 	parms->maxsubclasses <= 0) {
 	G_fatal_error(_("Illegal number of sub-signatures (%s)"),
 	G_fatal_error(_("Illegal number of sub-signatures (%s)"),