[GRASS-SVN] r47960 - grass/trunk/general/g.mapset

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Aug 29 15:52:19 EDT 2011


Author: martinl
Date: 2011-08-29 12:52:19 -0700 (Mon, 29 Aug 2011)
New Revision: 47960

Modified:
   grass/trunk/general/g.mapset/main.c
Log:
g.mapset: add flag to print current mapset


Modified: grass/trunk/general/g.mapset/main.c
===================================================================
--- grass/trunk/general/g.mapset/main.c	2011-08-29 19:42:03 UTC (rev 47959)
+++ grass/trunk/general/g.mapset/main.c	2011-08-29 19:52:19 UTC (rev 47960)
@@ -9,7 +9,7 @@
  * PURPOSE:      Change current mapset, optionally adding it
  *               if the mapset does not exist.
  *               
- * COPYRIGHT:    (C) 2004, 2010 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2004, 2010-2011 by the GRASS Development Team
  *
  *               This program is free software under the 
  *               GNU General Public License (>=v2). 
@@ -29,8 +29,12 @@
 {
     int ret;
     struct GModule *module;
-    struct Option *gisdbase_opt, *location_opt, *mapset_opt;
-    struct Flag *f_add, *f_list;
+    struct {
+	struct Option *gisdbase, *location, *mapset;
+    } opt;
+    struct {
+	struct Flag *add, *list, *curr;
+    } flag;
     const char *gisdbase_old, *location_old, *mapset_old;
     const char *gisdbase_new, *location_new, *mapset_new;
     const char *gis_lock;
@@ -44,74 +48,79 @@
     module = G_define_module();
     G_add_keyword(_("general"));
     G_add_keyword(_("settings"));
-    module->label = _("Changes current mapset.");
+    module->label = _("Changes/reports current mapset.");
     module->description = _("Optionally create new mapset or list available mapsets in given location.");
     
-    mapset_opt = G_define_option();
-    mapset_opt->key = "mapset";
-    mapset_opt->type = TYPE_STRING;
-    mapset_opt->required = YES;
-    mapset_opt->multiple = NO;
-    mapset_opt->key_desc = "name";
-    mapset_opt->description = _("Name of mapset where to switch");
-    mapset_opt->guisection = _("Settings");
+    opt.mapset = G_define_standard_option(G_OPT_M_MAPSET);
+    opt.mapset->required = YES;
+    opt.mapset->description = _("Name of mapset where to switch");
+    opt.mapset->guisection = _("Settings");
 
-    location_opt = G_define_option();
-    location_opt->key = "location";
-    location_opt->type = TYPE_STRING;
-    location_opt->required = NO;
-    location_opt->multiple = NO;
-    location_opt->key_desc = "name";
-    location_opt->description = _("Location name (not location path)");
-    location_opt->guisection = _("Settings");
+    opt.location = G_define_option();
+    opt.location->key = "location";
+    opt.location->type = TYPE_STRING;
+    opt.location->required = NO;
+    opt.location->multiple = NO;
+    opt.location->key_desc = "name";
+    opt.location->description = _("Location name (not location path)");
+    opt.location->guisection = _("Settings");
 
-    gisdbase_opt = G_define_option();
-    gisdbase_opt->key = "gisdbase";
-    gisdbase_opt->type = TYPE_STRING;
-    gisdbase_opt->required = NO;
-    gisdbase_opt->multiple = NO;
-    gisdbase_opt->key_desc = "path";
-    gisdbase_opt->label = _("GIS data directory");
-    gisdbase_opt->description = _("Full path to the directory where the new location is");
-    gisdbase_opt->guisection = _("Settings");
+    opt.gisdbase = G_define_option();
+    opt.gisdbase->key = "gisdbase";
+    opt.gisdbase->type = TYPE_STRING;
+    opt.gisdbase->required = NO;
+    opt.gisdbase->multiple = NO;
+    opt.gisdbase->key_desc = "path";
+    opt.gisdbase->label = _("GIS data directory");
+    opt.gisdbase->description = _("Full path to the directory where the new location is");
+    opt.gisdbase->guisection = _("Settings");
 
-    f_add = G_define_flag();
-    f_add->key = 'c';
-    f_add->description = _("Create mapset if it doesn't exist");
-    f_add->answer = FALSE;
-    f_add->guisection = _("Create");
+    flag.add = G_define_flag();
+    flag.add->key = 'c';
+    flag.add->description = _("Create mapset if it doesn't exist");
+    flag.add->answer = FALSE;
+    flag.add->guisection = _("Create");
 
-    f_list = G_define_flag();
-    f_list->key = 'l';
-    f_list->suppress_required = YES;
-    f_list->description = _("List available mapsets");
-    f_list->guisection = _("Print");
-    
+    flag.list = G_define_flag();
+    flag.list->key = 'l';
+    flag.list->suppress_required = YES;
+    flag.list->description = _("List available mapsets and exit");
+    flag.list->guisection = _("Print");
+ 
+    flag.curr = G_define_flag();
+    flag.curr->key = 'p';
+    flag.curr->suppress_required = YES;
+    flag.curr->description = _("Print current mapset and exit");
+    flag.curr->guisection = _("Print");
+   
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
-    if (!mapset_opt->answer && !f_list->answer)
-	G_fatal_error(_("Either mapset= or -l must be used"));
-
     /* Store original values */
     gisdbase_old = G__getenv("GISDBASE");
     location_old = G__getenv("LOCATION_NAME");
     mapset_old = G__getenv("MAPSET");
+
+    if (flag.curr->answer) {
+	fprintf(stdout, "%s\n", mapset_old);
+	exit(EXIT_SUCCESS);
+    }
+    
     G_asprintf(&mapset_old_path, "%s/%s/%s", gisdbase_old, location_old,
 	       mapset_old);
 
     /* New values */
-    if (gisdbase_opt->answer)
-	gisdbase_new = gisdbase_opt->answer;
+    if (opt.gisdbase->answer)
+	gisdbase_new = opt.gisdbase->answer;
     else
 	gisdbase_new = gisdbase_old;
 
-    if (location_opt->answer)
-	location_new = location_opt->answer;
+    if (opt.location->answer)
+	location_new = opt.location->answer;
     else
 	location_new = location_old;
 
-    if (f_list->answer) {
+    if (flag.list->answer) {
 	char **ms;
 	int nmapsets;
 
@@ -130,7 +139,7 @@
 	exit(EXIT_SUCCESS);
     }
 
-    mapset_new = mapset_opt->answer;
+    mapset_new = opt.mapset->answer;
     G_asprintf(&mapset_new_path, "%s/%s/%s", gisdbase_new, location_new,
 	       mapset_new);
 
@@ -147,7 +156,7 @@
 	G_fatal_error(_("You don't have permission to use this mapset"));
 	break;
     case -1:
-	if (f_add->answer == TRUE) {
+	if (flag.add->answer == TRUE) {
 	    G_debug(2, "Mapset %s doesn't exist, attempting to create it",
 		    mapset_new);
 	    G_make_mapset(gisdbase_new, location_new, mapset_new);
@@ -176,7 +185,8 @@
     /* Warning: the value returned by system() is not that returned by exit() in executed program
      *          e.g. exit(1) -> 256 (multiplied by 256) */
     if (ret != 0)
-	G_fatal_error(_("%s is currently running GRASS in selected mapset or lock file cannot be checked"),
+	G_fatal_error(_("<%s> is currently running GRASS in selected mapset "
+			"or lock file cannot be checked"),
 		      G_whoami());
 
     /* Clean temporary directory */
@@ -195,7 +205,8 @@
 
     G_free(mapset_old_path);
 
-    G_important_message(_("Your shell continues to use the history for the old mapset"));
+    G_important_message(_("Your shell continues to use the history "
+			  "for the old mapset"));
 
     if ((shell = getenv("SHELL"))) {
 	if (strstr(shell, "bash")) {
@@ -210,7 +221,7 @@
 	}
     }
 
-    G_message(_("Your current mapset is <%s>"), mapset_new);
+    G_verbose_message(_("Your current mapset is <%s>"), mapset_new);
     
     G_free(mapset_new_path);
 



More information about the grass-commit mailing list