Re: [HACKERS] pg_upgrade: quote directory names in delete_old_cluster script

2015-05-11 Thread Bruce Momjian
On Wed, Apr 29, 2015 at 10:52:45PM -0400, Bruce Momjian wrote:
 On Mon, Feb 16, 2015 at 05:03:45PM -0500, Bruce Momjian wrote:
   All of our makefiles use single quotes, so effectively the only
   character we don't support in directory paths is the single quote itself.
  
  This seems to say that Windows batch files don't have any special
  meaning for single quotes:
  
  
  http://stackoverflow.com/questions/24173825/what-does-single-quote-do-in-windows-batch-files
  
  http://stackoverflow.com/questions/10737283/single-quotes-and-double-quotes-how-to-have-the-same-behaviour-in-unix-and-wind
  
  Again, is it worth doing something platform-specific?  I can certainly
  define a platform-specific macro for  or ' as and use that.  Good idea?
 
 I have developed the attached patch to use platform-specific quoting of
 path names.

Applied.

-- 
  Bruce Momjian  br...@momjian.ushttp://momjian.us
  EnterpriseDB http://enterprisedb.com

  + Everyone has their own god. +


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] pg_upgrade: quote directory names in delete_old_cluster script

2015-04-30 Thread Bruce Momjian
On Wed, Apr 29, 2015 at 11:59:26PM -0300, Alvaro Herrera wrote:
 Bruce Momjian wrote:
 
  I have developed the attached patch to use platform-specific quoting of
  path names.
 
 Part of me wonders about initdb's existing DIR_SEP and QUOTE_PATH
 definitions ... seems messy to reinvent these things all over again.

I don't think we can reuse QUOTE_PATH as it is used in initdb for
displaying potential ways of starting the server, and it assumes Unix
doesn't need quoting, while Windows usually does.  For an actual script,
we always want to use quoting.

-- 
  Bruce Momjian  br...@momjian.ushttp://momjian.us
  EnterpriseDB http://enterprisedb.com

  + Everyone has their own god. +


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] pg_upgrade: quote directory names in delete_old_cluster script

2015-04-30 Thread Alvaro Herrera
Bruce Momjian wrote:

 I have developed the attached patch to use platform-specific quoting of
 path names.

Part of me wonders about initdb's existing DIR_SEP and QUOTE_PATH
definitions ... seems messy to reinvent these things all over again.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] pg_upgrade: quote directory names in delete_old_cluster script

2015-04-29 Thread Bruce Momjian
On Mon, Feb 16, 2015 at 05:03:45PM -0500, Bruce Momjian wrote:
  All of our makefiles use single quotes, so effectively the only
  character we don't support in directory paths is the single quote itself.
 
 This seems to say that Windows batch files don't have any special
 meaning for single quotes:
 
   
 http://stackoverflow.com/questions/24173825/what-does-single-quote-do-in-windows-batch-files
   
 http://stackoverflow.com/questions/10737283/single-quotes-and-double-quotes-how-to-have-the-same-behaviour-in-unix-and-wind
 
 Again, is it worth doing something platform-specific?  I can certainly
 define a platform-specific macro for  or ' as and use that.  Good idea?

I have developed the attached patch to use platform-specific quoting of
path names.

-- 
  Bruce Momjian  br...@momjian.ushttp://momjian.us
  EnterpriseDB http://enterprisedb.com

  + Everyone has their own god. +
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
new file mode 100644
index 6db223a..be66b24
*** a/src/bin/pg_upgrade/check.c
--- b/src/bin/pg_upgrade/check.c
*** create_script_for_old_cluster_deletion(c
*** 532,538 
  #endif
  
  	/* delete old cluster's default tablespace */
! 	fprintf(script, RMDIR_CMD  \%s\\n, fix_path_separator(old_cluster.pgdata));
  
  	/* delete old cluster's alternate tablespaces */
  	for (tblnum = 0; tblnum  os_info.num_old_tablespaces; tblnum++)
--- 532,539 
  #endif
  
  	/* delete old cluster's default tablespace */
! 	fprintf(script, RMDIR_CMD  %c%s%c\n, PATH_QUOTE,
! 			fix_path_separator(old_cluster.pgdata), PATH_QUOTE);
  
  	/* delete old cluster's alternate tablespaces */
  	for (tblnum = 0; tblnum  os_info.num_old_tablespaces; tblnum++)
*** create_script_for_old_cluster_deletion(c
*** 554,562 
  		PATH_SEPARATOR);
  
  			for (dbnum = 0; dbnum  old_cluster.dbarr.ndbs; dbnum++)
! fprintf(script, RMDIR_CMD  \%s%c%d\\n,
  		fix_path_separator(os_info.old_tablespaces[tblnum]),
! 		PATH_SEPARATOR, old_cluster.dbarr.dbs[dbnum].db_oid);
  		}
  		else
  		{
--- 555,564 
  		PATH_SEPARATOR);
  
  			for (dbnum = 0; dbnum  old_cluster.dbarr.ndbs; dbnum++)
! fprintf(script, RMDIR_CMD  %c%s%c%d%c\n, PATH_QUOTE,
  		fix_path_separator(os_info.old_tablespaces[tblnum]),
! 		PATH_SEPARATOR, old_cluster.dbarr.dbs[dbnum].db_oid,
! 		PATH_QUOTE);
  		}
  		else
  		{
*** create_script_for_old_cluster_deletion(c
*** 566,574 
  			 * Simply delete the tablespace directory, which might be .old
  			 * or a version-specific subdirectory.
  			 */
! 			fprintf(script, RMDIR_CMD  \%s%s\\n,
  	fix_path_separator(os_info.old_tablespaces[tblnum]),
! 	fix_path_separator(suffix_path));
  			pfree(suffix_path);
  		}
  	}
--- 568,576 
  			 * Simply delete the tablespace directory, which might be .old
  			 * or a version-specific subdirectory.
  			 */
! 			fprintf(script, RMDIR_CMD  %c%s%s%c\n, PATH_QUOTE,
  	fix_path_separator(os_info.old_tablespaces[tblnum]),
! 	fix_path_separator(suffix_path), PATH_QUOTE);
  			pfree(suffix_path);
  		}
  	}
diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
new file mode 100644
index 4683c6f..bb035e1
*** a/src/bin/pg_upgrade/pg_upgrade.h
--- b/src/bin/pg_upgrade/pg_upgrade.h
*** extern char *output_files[];
*** 74,79 
--- 74,80 
  #define pg_mv_file			rename
  #define pg_link_file		link
  #define PATH_SEPARATOR		'/'
+ #define PATH_QUOTE	'\''
  #define RM_CMDrm -f
  #define RMDIR_CMD			rm -rf
  #define SCRIPT_PREFIX		./
*** extern char *output_files[];
*** 85,90 
--- 86,92 
  #define pg_mv_file			pgrename
  #define pg_link_file		win32_pghardlink
  #define PATH_SEPARATOR		'\\'
+ #define PATH_QUOTE	''
  #define RM_CMDDEL /q
  #define RMDIR_CMD			RMDIR /s/q
  #define SCRIPT_PREFIX		

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers