@@ -125,8 +125,29 @@ def get_default_spock(pgv):
125125 return (DEFAULT_SPOCK )
126126
127127def validate_spock_pg_compat (spock_ver : str = None , pg_ver : str = None ) -> None :
128- # --- defaults (keep yours as-is) ---
128+
129+ raw_pg_arg = None
130+ try :
131+ argv = sys .argv or []
132+ for i , a in enumerate (argv ):
133+ if a == "--pg_ver" and i + 1 < len (argv ):
134+ raw_pg_arg = argv [i + 1 ]
135+ break
136+ if a .startswith ("--pg_ver=" ):
137+ raw_pg_arg = a .split ("=" , 1 )[1 ]
138+ break
139+ except Exception :
140+ raw_pg_arg = None
141+
142+ if raw_pg_arg :
143+ # strip surrounding quotes if present
144+ raw_pg_arg = raw_pg_arg .strip ().strip ("'\" " )
145+
146+ # prefer the raw CLI token if we found one; otherwise use the passed value/default
147+ if raw_pg_arg :
148+ pg_ver = raw_pg_arg
129149 pg_ver = str (pg_ver ) if pg_ver else str (DEFAULT_PG )
150+
130151 if not spock_ver :
131152 try :
132153 maj = int (pg_ver .split ("." , 1 )[0 ])
@@ -135,38 +156,49 @@ def validate_spock_pg_compat(spock_ver: str = None, pg_ver: str = None) -> None:
135156 spock_ver = DEFAULT_SPOCK_17 if maj == 17 else DEFAULT_SPOCK
136157 spock_ver = str (spock_ver )
137158
138- # --- parse Spock major w/o 'packaging' dependency ---
139- m_sp = re .fullmatch (r'(\d)(\d)$' , spock_ver ) # "50" -> "5.0.0"
159+
160+ # Accept exactly two digits like "50" -> "5.0.0" (no change for normal semver).
161+ m_sp = re .fullmatch (r"\d{2}" , spock_ver )
140162 if m_sp :
141- spock_ver = f"{ int (m_sp . group ( 1 )) } .{ int (m_sp . group ( 2 ) )} .0"
163+ spock_ver = f"{ int (spock_ver [ 0 ]) } .{ int (spock_ver [ 1 ] )} .0"
142164
143165 try :
144166 spock_version_obj = Version .coerce (spock_ver )
145- except Exception as e :
167+ except Exception :
146168 exit_message (f"Invalid Spock version '{ spock_ver } '." , 1 , isJSON )
147169
148170 if spock_version_obj .major < 5 :
149171 return
150-
172+
173+
174+ pg_for_compare = pg_ver # e.g., "16.10" if recovered from argv
175+
151176 try :
152- pg_version_obj = Version .coerce (pg_ver )
153- except Exception as e :
177+ pg_version_obj = Version .coerce (pg_for_compare )
178+ except Exception :
154179 exit_message (f"Invalid PostgreSQL version '{ pg_ver } '." , 1 , isJSON )
155180
181+ # If user gave only a major (e.g., "16"), skip strict thresholding (matches prior behavior).
156182 if not pg_version_obj .minor :
157183 return
158-
159- min_version_thresholds = {15 : Version .coerce ("15.13-2" ), 16 : Version .coerce ("16.9-2" ), 17 : Version .coerce ("17.5-2" )}
160-
184+
185+ min_version_thresholds = {
186+ 15 : Version .coerce ("15.13-2" ),
187+ 16 : Version .coerce ("16.9-2" ),
188+ 17 : Version .coerce ("17.5-2" ),
189+ }
190+
161191 if pg_version_obj .major in min_version_thresholds :
162192 min_version_obj = min_version_thresholds [pg_version_obj .major ]
163193 min_version_build = min_version_obj .prerelease [0 ] if min_version_obj .prerelease else "0"
164194 if pg_version_obj < min_version_obj :
165- exit_message (
166- f"Spock { spock_ver } requires PostgreSQL { pg_version_obj .major } >= { min_version_obj .major } .{ min_version_obj .minor } -{ min_version_build } . You provided { pg_ver } ." ,
167- 1 ,
168- isJSON ,
169- )
195+ exit_message (
196+ f"Spock { spock_ver } requires PostgreSQL { pg_version_obj .major } >= "
197+ f"{ min_version_obj .major } .{ min_version_obj .minor } -{ min_version_build } . "
198+ f"You provided { pg_ver } ." ,
199+ 1 ,
200+ isJSON ,
201+ )
170202
171203def get_guc_value (pg_comp , guc_name ):
172204 """
0 commit comments