1068 env["HGUSER"] = "test" |
1069 env["HGUSER"] = "test" |
1069 env["HGENCODING"] = "ascii" |
1070 env["HGENCODING"] = "ascii" |
1070 env["HGENCODINGMODE"] = "strict" |
1071 env["HGENCODINGMODE"] = "strict" |
1071 env["HGHOSTNAME"] = "test-hostname" |
1072 env["HGHOSTNAME"] = "test-hostname" |
1072 env['HGIPV6'] = str(int(self._useipv6)) |
1073 env['HGIPV6'] = str(int(self._useipv6)) |
|
1074 if 'HGCATAPULTSERVERPIPE' not in env: |
|
1075 env['HGCATAPULTSERVERPIPE'] = '/dev/null' |
1073 |
1076 |
1074 extraextensions = [] |
1077 extraextensions = [] |
1075 for opt in self._extraconfigopts: |
1078 for opt in self._extraconfigopts: |
1076 section, key = opt.encode('utf-8').split(b'.', 1) |
1079 section, key = opt.encode('utf-8').split(b'.', 1) |
1077 if section != 'extensions': |
1080 if section != 'extensions': |
1342 def addsalt(line, inpython): |
1345 def addsalt(line, inpython): |
1343 if inpython: |
1346 if inpython: |
1344 script.append(b'%s %d 0\n' % (salt, line)) |
1347 script.append(b'%s %d 0\n' % (salt, line)) |
1345 else: |
1348 else: |
1346 script.append(b'echo %s %d $?\n' % (salt, line)) |
1349 script.append(b'echo %s %d $?\n' % (salt, line)) |
|
1350 active = [] |
|
1351 session = str(uuid.uuid4()) |
|
1352 if PYTHON3: |
|
1353 session = session.encode('ascii') |
|
1354 def toggletrace(cmd): |
|
1355 quoted = shellquote(cmd.strip()).replace(b'\\', b'\\\\') |
|
1356 if active: |
|
1357 script.append( |
|
1358 b'echo END %s %s >> "$HGCATAPULTSERVERPIPE"\n' % ( |
|
1359 session, active[0])) |
|
1360 script.append( |
|
1361 b'echo START %s %s >> "$HGCATAPULTSERVERPIPE"\n' % ( |
|
1362 session, quoted)) |
|
1363 active[0:] = [quoted] |
1347 |
1364 |
1348 script = [] |
1365 script = [] |
1349 |
1366 |
1350 # After we run the shell script, we re-unify the script output |
1367 # After we run the shell script, we re-unify the script output |
1351 # with non-active parts of the source, with synchronization by our |
1368 # with non-active parts of the source, with synchronization by our |
1369 script.append(b'set -x\n') |
1386 script.append(b'set -x\n') |
1370 if self._hgcommand != b'hg': |
1387 if self._hgcommand != b'hg': |
1371 script.append(b'alias hg="%s"\n' % self._hgcommand) |
1388 script.append(b'alias hg="%s"\n' % self._hgcommand) |
1372 if os.getenv('MSYSTEM'): |
1389 if os.getenv('MSYSTEM'): |
1373 script.append(b'alias pwd="pwd -W"\n') |
1390 script.append(b'alias pwd="pwd -W"\n') |
|
1391 |
|
1392 if os.getenv('HGCATAPULTSERVERPIPE'): |
|
1393 # Kludge: use a while loop to keep the pipe from getting |
|
1394 # closed by our echo commands. The still-running file gets |
|
1395 # reaped at the end of the script, which causes the while |
|
1396 # loop to exit and closes the pipe. Sigh. |
|
1397 script.append( |
|
1398 b'rtendtracing() {\n' |
|
1399 b' echo END %(session)s %(name)s >> $HGCATAPULTSERVERPIPE\n' |
|
1400 b' rm -f "$TESTTMP/.still-running"\n' |
|
1401 b'}\n' |
|
1402 b'trap "rtendtracing" 0\n' |
|
1403 b'touch "$TESTTMP/.still-running"\n' |
|
1404 b'while [ -f "$TESTTMP/.still-running" ]; do sleep 1; done ' |
|
1405 b'> $HGCATAPULTSERVERPIPE &\n' |
|
1406 b'HGCATAPULTSESSION=%(session)s ; export HGCATAPULTSESSION\n' |
|
1407 b'echo START %(session)s %(name)s >> $HGCATAPULTSERVERPIPE\n' |
|
1408 % { |
|
1409 'name': self.name, |
|
1410 'session': session, |
|
1411 } |
|
1412 ) |
|
1413 |
1374 if self._case: |
1414 if self._case: |
1375 casestr = b'#'.join(self._case) |
1415 casestr = b'#'.join(self._case) |
1376 if isinstance(self._case, str): |
1416 if isinstance(self._case, str): |
1377 quoted = shellquote(casestr) |
1417 quoted = shellquote(casestr) |
1378 else: |
1418 else: |
1434 inpython = False |
1474 inpython = False |
1435 after.setdefault(pos, []).append(l) |
1475 after.setdefault(pos, []).append(l) |
1436 prepos = pos |
1476 prepos = pos |
1437 pos = n |
1477 pos = n |
1438 addsalt(n, False) |
1478 addsalt(n, False) |
1439 cmd = l[4:].split() |
1479 rawcmd = l[4:] |
|
1480 cmd = rawcmd.split() |
|
1481 toggletrace(rawcmd) |
1440 if len(cmd) == 2 and cmd[0] == b'cd': |
1482 if len(cmd) == 2 and cmd[0] == b'cd': |
1441 l = b' $ cd %s || exit 1\n' % cmd[1] |
1483 l = b' $ cd %s || exit 1\n' % cmd[1] |
1442 script.append(l[4:]) |
1484 script.append(rawcmd) |
1443 elif l.startswith(b' > '): # continuations |
1485 elif l.startswith(b' > '): # continuations |
1444 after.setdefault(prepos, []).append(l) |
1486 after.setdefault(prepos, []).append(l) |
1445 script.append(l[4:]) |
1487 script.append(l[4:]) |
1446 elif l.startswith(b' '): # results |
1488 elif l.startswith(b' '): # results |
1447 # Queue up a list of expected results. |
1489 # Queue up a list of expected results. |
1456 if inpython: |
1498 if inpython: |
1457 script.append(b'EOF\n') |
1499 script.append(b'EOF\n') |
1458 if skipping is not None: |
1500 if skipping is not None: |
1459 after.setdefault(pos, []).append(' !!! missing #endif\n') |
1501 after.setdefault(pos, []).append(' !!! missing #endif\n') |
1460 addsalt(n + 1, False) |
1502 addsalt(n + 1, False) |
1461 |
|
1462 return salt, script, after, expected |
1503 return salt, script, after, expected |
1463 |
1504 |
1464 def _processoutput(self, exitcode, output, salt, after, expected): |
1505 def _processoutput(self, exitcode, output, salt, after, expected): |
1465 # Merge the script output back into a unified test. |
1506 # Merge the script output back into a unified test. |
1466 warnonly = 1 # 1: not yet; 2: yes; 3: for sure not |
1507 warnonly = 1 # 1: not yet; 2: yes; 3: for sure not |