PageRenderTime 45ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 1ms

/monotone-1.0/test/func/conflict_messages/__driver__.lua

#
Lua | 1034 lines | 648 code | 345 blank | 41 comment | 2 complexity | a785a17930ddaa5f7f82665df7eef6cf MD5 | raw file
Possible License(s): GPL-2.0
  1. mtn_setup()
  2. -- this test creates the various non-content conflict cases
  3. -- and attempts to merge them to check the various messages
  4. function setup(branch)
  5. remove("_MTN")
  6. remove("foo")
  7. remove("bar")
  8. remove("baz")
  9. remove(branch)
  10. check(mtn("setup", ".", "--branch", branch), 0, false, false)
  11. end
  12. -- missing root conflict
  13. branch = "missing-root"
  14. setup(branch)
  15. mkdir("foo")
  16. addfile("foo/foo", branch .. "-foofoo")
  17. commit(branch)
  18. base = base_revision()
  19. check(mtn("co", "--branch", branch, branch), 0, false, false)
  20. check(indir(branch, mtn("pivot_root", "foo", "bar")), 0, true, true)
  21. --check(indir(branch, mtn("drop", "--recursive", "bar")), 0, true, true)
  22. check(indir(branch, mtn("commit", "--message", "commit")), 0, false, false)
  23. first = indir(branch, {base_revision})[1]()
  24. check(mtn("drop", "--recursive", "foo"), 0, false, false)
  25. message = "conflict: missing root directory"
  26. check(mtn("update"), 1, false, true)
  27. check(qgrep(message, "stderr"))
  28. commit(branch .. "-propagate")
  29. second = base_revision()
  30. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  31. check(qgrep(message, "stderr"))
  32. check(mtn("cert", second, "branch", branch))
  33. check(mtn("show_conflicts", first, second), 0, false, true)
  34. check(qgrep(message, "stderr"))
  35. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  36. check(qgrep(message, "stderr"))
  37. check(mtn("merge", "--branch", branch), 1, false, true)
  38. check(qgrep(message, "stderr"))
  39. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  40. check(qgrep(message, "stderr"))
  41. check(mtn("merge_into_workspace", first), 1, false, true)
  42. check(qgrep(message, "stderr"))
  43. -- invalid name add
  44. branch = "invalid-add"
  45. setup(branch)
  46. mkdir("foo")
  47. addfile("foo/foo", branch .. "-foofoo")
  48. commit(branch)
  49. base = base_revision()
  50. check(mtn("co", "--branch", branch, branch), 0, false, false)
  51. check(indir(branch, mtn("pivot_root", "foo", "bar")), 0, true, true)
  52. check(indir(branch, mtn("commit", "--message", "commit")), 0, false, false)
  53. first = indir(branch, {base_revision})[1]()
  54. mkdir("foo/_MTN")
  55. addfile("foo/_MTN/foo", branch .. "-foo")
  56. addfile("foo/_MTN/bar", branch .. "-bar")
  57. message = "conflict: invalid name"
  58. check(mtn("update"), 1, false, true)
  59. check(qgrep(message, "stderr"))
  60. commit(branch .. "-propagate")
  61. second = base_revision()
  62. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  63. check(qgrep(message, "stderr"))
  64. check(mtn("cert", second, "branch", branch))
  65. check(mtn("show_conflicts", first, second), 0, false, true)
  66. check(qgrep(message, "stderr"))
  67. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  68. check(qgrep(message, "stderr"))
  69. check(mtn("merge", "--branch", branch), 1, false, true)
  70. check(qgrep(message, "stderr"))
  71. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  72. check(qgrep(message, "stderr"))
  73. check(mtn("merge_into_workspace", first), 1, false, true)
  74. check(qgrep(message, "stderr"))
  75. -- invalid name rename
  76. branch = "invalid-rename"
  77. setup(branch)
  78. mkdir("foo")
  79. mkdir("bad")
  80. addfile("foo/foo", branch .. "-foofoo")
  81. addfile("bad/_MTN", branch .. "--bar")
  82. commit(branch)
  83. base = base_revision()
  84. check(mtn("co", "--branch", branch, branch), 0, false, false)
  85. check(indir(branch, mtn("pivot_root", "foo", "bar")), 0, true, true)
  86. check(indir(branch, mtn("commit", "--message", "commit")), 0, false, false)
  87. first = indir(branch, {base_revision})[1]()
  88. check(mtn("mv", "bad/_MTN", "foo/_MTN"), 0, false, false)
  89. message = "conflict: invalid name"
  90. check(mtn("update"), 1, false, true)
  91. check(qgrep(message, "stderr"))
  92. commit(branch .. "-propagate")
  93. second = base_revision()
  94. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  95. check(qgrep(message, "stderr"))
  96. check(mtn("cert", second, "branch", branch))
  97. check(mtn("show_conflicts", first, second), 0, false, true)
  98. check(qgrep(message, "stderr"))
  99. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  100. check(qgrep(message, "stderr"))
  101. check(mtn("merge", "--branch", branch), 1, false, true)
  102. check(qgrep(message, "stderr"))
  103. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  104. check(qgrep(message, "stderr"))
  105. check(mtn("merge_into_workspace", first), 1, false, true)
  106. check(qgrep(message, "stderr"))
  107. -- directory loop conflict
  108. branch = "directory-loop"
  109. setup(branch)
  110. mkdir("foo")
  111. mkdir("bar")
  112. addfile("foo/foo", branch .. "-foofoo")
  113. addfile("bar/bar", branch .. "-barbar")
  114. commit(branch)
  115. base = base_revision()
  116. check(mtn("mv", "foo", "bar"), 0, false, false)
  117. commit(branch)
  118. first = base_revision()
  119. revert_to(base)
  120. check(mtn("mv", "bar", "foo"), 0, false, false)
  121. message = "conflict: directory loop"
  122. check(mtn("update"), 1, false, true)
  123. check(qgrep(message, "stderr"))
  124. commit(branch .. "-propagate")
  125. second = base_revision()
  126. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  127. check(qgrep(message, "stderr"))
  128. check(mtn("cert", second, "branch", branch))
  129. check(mtn("show_conflicts", first, second), 0, false, true)
  130. check(qgrep(message, "stderr"))
  131. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  132. check(qgrep(message, "stderr"))
  133. check(mtn("merge", "--branch", branch), 1, false, true)
  134. check(qgrep(message, "stderr"))
  135. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  136. check(qgrep(message, "stderr"))
  137. check(mtn("merge_into_workspace", first), 1, false, true)
  138. check(qgrep(message, "stderr"))
  139. -- orphaned add
  140. branch = "orphaned-add"
  141. setup(branch)
  142. mkdir("foo")
  143. addfile("foo/foo", branch .. "-foofoo")
  144. commit(branch)
  145. base = base_revision()
  146. addfile("foo/bar", branch .. "-foobar")
  147. commit(branch)
  148. check(mtn("mv", "foo/bar", "foo/baz"), 0, false, false)
  149. commit(branch)
  150. first = base_revision()
  151. revert_to(base)
  152. remove("foo")
  153. check(mtn("drop", "--recursive", "foo"), 0, false, false)
  154. message = "conflict: orphaned file"
  155. check(mtn("update"), 1, false, true)
  156. check(qgrep(message, "stderr"))
  157. commit(branch .. "-propagate")
  158. second = base_revision()
  159. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  160. check(qgrep(message, "stderr"))
  161. check(mtn("cert", second, "branch", branch))
  162. check(mtn("show_conflicts", first, second), 0, false, true)
  163. check(qgrep(message, "stderr"))
  164. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  165. check(qgrep(message, "stderr"))
  166. check(mtn("merge", "--branch", branch), 1, false, true)
  167. check(qgrep(message, "stderr"))
  168. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  169. check(qgrep(message, "stderr"))
  170. check(mtn("merge_into_workspace", first), 1, false, true)
  171. check(qgrep(message, "stderr"))
  172. -- orphaned rename
  173. branch = "orphaned-rename"
  174. setup(branch)
  175. mkdir("foo")
  176. addfile("foo/foo", branch .. "-foofoo")
  177. addfile("bar", branch .. "-bar")
  178. commit(branch)
  179. base = base_revision()
  180. check(mtn("mv", "bar", "foo/bar"), 0, false, false)
  181. commit(branch)
  182. check(mtn("mv", "foo/bar", "foo/baz"), 0, false, false)
  183. commit(branch)
  184. first = base_revision()
  185. revert_to(base)
  186. remove("foo")
  187. check(mtn("drop", "--recursive", "foo"), 0, false, false)
  188. message = "conflict: orphaned file"
  189. check(mtn("update"), 1, false, true)
  190. check(qgrep(message, "stderr"))
  191. commit(branch .. "-propagate")
  192. second = base_revision()
  193. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  194. check(qgrep(message, "stderr"))
  195. check(mtn("cert", second, "branch", branch))
  196. check(mtn("show_conflicts", first, second), 0, false, true)
  197. check(qgrep(message, "stderr"))
  198. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  199. check(qgrep(message, "stderr"))
  200. check(mtn("merge", "--branch", branch), 1, false, true)
  201. check(qgrep(message, "stderr"))
  202. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  203. check(qgrep(message, "stderr"))
  204. check(mtn("merge_into_workspace", first), 1, false, true)
  205. check(qgrep(message, "stderr"))
  206. -- multiple name conflict
  207. branch = "multiple-names"
  208. setup(branch)
  209. addfile("foo", branch .. "-foo")
  210. commit(branch)
  211. base = base_revision()
  212. check(mtn("mv", "foo", "bar"), 0, false, false)
  213. commit(branch)
  214. first = base_revision()
  215. revert_to(base)
  216. check(mtn("mv", "foo", "baz"), 0, false, false)
  217. message = "conflict: multiple names"
  218. check(mtn("update"), 1, false, true)
  219. check(qgrep(message, "stderr"))
  220. commit(branch .. "-propagate")
  221. second = base_revision()
  222. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  223. check(qgrep(message, "stderr"))
  224. check(mtn("cert", second, "branch", branch))
  225. check(mtn("show_conflicts", first, second), 0, false, true)
  226. check(qgrep(message, "stderr"))
  227. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  228. check(qgrep(message, "stderr"))
  229. check(mtn("merge", "--branch", branch), 1, false, true)
  230. check(qgrep(message, "stderr"))
  231. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  232. check(qgrep(message, "stderr"))
  233. check(mtn("merge_into_workspace", first), 1, false, true)
  234. check(qgrep(message, "stderr"))
  235. -- duplicate name conflict (adds)
  236. branch = "duplicate-adds"
  237. setup(branch)
  238. addfile("foo", branch .. "-foo")
  239. commit(branch)
  240. base = base_revision()
  241. addfile("xxx", branch .. "-xxx")
  242. commit(branch)
  243. check(mtn("mv", "xxx", "bar"), 0, false, false)
  244. --addfile("bar", "duplicate add bar1")
  245. commit(branch)
  246. first = base_revision()
  247. revert_to(base)
  248. addfile("bar", branch .. "-bar2")
  249. message = "conflict: duplicate name"
  250. check(mtn("update"), 1, false, true)
  251. check(qgrep(message, "stderr"))
  252. commit(branch .. "-propagate")
  253. second = base_revision()
  254. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  255. check(qgrep(message, "stderr"))
  256. check(mtn("cert", second, "branch", branch))
  257. check(mtn("show_conflicts", first, second), 0, false, true)
  258. check(qgrep(message, "stderr"))
  259. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  260. check(qgrep(message, "stderr"))
  261. check(mtn("merge", "--branch", branch), 1, false, true)
  262. check(qgrep(message, "stderr"))
  263. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  264. check(qgrep(message, "stderr"))
  265. check(mtn("merge_into_workspace", first), 1, false, true)
  266. check(qgrep(message, "stderr"))
  267. -- duplicate name conflict (renames)
  268. branch = "duplicate-renames"
  269. setup(branch)
  270. addfile("foo", branch .. "-foo")
  271. addfile("bar", branch .. "-bar")
  272. commit(branch)
  273. base = base_revision()
  274. check(mtn("mv", "foo", "abc"), 0, false, false)
  275. commit(branch)
  276. first = base_revision()
  277. revert_to(base)
  278. check(mtn("mv", "bar", "abc"), 0, false, false)
  279. message = "conflict: duplicate name"
  280. check(mtn("update"), 1, false, true)
  281. check(qgrep(message, "stderr"))
  282. commit(branch .. "-propagate")
  283. second = base_revision()
  284. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  285. check(qgrep(message, "stderr"))
  286. check(mtn("cert", second, "branch", branch))
  287. check(mtn("show_conflicts", first, second), 0, false, true)
  288. check(qgrep(message, "stderr"))
  289. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  290. check(qgrep(message, "stderr"))
  291. check(mtn("merge", "--branch", branch), 1, false, true)
  292. check(qgrep(message, "stderr"))
  293. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  294. check(qgrep(message, "stderr"))
  295. check(mtn("merge_into_workspace", first), 1, false, true)
  296. check(qgrep(message, "stderr"))
  297. -- duplicate name conflict (add-rename)
  298. branch = "duplicate-add-rename"
  299. setup(branch)
  300. addfile("foo", branch .. "-foo")
  301. commit(branch)
  302. base = base_revision()
  303. check(mtn("mv", "foo", "bar"), 0, false, false)
  304. commit(branch)
  305. first = base_revision()
  306. revert_to(base)
  307. addfile("bar", branch .. "-bar")
  308. message = "conflict: duplicate name"
  309. check(mtn("update"), 1, false, true)
  310. check(qgrep(message, "stderr"))
  311. commit(branch .. "-propagate")
  312. second = base_revision()
  313. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  314. check(qgrep(message, "stderr"))
  315. check(mtn("cert", second, "branch", branch))
  316. check(mtn("show_conflicts", first, second), 0, false, true)
  317. check(qgrep(message, "stderr"))
  318. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  319. check(qgrep(message, "stderr"))
  320. check(mtn("merge", "--branch", branch), 1, false, true)
  321. check(qgrep(message, "stderr"))
  322. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  323. check(qgrep(message, "stderr"))
  324. check(mtn("merge_into_workspace", first), 1, false, true)
  325. check(qgrep(message, "stderr"))
  326. -- attribute conflict on attached node
  327. branch = "attribute-attached"
  328. setup(branch)
  329. addfile("foo", branch .. "-foo")
  330. check(mtn("attr", "set", "foo", "attr1", "value1"), 0, false, false)
  331. check(mtn("attr", "set", "foo", "attr2", "value2"), 0, false, false)
  332. commit(branch)
  333. base = base_revision()
  334. check(mtn("attr", "set", "foo", "attr1", "valueX"), 0, false, false)
  335. check(mtn("attr", "set", "foo", "attr2", "valueY"), 0, false, false)
  336. commit(branch)
  337. first = base_revision()
  338. revert_to(base)
  339. check(mtn("attr", "set", "foo", "attr1", "valueZ"), 0, false, false)
  340. check(mtn("attr", "drop", "foo", "attr2"), 0, false, false)
  341. message = "conflict: multiple values for attribute"
  342. check(mtn("update"), 1, false, true)
  343. check(qgrep(message, "stderr"))
  344. commit(branch .. "-propagate")
  345. second = base_revision()
  346. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  347. check(qgrep(message, "stderr"))
  348. check(mtn("cert", second, "branch", branch))
  349. check(mtn("show_conflicts", first, second), 0, false, true)
  350. check(qgrep(message, "stderr"))
  351. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  352. check(qgrep(message, "stderr"))
  353. check(mtn("merge", "--branch", branch), 1, false, true)
  354. check(qgrep(message, "stderr"))
  355. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  356. check(qgrep(message, "stderr"))
  357. check(mtn("merge_into_workspace", first), 1, false, true)
  358. check(qgrep(message, "stderr"))
  359. -- attribute conflict on detached node
  360. branch = "attribute-detached"
  361. setup(branch)
  362. addfile("foo", branch .. "-foo")
  363. check(mtn("attr", "set", "foo", "attr1", "value1"), 0, false, false)
  364. check(mtn("attr", "set", "foo", "attr2", "value2"), 0, false, false)
  365. commit(branch)
  366. base = base_revision()
  367. check(mtn("attr", "set", "foo", "attr1", "valueX"), 0, false, false)
  368. check(mtn("attr", "set", "foo", "attr2", "valueY"), 0, false, false)
  369. check(mtn("mv", "foo", "bar"), 0, false, false)
  370. commit(branch)
  371. first = base_revision()
  372. revert_to(base)
  373. check(mtn("attr", "set", "foo", "attr1", "valueZ"), 0, false, false)
  374. check(mtn("attr", "drop", "foo", "attr2"), 0, false, false)
  375. check(mtn("mv", "foo", "baz"), 0, false, false)
  376. message = "conflict: multiple values for attribute"
  377. check(mtn("update"), 1, false, true)
  378. check(qgrep(message, "stderr"))
  379. commit(branch .. "-propagate")
  380. second = base_revision()
  381. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  382. check(qgrep(message, "stderr"))
  383. check(mtn("cert", second, "branch", branch))
  384. check(mtn("show_conflicts", first, second), 0, false, true)
  385. check(qgrep(message, "stderr"))
  386. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  387. check(qgrep(message, "stderr"))
  388. check(mtn("merge", "--branch", branch), 1, false, true)
  389. check(qgrep(message, "stderr"))
  390. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  391. check(qgrep(message, "stderr"))
  392. check(mtn("merge_into_workspace", first), 1, false, true)
  393. check(qgrep(message, "stderr"))
  394. -- content conflict on attached node
  395. branch = "content-attached"
  396. setup(branch)
  397. addfile("foo", branch .. "-foo")
  398. addfile("bar", branch .. "-bar\none\ntwo\nthree")
  399. addfile("baz", branch .. "-baz\naaa\nbbb\nccc")
  400. commit(branch)
  401. base = base_revision()
  402. writefile("foo", branch .. "-foo first revision")
  403. writefile("bar", branch .. "-bar\nzero\none\ntwo\nthree")
  404. writefile("baz", branch .. "-baz\nAAA\nbbb\nccc")
  405. commit(branch)
  406. first = base_revision()
  407. revert_to(base)
  408. writefile("foo", branch .. "-foo second revision")
  409. writefile("bar", branch .. "-bar\none\ntwo\nthree\nfour")
  410. writefile("baz", branch .. "-baz\naaa\nbbb\nCCC")
  411. message = "conflict: content conflict on file 'foo'"
  412. check(mtn("update"), 1, false, true)
  413. check(qgrep(message, "stderr"))
  414. check(not qgrep("conflict: content conflict on file 'bar'", "stderr"))
  415. check(not qgrep("conflict: content conflict on file 'baz'", "stderr"))
  416. commit(branch .. "-propagate")
  417. second = base_revision()
  418. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  419. check(qgrep(message, "stderr"))
  420. check(mtn("cert", second, "branch", branch))
  421. check(mtn("show_conflicts", first, second), 0, false, true)
  422. check(qgrep(message, "stderr"))
  423. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  424. check(qgrep(message, "stderr"))
  425. check(mtn("merge", "--branch", branch), 1, false, true)
  426. check(qgrep(message, "stderr"))
  427. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  428. check(qgrep(message, "stderr"))
  429. check(mtn("merge_into_workspace", first), 1, false, true)
  430. check(qgrep(message, "stderr"))
  431. -- content conflict on detached node
  432. branch = "content-detached"
  433. setup(branch)
  434. addfile("foo", branch .. "-foo")
  435. commit(branch)
  436. base = base_revision()
  437. writefile("foo", "foo first revision")
  438. check(mtn("mv", "foo", "bar"), 0, false, false)
  439. commit(branch)
  440. first = base_revision()
  441. revert_to(base)
  442. writefile("foo", "foo second revision")
  443. check(mtn("mv", "foo", "baz"), 0, false, false)
  444. message = "conflict: content conflict on file"
  445. check(mtn("update"), 1, false, true)
  446. check(qgrep(message, "stderr"))
  447. commit(branch .. "-propagate")
  448. second = base_revision()
  449. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  450. check(qgrep(message, "stderr"))
  451. check(mtn("cert", second, "branch", branch))
  452. check(mtn("show_conflicts", first, second), 0, false, true)
  453. check(qgrep(message, "stderr"))
  454. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  455. check(qgrep(message, "stderr"))
  456. check(mtn("merge", "--branch", branch), 1, false, true)
  457. check(qgrep(message, "stderr"))
  458. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  459. check(qgrep(message, "stderr"))
  460. check(mtn("merge_into_workspace", first), 1, false, true)
  461. check(qgrep(message, "stderr"))
  462. -- complex_structural_conflicts cases from roster_merge.cc unit tests
  463. -- multiple name plus duplicate name
  464. branch = "multiple-name-plus-duplicate-name"
  465. setup(branch)
  466. addfile("foo", branch .. "-foo")
  467. commit(branch)
  468. base = base_revision()
  469. check(mtn("mv", "foo", "aaa"), 0, false, false)
  470. addfile("bbb", branch .. "-bbb")
  471. commit(branch)
  472. first = base_revision()
  473. revert_to(base)
  474. remove("aaa")
  475. remove("bbb")
  476. check(mtn("mv", "foo", "bbb"), 0, false, false)
  477. addfile("aaa", branch .. "-aaa")
  478. message1 = "conflict: multiple names"
  479. message2 = "conflict: duplicate name"
  480. -- this doesn't result in a duplicate name conflict because the multiple name
  481. -- conflict prevents foo from being attached in the result roster
  482. check(mtn("update"), 1, false, true)
  483. check(qgrep(message1, "stderr"))
  484. check(not qgrep(message2, "stderr"))
  485. commit(branch .. "-propagate")
  486. second = base_revision()
  487. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  488. check(qgrep(message1, "stderr"))
  489. check(not qgrep(message2, "stderr"))
  490. check(mtn("cert", second, "branch", branch))
  491. check(mtn("show_conflicts", first, second), 0, false, true)
  492. check(qgrep(message1, "stderr"))
  493. check(not qgrep(message2, "stderr"))
  494. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  495. check(qgrep(message1, "stderr"))
  496. check(not qgrep(message2, "stderr"))
  497. check(mtn("merge", "--branch", branch), 1, false, true)
  498. check(qgrep(message1, "stderr"))
  499. check(not qgrep(message2, "stderr"))
  500. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  501. check(qgrep(message1, "stderr"))
  502. check(not qgrep(message2, "stderr"))
  503. check(mtn("merge_into_workspace", first), 1, false, true)
  504. check(qgrep(message1, "stderr"))
  505. check(not qgrep(message2, "stderr"))
  506. -- multiple name plus orphan
  507. branch = "multiple-name-plus-orphan"
  508. setup(branch)
  509. mkdir("a")
  510. mkdir("b")
  511. check(mtn("add", "a"), 0, false, false)
  512. check(mtn("add", "b"), 0, false, false)
  513. addfile("foo", branch .. "-foo")
  514. commit(branch)
  515. base = base_revision()
  516. check(mtn("mv", "foo", "a"), 0, false, false)
  517. check(mtn("rm", "b"), 0, false, false)
  518. commit(branch)
  519. first = base_revision()
  520. revert_to(base)
  521. check(mtn("mv", "foo", "b"), 0, false, false)
  522. check(mtn("rm", "a"), 0, false, false)
  523. message1 = "conflict: multiple names"
  524. message2 = "conflict: orphaned"
  525. -- this doesn't result in a directory loop conflict because the multiple name
  526. -- conflict prevents foo from being attached in the result roster
  527. check(mtn("update"), 1, false, true)
  528. check(qgrep(message1, "stderr"))
  529. check(not qgrep(message2, "stderr"))
  530. commit(branch .. "-propagate")
  531. second = base_revision()
  532. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  533. check(qgrep(message1, "stderr"))
  534. check(not qgrep(message2, "stderr"))
  535. check(mtn("cert", second, "branch", branch))
  536. check(mtn("show_conflicts", first, second), 0, false, true)
  537. check(qgrep(message1, "stderr"))
  538. check(not qgrep(message2, "stderr"))
  539. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  540. check(qgrep(message1, "stderr"))
  541. check(not qgrep(message2, "stderr"))
  542. check(mtn("merge", "--branch", branch), 1, false, true)
  543. check(qgrep(message1, "stderr"))
  544. check(not qgrep(message2, "stderr"))
  545. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  546. check(qgrep(message1, "stderr"))
  547. check(not qgrep(message2, "stderr"))
  548. check(mtn("merge_into_workspace", first), 1, false, true)
  549. check(qgrep(message1, "stderr"))
  550. check(not qgrep(message2, "stderr"))
  551. -- multiple name plus directory loop
  552. branch = "multiple-name-plus-directory-loop"
  553. setup(branch)
  554. mkdir("a")
  555. mkdir("b")
  556. mkdir("foo")
  557. check(mtn("add", "a"), 0, false, false)
  558. check(mtn("add", "b"), 0, false, false)
  559. check(mtn("add", "foo"), 0, false, false)
  560. commit(branch)
  561. base = base_revision()
  562. check(mtn("mv", "foo", "a"), 0, false, false)
  563. check(mtn("mv", "b", "a/foo"), 0, false, false)
  564. commit(branch)
  565. first = base_revision()
  566. revert_to(base)
  567. check(mtn("mv", "foo", "b"), 0, false, false)
  568. check(mtn("mv", "a", "b/foo"), 0, false, false)
  569. message1 = "conflict: multiple names"
  570. message2 = "conflict: directory loop"
  571. -- this doesn't result in a directory loop conflict because the multiple name
  572. -- conflict prevents foo from being attached in the result roster
  573. check(mtn("update"), 1, false, true)
  574. check(qgrep(message1, "stderr"))
  575. check(not qgrep(message2, "stderr"))
  576. commit(branch .. "-propagate")
  577. second = base_revision()
  578. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  579. check(qgrep(message1, "stderr"))
  580. check(not qgrep(message2, "stderr"))
  581. check(mtn("cert", second, "branch", branch))
  582. check(mtn("show_conflicts", first, second), 0, false, true)
  583. check(qgrep(message1, "stderr"))
  584. check(not qgrep(message2, "stderr"))
  585. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  586. check(qgrep(message1, "stderr"))
  587. check(not qgrep(message2, "stderr"))
  588. check(mtn("merge", "--branch", branch), 1, false, true)
  589. check(qgrep(message1, "stderr"))
  590. check(not qgrep(message2, "stderr"))
  591. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  592. check(qgrep(message1, "stderr"))
  593. check(not qgrep(message2, "stderr"))
  594. check(mtn("merge_into_workspace", first), 1, false, true)
  595. check(qgrep(message1, "stderr"))
  596. check(not qgrep(message2, "stderr"))
  597. -- duplicate name plus multiple name plus missing root
  598. -- the old root directory is pivoted out to aaa on one side and bbb on the other
  599. -- causing a multiple name conflict
  600. -- a new root directory is pivoted in from foo on one side and bar on the other
  601. -- causing a duplicate name conflict on ""
  602. -- these conflicts leave the root dir detached causing a missing root conflict
  603. branch = "duplicate-name-multiple-name-missing-root"
  604. setup(branch)
  605. mkdir("foo")
  606. mkdir("bar")
  607. addfile("foo/foo", branch .. "-foofoo")
  608. addfile("bar/bar", branch .. "-barbar")
  609. commit(branch)
  610. base = base_revision()
  611. dir1 = branch .. "-1"
  612. remove(dir1)
  613. check(mtn("co", "--revision", base, "--branch", branch, dir1), 0, false, false)
  614. check(indir(dir1, mtn("pivot_root", "foo", "aaa")), 0, true, true)
  615. check(indir(dir1, mtn("commit", "--message", "commit")), 0, false, false)
  616. first = indir(dir1, {base_revision})[1]()
  617. dir2 = branch .. "-2"
  618. remove(dir2)
  619. check(mtn("co", "--revision", base, "--branch", branch, dir2), 0, false, false)
  620. check(indir(dir2, mtn("pivot_root", "bar", "bbb")), 0, true, true)
  621. message1 = "conflict: missing root directory"
  622. message2 = "conflict: duplicate name"
  623. message3 = "conflict: multiple names"
  624. check(indir(dir2, mtn("update")), 1, false, true)
  625. check(qgrep(message1, "stderr"))
  626. check(qgrep(message2, "stderr"))
  627. check(qgrep(message3, "stderr"))
  628. check(indir(dir2, mtn("commit", "--message", "commit", "--branch", branch .. "-propagate")), 0, false, false)
  629. second = indir(dir2, {base_revision})[1]()
  630. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  631. check(qgrep(message1, "stderr"))
  632. check(qgrep(message2, "stderr"))
  633. check(qgrep(message3, "stderr"))
  634. check(mtn("cert", second, "branch", branch))
  635. check(mtn("show_conflicts", first, second), 0, false, true)
  636. check(qgrep(message1, "stderr"))
  637. check(qgrep(message2, "stderr"))
  638. check(qgrep(message3, "stderr"))
  639. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  640. check(qgrep(message1, "stderr"))
  641. check(qgrep(message2, "stderr"))
  642. check(qgrep(message3, "stderr"))
  643. check(mtn("merge", "--branch", branch), 1, false, true)
  644. check(qgrep(message1, "stderr"))
  645. check(qgrep(message2, "stderr"))
  646. check(qgrep(message3, "stderr"))
  647. check(indir(dir2, mtn("pluck", "--revision", base, "--revision", first)), 1, false, true)
  648. check(qgrep(message1, "stderr"))
  649. check(qgrep(message2, "stderr"))
  650. check(qgrep(message3, "stderr"))
  651. check(indir(dir2, mtn("merge_into_workspace", first)), 1, false, true)
  652. check(qgrep(message1, "stderr"))
  653. check(qgrep(message2, "stderr"))
  654. check(qgrep(message3, "stderr"))
  655. -- unrelated projects
  656. branch = "unrelated-projects"
  657. setup(branch)
  658. copy("_MTN/revision", "clean")
  659. addfile("foo", branch .. "-foo first")
  660. commit(branch)
  661. first = base_revision()
  662. copy("clean", "_MTN/revision")
  663. addfile("foo", branch .. "-foo second")
  664. message1 = "conflict: missing root directory"
  665. message2 = "conflict: duplicate name"
  666. -- check(mtn("update"), 1, false, true)
  667. -- check(qgrep(message1, "stderr"))
  668. -- check(qgrep(message2, "stderr"))
  669. check(mtn("commit", "--message", "commit", "--branch", branch .. "-propagate"), 0, false, false)
  670. second = base_revision()
  671. check(mtn("propagate", branch , branch .. "-propagate"), 1, false, true)
  672. check(qgrep(message1, "stderr"))
  673. check(qgrep(message2, "stderr"))
  674. check(mtn("cert", second, "branch", branch))
  675. check(mtn("show_conflicts", first, second), 0, false, true)
  676. check(qgrep(message1, "stderr"))
  677. check(qgrep(message2, "stderr"))
  678. check(mtn("explicit_merge", first, second, branch), 1, false, true)
  679. check(qgrep(message1, "stderr"))
  680. check(qgrep(message2, "stderr"))
  681. check(mtn("merge", "--branch", branch), 1, false, true)
  682. check(qgrep(message1, "stderr"))
  683. check(qgrep(message2, "stderr"))
  684. check(mtn("pluck", "--revision", base, "--revision", first), 1, false, true)
  685. check(qgrep(message1, "stderr"))
  686. check(qgrep(message2, "stderr"))
  687. -- check(mtn("merge_into_workspace", first), 1, false, true)
  688. -- check(qgrep(message1, "stderr"))
  689. -- check(qgrep(message2, "stderr"))