Fossil SCM
Add warning to "fossil sync", when a new fork is created during this sync.
Commit
560483f50436c9f7edfe5399209e68968b807e83
Parent
d32ca5928223a44…
2 files changed
+29
+4
+29
| --- src/merge.c | ||
| +++ src/merge.c | ||
| @@ -98,10 +98,39 @@ | ||
| 98 | 98 | rid = db_column_int(&q, 0); |
| 99 | 99 | } |
| 100 | 100 | db_finalize(&q); |
| 101 | 101 | return rid; |
| 102 | 102 | } |
| 103 | + | |
| 104 | +/* | |
| 105 | +** Check content that was received with rcvid and return true if any | |
| 106 | +** fork was created. | |
| 107 | +*/ | |
| 108 | +int fossil_any_has_fork(int rcvid){ | |
| 109 | + static Stmt q; | |
| 110 | + int fForkSeen = 0; | |
| 111 | + | |
| 112 | + db_static_prepare(&q, | |
| 113 | + " SELECT pid FROM plink WHERE pid>0 AND isprim" | |
| 114 | + " AND cid IN (SELECT blob.rid FROM blob" | |
| 115 | + " WHERE rcvid=:rcvid)"); | |
| 116 | + db_bind_int(&q, ":rcvid", rcvid); | |
| 117 | + while( !fForkSeen && db_step(&q)==SQLITE_ROW ){ | |
| 118 | + int pid = db_column_int(&q, 0); | |
| 119 | + if( count_nonbranch_children(pid)>1 ){ | |
| 120 | + compute_leaves(pid,1); | |
| 121 | + if( db_int(0, "SELECT count(*) FROM leaves")>1 ){ | |
| 122 | + int rid = db_int(0, "SELECT rid FROM leaves, event" | |
| 123 | + " WHERE event.objid=leaves.rid" | |
| 124 | + " ORDER BY event.mtime DESC LIMIT 1"); | |
| 125 | + fForkSeen = fossil_find_nearest_fork(rid, db_open_local(0))!=0; | |
| 126 | + } | |
| 127 | + } | |
| 128 | + } | |
| 129 | + db_finalize(&q); | |
| 130 | + return fForkSeen; | |
| 131 | +} | |
| 103 | 132 | |
| 104 | 133 | /* |
| 105 | 134 | ** COMMAND: merge |
| 106 | 135 | ** |
| 107 | 136 | ** Usage: %fossil merge ?OPTIONS? ?VERSION? |
| 108 | 137 |
| --- src/merge.c | |
| +++ src/merge.c | |
| @@ -98,10 +98,39 @@ | |
| 98 | rid = db_column_int(&q, 0); |
| 99 | } |
| 100 | db_finalize(&q); |
| 101 | return rid; |
| 102 | } |
| 103 | |
| 104 | /* |
| 105 | ** COMMAND: merge |
| 106 | ** |
| 107 | ** Usage: %fossil merge ?OPTIONS? ?VERSION? |
| 108 |
| --- src/merge.c | |
| +++ src/merge.c | |
| @@ -98,10 +98,39 @@ | |
| 98 | rid = db_column_int(&q, 0); |
| 99 | } |
| 100 | db_finalize(&q); |
| 101 | return rid; |
| 102 | } |
| 103 | |
| 104 | /* |
| 105 | ** Check content that was received with rcvid and return true if any |
| 106 | ** fork was created. |
| 107 | */ |
| 108 | int fossil_any_has_fork(int rcvid){ |
| 109 | static Stmt q; |
| 110 | int fForkSeen = 0; |
| 111 | |
| 112 | db_static_prepare(&q, |
| 113 | " SELECT pid FROM plink WHERE pid>0 AND isprim" |
| 114 | " AND cid IN (SELECT blob.rid FROM blob" |
| 115 | " WHERE rcvid=:rcvid)"); |
| 116 | db_bind_int(&q, ":rcvid", rcvid); |
| 117 | while( !fForkSeen && db_step(&q)==SQLITE_ROW ){ |
| 118 | int pid = db_column_int(&q, 0); |
| 119 | if( count_nonbranch_children(pid)>1 ){ |
| 120 | compute_leaves(pid,1); |
| 121 | if( db_int(0, "SELECT count(*) FROM leaves")>1 ){ |
| 122 | int rid = db_int(0, "SELECT rid FROM leaves, event" |
| 123 | " WHERE event.objid=leaves.rid" |
| 124 | " ORDER BY event.mtime DESC LIMIT 1"); |
| 125 | fForkSeen = fossil_find_nearest_fork(rid, db_open_local(0))!=0; |
| 126 | } |
| 127 | } |
| 128 | } |
| 129 | db_finalize(&q); |
| 130 | return fForkSeen; |
| 131 | } |
| 132 | |
| 133 | /* |
| 134 | ** COMMAND: merge |
| 135 | ** |
| 136 | ** Usage: %fossil merge ?OPTIONS? ?VERSION? |
| 137 |
+4
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -1971,8 +1971,12 @@ | ||
| 1971 | 1971 | if( nErr && go==2 ){ |
| 1972 | 1972 | db_multi_exec("DROP TABLE onremote"); |
| 1973 | 1973 | manifest_crosslink_end(MC_PERMIT_HOOKS); |
| 1974 | 1974 | content_enable_dephantomize(1); |
| 1975 | 1975 | db_end_transaction(0); |
| 1976 | + } | |
| 1977 | + if( (syncFlags & SYNC_CLONE)==0 && fossil_any_has_fork(g.rcvid) ){ | |
| 1978 | + fossil_warning("***** WARNING: a fork has occurred ***** use " | |
| 1979 | + "\"fossil forks\" for more details."); | |
| 1976 | 1980 | } |
| 1977 | 1981 | return nErr; |
| 1978 | 1982 | } |
| 1979 | 1983 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1971,8 +1971,12 @@ | |
| 1971 | if( nErr && go==2 ){ |
| 1972 | db_multi_exec("DROP TABLE onremote"); |
| 1973 | manifest_crosslink_end(MC_PERMIT_HOOKS); |
| 1974 | content_enable_dephantomize(1); |
| 1975 | db_end_transaction(0); |
| 1976 | } |
| 1977 | return nErr; |
| 1978 | } |
| 1979 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1971,8 +1971,12 @@ | |
| 1971 | if( nErr && go==2 ){ |
| 1972 | db_multi_exec("DROP TABLE onremote"); |
| 1973 | manifest_crosslink_end(MC_PERMIT_HOOKS); |
| 1974 | content_enable_dephantomize(1); |
| 1975 | db_end_transaction(0); |
| 1976 | } |
| 1977 | if( (syncFlags & SYNC_CLONE)==0 && fossil_any_has_fork(g.rcvid) ){ |
| 1978 | fossil_warning("***** WARNING: a fork has occurred ***** use " |
| 1979 | "\"fossil forks\" for more details."); |
| 1980 | } |
| 1981 | return nErr; |
| 1982 | } |
| 1983 |