Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Modify the check-in command to detect clock skew and abort if found. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8fdac87b688c3ea0cecc970364632b8b |
User & Date: | drh 2010-02-09 11:57:01 |
Context
2010-02-09
| ||
12:28 | Get the --latest option on the "co" command working when the current checkout is on a dead branch. Ticket [e42448edec1]. ... (check-in: c9894824 user: drh tags: trunk) | |
11:57 | Modify the check-in command to detect clock skew and abort if found. ... (check-in: 8fdac87b user: drh tags: trunk) | |
11:37 | Prevent a segfault in the graph computation due to time skew. The graph is still not drawn right, but at least it displays something now. ... (check-in: ff9efe30 user: drh tags: trunk) | |
Changes
Changes to src/checkin.c.
︙ | ︙ | |||
430 431 432 433 434 435 436 437 438 439 440 441 442 443 | @ WHERE tagid=%d AND rid=plink.pid), 'trunk') @ =coalesce((SELECT value FROM tagxref @ WHERE tagid=%d AND rid=plink.cid), 'trunk') ; rc = db_int(0, zSql, rid, TAG_BRANCH, TAG_BRANCH); return rc==0; } /* ** COMMAND: ci ** COMMAND: commit ** ** Usage: %fossil commit ?OPTIONS? ?FILE...? ** | > > > > > > > > > > > > > > > > > > > > > > | 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | @ WHERE tagid=%d AND rid=plink.pid), 'trunk') @ =coalesce((SELECT value FROM tagxref @ WHERE tagid=%d AND rid=plink.cid), 'trunk') ; rc = db_int(0, zSql, rid, TAG_BRANCH, TAG_BRANCH); return rc==0; } /* ** Make sure the current check-in with timestamp zDate is younger than its ** ancestor identified rid and zUuid. Throw a fatal error if not. */ static void checkin_verify_younger( int rid, /* The record ID of the ancestor */ const char *zUuid, /* The artifact ID of the ancestor */ const char *zDate /* Date & time of the current check-in */ ){ int b; b = db_exists( "SELECT 1 FROM event" " WHERE datetime(mtime)>=%Q" " AND type='ci' AND objid=%d", zDate, rid ); if( b ){ fossil_fatal("ancestor check-in [%.10s] (%s) is younger (clock skew?)", zUuid, zDate); } } /* ** COMMAND: ci ** COMMAND: commit ** ** Usage: %fossil commit ?OPTIONS? ?FILE...? ** |
︙ | ︙ | |||
659 660 661 662 663 664 665 666 667 668 669 670 671 672 | if( blob_size(&comment)==0 ){ blob_append(&comment, "(no comment)", -1); } blob_appendf(&manifest, "C %F\n", blob_str(&comment)); zDate = db_text(0, "SELECT datetime('%q')", zDateOvrd ? zDateOvrd : "now"); zDate[10] = 'T'; blob_appendf(&manifest, "D %s\n", zDate); db_prepare(&q, "SELECT pathname, uuid, origname, blob.rid" " FROM vfile JOIN blob ON vfile.mrid=blob.rid" " WHERE NOT deleted AND vfile.vid=%d" " ORDER BY 1", vid); blob_zero(&filename); blob_appendf(&filename, "%s", g.zLocalRoot); | > | 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 | if( blob_size(&comment)==0 ){ blob_append(&comment, "(no comment)", -1); } blob_appendf(&manifest, "C %F\n", blob_str(&comment)); zDate = db_text(0, "SELECT datetime('%q')", zDateOvrd ? zDateOvrd : "now"); zDate[10] = 'T'; blob_appendf(&manifest, "D %s\n", zDate); zDate[10] = ' '; db_prepare(&q, "SELECT pathname, uuid, origname, blob.rid" " FROM vfile JOIN blob ON vfile.mrid=blob.rid" " WHERE NOT deleted AND vfile.vid=%d" " ORDER BY 1", vid); blob_zero(&filename); blob_appendf(&filename, "%s", g.zLocalRoot); |
︙ | ︙ | |||
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 | } if( !g.markPrivate ) content_make_public(frid); } blob_reset(&filename); db_finalize(&q); zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid); blob_appendf(&manifest, "P %s", zUuid); db_prepare(&q2, "SELECT merge FROM vmerge WHERE id=:id"); db_bind_int(&q2, ":id", 0); while( db_step(&q2)==SQLITE_ROW ){ int mid = db_column_int(&q2, 0); if( !g.markPrivate && content_is_private(mid) ) continue; zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", mid); if( zUuid ){ blob_appendf(&manifest, " %s", zUuid); free(zUuid); } } db_reset(&q2); blob_appendf(&manifest, "\n"); blob_appendf(&manifest, "R %b\n", &cksum1); | > > | 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 | } if( !g.markPrivate ) content_make_public(frid); } blob_reset(&filename); db_finalize(&q); zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid); blob_appendf(&manifest, "P %s", zUuid); checkin_verify_younger(vid, zUuid, zDate); db_prepare(&q2, "SELECT merge FROM vmerge WHERE id=:id"); db_bind_int(&q2, ":id", 0); while( db_step(&q2)==SQLITE_ROW ){ int mid = db_column_int(&q2, 0); if( !g.markPrivate && content_is_private(mid) ) continue; zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", mid); if( zUuid ){ blob_appendf(&manifest, " %s", zUuid); checkin_verify_younger(mid, zUuid, zDate); free(zUuid); } } db_reset(&q2); blob_appendf(&manifest, "\n"); blob_appendf(&manifest, "R %b\n", &cksum1); |
︙ | ︙ |