comparison Python/sysmodule.c @ 69482:063b4ab49fcc 3.2

MERGE: Up-port changeset 5cf8f6da8743 (closes #11890)
author Jesus Cea <jcea@jcea.es>
date Wed, 20 Apr 2011 20:32:52 +0200
parents a00b9a5688da febb6cf195e7
children fdcda5b74317 c65035463b0f
comparison
equal deleted inserted replaced
69473:e5f11efe89a6 69482:063b4ab49fcc
1304 " 1304 "
1305 ) 1305 )
1306 /* end of sys_doc */ ; 1306 /* end of sys_doc */ ;
1307 1307
1308 /* Subversion branch and revision management */ 1308 /* Subversion branch and revision management */
1309 static const char _patchlevel_revision[] = PY_PATCHLEVEL_REVISION;
1310 static const char headurl[] = "$HeadURL$";
1311 static int svn_initialized; 1309 static int svn_initialized;
1312 static char patchlevel_revision[50]; /* Just the number */ 1310 static char patchlevel_revision[50]; /* Just the number */
1313 static char branch[50]; 1311 static char branch[50];
1314 static char shortbranch[50]; 1312 static char shortbranch[50];
1315 static const char *svn_revision; 1313 static const char *svn_revision;
1316 1314
1317 static void 1315 static void
1318 svnversion_init(void) 1316 svnversion_init(void)
1319 { 1317 {
1320 const char *python, *br_start, *br_end, *br_end2, *svnversion;
1321 Py_ssize_t len;
1322 int istag = 0;
1323
1324 if (svn_initialized) 1318 if (svn_initialized)
1325 return; 1319 return;
1326 1320
1327 python = strstr(headurl, "/python/");
1328 if (!python) {
1329 strcpy(branch, "unknown branch");
1330 strcpy(shortbranch, "unknown");
1331 }
1332 else {
1333 br_start = python + 8;
1334 br_end = strchr(br_start, '/');
1335 assert(br_end);
1336
1337 /* Works even for trunk,
1338 as we are in trunk/Python/sysmodule.c */
1339 br_end2 = strchr(br_end+1, '/');
1340
1341 istag = strncmp(br_start, "tags", 4) == 0;
1342 if (strncmp(br_start, "trunk", 5) == 0) {
1343 strcpy(branch, "trunk");
1344 strcpy(shortbranch, "trunk");
1345 }
1346 else if (istag || strncmp(br_start, "branches", 8) == 0) {
1347 len = br_end2 - br_start;
1348 strncpy(branch, br_start, len);
1349 branch[len] = '\0';
1350
1351 len = br_end2 - (br_end + 1);
1352 strncpy(shortbranch, br_end + 1, len);
1353 shortbranch[len] = '\0';
1354 }
1355 else {
1356 Py_FatalError("bad HeadURL");
1357 return;
1358 }
1359 }
1360
1361
1362 svnversion = _Py_svnversion();
1363 if (strcmp(svnversion, "Unversioned directory") != 0 && strcmp(svnversion, "exported") != 0)
1364 svn_revision = svnversion;
1365 else if (istag) {
1366 len = strlen(_patchlevel_revision);
1367 assert(len >= 13);
1368 assert(len < (sizeof(patchlevel_revision) + 13));
1369 strncpy(patchlevel_revision, _patchlevel_revision + 11,
1370 len - 13);
1371 patchlevel_revision[len - 13] = '\0';
1372 svn_revision = patchlevel_revision;
1373 }
1374 else
1375 svn_revision = "";
1376
1377 svn_initialized = 1; 1321 svn_initialized = 1;
1322 *patchlevel_revision = '\0';
1323 strcpy(branch, "");
1324 strcpy(shortbranch, "unknown");
1325 svn_revision = "";
1378 } 1326 }
1379 1327
1380 /* Return svnversion output if available. 1328 /* Return svnversion output if available.
1381 Else return Revision of patchlevel.h if on branch. 1329 Else return Revision of patchlevel.h if on branch.
1382 Else return empty string */ 1330 Else return empty string */