File: __driver__.lua

package info (click to toggle)
monotone 1.0-6
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 20,708 kB
  • sloc: cpp: 84,765; sh: 6,787; perl: 837; makefile: 833; python: 517; lisp: 379; sql: 118; exp: 88; ansic: 52
file content (110 lines) | stat: -rw-r--r-- 2,855 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
includecommon("netsync.lua")
mtn_setup()
netsync.setup()

srv2 = netsync.start(2)
srv3 = netsync.start(3)

srv2:sync("foo", 1)
srv3:sync("bar", 1)

revs = {}
revs.foo = {}
revs.bar = {}
revs.baz = {}

check(mtn("setup", "-bfoo", "foo"))
writefile("foo/foo", "foo")
check(indir("foo", mtn("add", "foo")), 0, nil, false)

check(mtn("setup", "-bbar", "bar"))
writefile("bar/bar", "bar")
check(indir("bar", mtn("add", "bar")), 0, nil, false)

check(mtn("setup", "-bbaz", "baz"))
writefile("baz/baz", "baz")
check(indir("baz", mtn("add", "baz")), 0, nil, false)

function base(branch)
  local workrev = readfile(branch .. "/_MTN/revision")
  local extract = string.gsub(workrev, "^.*old_revision %[(%x*)%].*$", "%1")
  if extract == workrev then
    err("failed to extract base revision from _MTN/revision")
  end
  return extract
end

function commit_something(branch)
   writefile(branch.."/"..branch, branch .. " " .. base(branch))
   check(indir(branch, mtn("ci", "-mx")), 0, false, false)
   local newbase = base(branch)
   table.insert(revs[branch], newbase)
   return newbase
end

-- verify that the given server has exactly the listed revisions
function check_remote_revisions(srv, list)
   check(mtn("automate", "remote", "--remote-stdio-host", srv.address,
	     "select", "i:"), 0, true, false)
   local ret = open_or_err("stdout")
   local n = 0
   for line in ret:lines() do
      n = n + 1
      local found = false
      for _, x in ipairs(list) do
	 if x == line then found = true end
      end
      check(found)
   end
   local want = 0
   for _, x in ipairs(list) do
      want = want + 1
   end
   check(n == want)
   ret:close()
end

for i = 1,2 do
   commit_something("foo")
   commit_something("bar")
   commit_something("baz")

   check(mtn("sync", srv2.address), 0, nil, false)
   check(mtn("sync", srv3.address), 0, nil, false)

   check_remote_revisions(srv2, revs.foo)
   check_remote_revisions(srv3, revs.bar)
end

-- check that pushing something different doesn't change the default

check(mtn("sync", srv3.address, "baz"), 0, nil, false)
barbaz = {}
for _, x in ipairs(revs.bar) do
   table.insert(barbaz, x)
end
for _, x in ipairs(revs.baz) do
   table.insert(barbaz, x)
end
check_remote_revisions(srv3, barbaz)
commit_something("bar")
commit_something("baz")
table.insert(barbaz, base("bar"))
check(mtn("sync", srv3.address), 0, nil, false)
check_remote_revisions(srv3, barbaz)

-- check that --set-default works
check(mtn("sync", srv2.address, "bar", "--set-default"), 0, nil, false)
foobar = {}
for _, x in ipairs(revs.foo) do
   table.insert(foobar, x)
end
for _, x in ipairs(revs.bar) do
   table.insert(foobar, x)
end
check_remote_revisions(srv2, foobar)
commit_something("foo")
commit_something("bar")
table.insert(foobar, base("bar"))
check(mtn("sync", srv2.address), 0, nil, false)
check_remote_revisions(srv2, foobar)