Show More
@@ -448,11 +448,51 error: | |||
|
448 | 448 | abortmsg("failed to prepare pager (errno = %d)", errno); |
|
449 | 449 | } |
|
450 | 450 | |
|
451 | /* | |
|
452 | * Test whether the command is unsupported or not. This is not designed to | |
|
453 | * cover all cases. But it's fast, does not depend on the server and does | |
|
454 | * not return false positives. | |
|
455 | */ | |
|
456 | static int isunsupported(int argc, const char *argv[]) | |
|
457 | { | |
|
458 | enum { | |
|
459 | SERVE = 1, | |
|
460 | DAEMON = 2, | |
|
461 | SERVEDAEMON = SERVE | DAEMON, | |
|
462 | TIME = 4, | |
|
463 | }; | |
|
464 | unsigned int state = 0; | |
|
465 | int i; | |
|
466 | for (i = 0; i < argc; ++i) { | |
|
467 | if (strcmp(argv[i], "--") == 0) | |
|
468 | break; | |
|
469 | if (i == 0 && strcmp("serve", argv[i]) == 0) | |
|
470 | state |= SERVE; | |
|
471 | else if (strcmp("-d", argv[i]) == 0 || | |
|
472 | strcmp("--daemon", argv[i]) == 0) | |
|
473 | state |= DAEMON; | |
|
474 | else if (strcmp("--time", argv[i]) == 0) | |
|
475 | state |= TIME; | |
|
476 | } | |
|
477 | return (state & TIME) == TIME || | |
|
478 | (state & SERVEDAEMON) == SERVEDAEMON; | |
|
479 | } | |
|
480 | ||
|
481 | static void execoriginalhg(const char *argv[]) | |
|
482 | { | |
|
483 | debugmsg("execute original hg"); | |
|
484 | if (execvp(gethgcmd(), (char **)argv) < 0) | |
|
485 | abortmsg("failed to exec original hg (errno = %d)", errno); | |
|
486 | } | |
|
487 | ||
|
451 | 488 | int main(int argc, const char *argv[], const char *envp[]) |
|
452 | 489 | { |
|
453 | 490 | if (getenv("CHGDEBUG")) |
|
454 | 491 | enabledebugmsg(); |
|
455 | 492 | |
|
493 | if (isunsupported(argc - 1, argv + 1)) | |
|
494 | execoriginalhg(argv); | |
|
495 | ||
|
456 | 496 | struct cmdserveropts opts; |
|
457 | 497 | initcmdserveropts(&opts); |
|
458 | 498 | setcmdserveropts(&opts); |
General Comments 0
You need to be logged in to leave comments.
Login now