pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/48301: Make devel/monotone build with lua 5.2 (with patch)



The following reply was made to PR pkg/48301; it has been noted by GNATS.

From: Rhialto <rhialto%falu.nl@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: rhialto%falu.nl@localhost
Subject: Re: pkg/48301: Make devel/monotone build with lua 5.2 (with patch)
Date: Sun, 20 Oct 2013 22:20:07 +0200

 --KsGdsel6WgEHnImy
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 Content-Transfer-Encoding: quoted-printable
 
 I have two additional changes to the patch I presented before.
 
 - pclose -> fclose
 - initialize ok in io_pclose().
 
 For reference here is the full thing again, with those changes:
 
 
 $Id$
 
 Source: http://pkgs.fedoraproject.org/cgit/monotone.git/plain/monotone-1.0-=
 lua-5.2.patch
 via http://pkgs.fedoraproject.org/cgit/monotone.git/tree/
 
 - Edited path names to make them apply without -p1.
 - pclose -> fclose
 - initialize ok in io_pclose().
 
 =46rom: Thomas Moschny <thomas.moschny%gmx.de@localhost>
 Subject: [PATCH] lua-5.2
 
 Support Lua 5.2.
 
 Apply patches from these upstream commits:
 53e02eaa302bc05e96a18e3882b0e9843b53cf9a (partially)
 fd98d953ca93454c66a55aadf2adbeb87de86f69 (with some tweaking)
 fe1180f754da5d552c308b61e8129e59039bc559
 
 ---
  extra/mtn-hooks/monotone-cvs-ignore.lua            |  2 +-
  src/lua.cc                                         | 40 +++++++++++---
  src/lua.hh                                         | 14 ++---
  src/luaext_parse_basic_io.cc                       |  4 ++
  src/luaext_platform.cc                             | 62 ++++++++++++++++--=
 ----
  src/std_hooks.lua                                  |  9 +++-
  test/func-testsuite.lua                            |  7 +++
  test/func/automate_get_attributes/__driver__.lua   |  2 +-
  .../func/automate_interface_version/__driver__.lua |  2 +-
  .../automate_inventory_ignore_dirs/__driver__.lua  |  2 +-
  test/func/automate_put_revision/__driver__.lua     |  2 +-
  .../automate_set_drop_attribute/__driver__.lua     |  4 +-
  .../func/automate_stdio_band_output/__driver__.lua | 10 ++--
  test/func/clone_weird_branch_names/__driver__.lua  |  2 +-
  test/func/list_databases/__driver__.lua            |  6 +--
  test/func/list_workspaces/__driver__.lua           |  8 +--
  .../log_--no-files_and_--merges/__driver__.lua     |  4 +-
  test/func/manpage/__driver__.lua                   |  2 +-
  test/func/netsync_negotiation/__driver__.lua       |  8 +--
  test/func/serve-automate-single-run/__driver__.lua |  2 +-
  test/func/serve-automate/__driver__.lua            |  4 +-
  test/func/ssh_agent/__driver__.lua                 |  8 +--
  .../__driver__.lua                                 |  4 +-
  test/func/user_commands/extra_rc                   |  3 +-
  test/src/testlib.lua                               | 39 +++++++-------
  25 files changed, 161 insertions(+), 89 deletions(-)
 
 diff --git a/extra/mtn-hooks/monotone-cvs-ignore.lua b/extra/mtn-hooks/mono=
 tone-cvs-ignore.lua
 index 6a59d12..0e9feb5 100644
 --- extra/mtn-hooks/monotone-cvs-ignore.lua
 +++ extra/mtn-hooks/monotone-cvs-ignore.lua
 @@ -23,7 +23,7 @@ do
 =20
        local handle, msg =3D io.open(dir .. ".cvsignore")
        if (handle) then
 -       for line in handle:lines(dir .. ".cvsignore") do
 +       for line in handle:lines() do
            pat2 =3D _glob_to_pattern(line) .. "$"
            if (string.find(name, pat1 .. pat2)) then
               return true
 diff --git a/src/lua.cc b/src/lua.cc
 index 29f1033..9456c64 100644
 --- src/lua.cc
 +++ src/lua.cc
 @@ -44,7 +44,11 @@ dump_stack(lua_State * st)
      switch (t) {
      case LUA_TSTRING:  /* strings */
        out +=3D '`';
 +#ifdef lua_strlen
        out +=3D string(lua_tostring(st, i), lua_strlen(st, i));
 +#else
 +      out +=3D string(lua_tostring(st, i), lua_rawlen(st, i));
 +#endif
        out +=3D '\'';
        break;
 =20
 @@ -95,7 +99,11 @@ void
  Lua::report_error()
  {
  //  I(lua_isstring(st, -1));
 +#ifdef lua_strlen
    string err =3D string(lua_tostring(st, -1), lua_strlen(st, -1));
 +#else
 +  string err =3D string(lua_tostring(st, -1), lua_rawlen(st, -1));
 +#endif
    W(i18n_format("%s") % err);
    L(FL("lua stack: %s") % dump_stack(st));
    lua_pop(st, 1);
 @@ -107,7 +115,11 @@ Lua::check_stack(int count)
  {
    if (!lua_checkstack(st, count))
      {
 +#ifdef LUAI_MAXCSTACK
        fail((FL("lua stack limit '%d' reached") % LUAI_MAXCSTACK).str());
 +#else
 +      fail((FL("lua stack limit '%d' reached") % LUAI_MAXSTACK).str());
 +#endif
        return false;
      }
    return true;
 @@ -119,17 +131,27 @@ Lua &
  Lua::get(int idx)
  {
    if (failed) return *this;
 -  if (!lua_istable (st, idx))
 -    {
 -      fail("istable() in get");
 -      return *this;
 -    }
    if (lua_gettop (st) < 1)
      {
        fail("stack top > 0 in get");
        return *this;
      }
 -  lua_gettable(st, idx);
 +  if (idx)
 +    {
 +      if (!lua_istable (st, idx))
 +        {
 +          fail("istable() in get");
 +          return *this;
 +        }
 +      lua_gettable(st, idx);
 +    }
 +  else
 +    {
 +      string name;
 +      extract_str(name);
 +      pop();
 +      lua_getglobal(st, name.c_str());
 +    }
    return *this;
  }
 =20
 @@ -194,7 +216,11 @@ Lua::extract_str_nolog(string & str)
        fail("isstring() in extract_str");
        return *this;
      }
 +#ifdef lua_strlen
    str =3D string(lua_tostring(st, -1), lua_strlen(st, -1));
 +#else
 +  str =3D string(lua_tostring(st, -1), lua_rawlen(st, -1));
 +#endif
    return *this;
  }
 =20
 @@ -460,7 +486,7 @@ void add_functions(lua_State * st)
          {
            lua_newtable(st);
            lua_pushvalue(st, -1);
 -          lua_setfield(st, LUA_GLOBALSINDEX, table.c_str());
 +          lua_setglobal(st, table.c_str());
          }
        for (luaext::fmap::const_iterator j =3D i->second.begin();
             j !=3D i->second.end(); ++j)
 diff --git a/src/lua.hh b/src/lua.hh
 index ae87329..6f9783a 100644
 --- src/lua.hh
 +++ src/lua.hh
 @@ -37,13 +37,13 @@ Lua
    void report_error();
    bool check_stack(int count);
 =20
 -  // getters
 -  Lua & get(int idx =3D LUA_GLOBALSINDEX);
 -  Lua & get_fn(int idx =3D LUA_GLOBALSINDEX);
 -  Lua & get_tab(int idx =3D LUA_GLOBALSINDEX);
 -  Lua & get_str(int idx =3D LUA_GLOBALSINDEX);
 -  Lua & get_num(int idx =3D LUA_GLOBALSINDEX);
 -  Lua & get_bool(int idx =3D LUA_GLOBALSINDEX);
 +  // getters (0 is an invalid index in lua, and is used here to represent =
 the global table)
 +  Lua & get(int idx =3D 0);
 +  Lua & get_fn(int idx =3D 0);
 +  Lua & get_tab(int idx =3D 0);
 +  Lua & get_str(int idx =3D 0);
 +  Lua & get_num(int idx =3D 0);
 +  Lua & get_bool(int idx =3D 0);
 =20
    // extractors
    Lua & extract_str_nolog(std::string & str);
 diff --git a/src/luaext_parse_basic_io.cc b/src/luaext_parse_basic_io.cc
 index 84cea98..4d2308a 100644
 --- src/luaext_parse_basic_io.cc
 +++ src/luaext_parse_basic_io.cc
 @@ -23,7 +23,11 @@ LUAEXT(parse_basic_io, )
    // followed by one or more string or hex values. It returns a table of
    // lines.
    vector<pair<string, vector<string> > > res;
 +#ifdef lua_strlen
    const string str(luaL_checkstring(LS, -1), lua_strlen(LS, -1));
 +#else
 +  const string str(luaL_checkstring(LS, -1), lua_rawlen(LS, -1));
 +#endif
    basic_io::input_source in(str, "monotone_parse_basic_io_for_lua");
    in.made_from =3D origin::user;
    basic_io::tokenizer tok(in);
 diff --git a/src/luaext_platform.cc b/src/luaext_platform.cc
 index 643250c..c89b45a 100644
 --- src/luaext_platform.cc
 +++ src/luaext_platform.cc
 @@ -96,31 +96,58 @@ LUAEXT(spawn_redirected, )
    return 1;
  }
 =20
 -// borrowed from lua/liolib.cc
 -// Note that making C functions that return FILE* in Lua is tricky
 +// Making C functions that return FILE* in Lua is tricky. Especially if it
 +// actually needs to work with multiple lua versions.
 +//
 +// The following routines are inspired by lua/liolib.c from both versions.
 +// The mtn_lua_Stream struct is closer to the 5.2 variant, but the
 +// additional field compared to 5.1 (which only uses FILE*) shouldn't hurt
 +// in Lua 5.1.
 +//
  // There is a Lua FAQ entitled:
  // "Why does my library-created file segfault on :close() but work otherwi=
 se?"
 +//
 +// However, it's advice seems out-dated and applies more to 5.1.
 +
 +typedef struct mtn_lua_Stream {
 +  FILE *f;
 +  lua_CFunction closef;
 +} mtn_lua_Stream;
 +
 +#define topfile(LS)     ((mtn_lua_Stream *)luaL_checkudata(LS, 1, LUA_FILE=
 HANDLE))
 =20
 -#define topfile(LS)     ((FILE **)luaL_checkudata(LS, 1, LUA_FILEHANDLE))
 +static int io_pclose (lua_State *LS) {
 +  mtn_lua_Stream *s =3D topfile(LS);
 +
 +  // Note that in Lua 5.2, aux_close() already resets s->closef to NULL an=
 d for
 +  // Lua 5.1, it's not relevant, at all. But we've set it to &io_pclose(),=
  so
 +  // contents of s->closef different between Lua versions.
 +
 +  int ok =3D 1;
 +  if (s->f !=3D NULL)
 +    ok =3D (fclose(s->f) =3D=3D 0);
 +
 +  s->f =3D NULL;
 +  s->closef =3D NULL;  // just to be extra sure this won't do any harm
 =20
 -static int io_fclose (lua_State *LS) {
 -  FILE **p =3D topfile(LS);
 -  int ok =3D (fclose(*p) =3D=3D 0);
 -  *p =3D NULL;
    lua_pushboolean(LS, ok);
    return 1;
  }
 =20
 -static FILE **newfile (lua_State *LS) {
 -  FILE **pf =3D (FILE **)lua_newuserdata(LS, sizeof(FILE *));
 -  *pf =3D NULL;  /* file handle is currently `closed' */
 +static mtn_lua_Stream *newstream (lua_State *LS) {
 +  mtn_lua_Stream *s =3D (mtn_lua_Stream *)lua_newuserdata(LS, sizeof(mtn_l=
 ua_Stream));
 +  s->f =3D NULL;  /* file handle is currently `closed' */
 +  s->closef =3D NULL;
    luaL_getmetatable(LS, LUA_FILEHANDLE);
    lua_setmetatable(LS, -2);
 =20
 -  lua_pushcfunction(LS, io_fclose);
 +#ifdef LUA_ENVIRONINDEX
 +  // Lua 5.2 removes C function environments
 +  lua_pushcfunction(LS, io_pclose);
    lua_setfield(LS, LUA_ENVIRONINDEX, "__close");
 +#endif
 =20
 -  return pf;
 +  return s;
  }
 =20
  LUAEXT(spawn_pipe, )
 @@ -136,12 +163,13 @@ LUAEXT(spawn_pipe, )
    for (i=3D0; i<n; i++) argv[i] =3D (char*)luaL_checkstring(LS,  i+1);
    argv[i] =3D NULL;
 =20
 -  int infd;
 -  FILE **inpf =3D newfile(LS);
 -  int outfd;
 -  FILE **outpf =3D newfile(LS);
 +  mtn_lua_Stream *ins =3D newstream(LS);
 +  ins->closef =3D &io_pclose;
 +
 +  mtn_lua_Stream *outs =3D newstream(LS);
 +  outs->closef =3D &io_pclose;
 =20
 -  pid =3D process_spawn_pipe(argv, inpf, outpf);
 +  pid =3D process_spawn_pipe(argv, &ins->f, &outs->f);
    free(argv);
 =20
    lua_pushnumber(LS, pid);
 diff --git a/src/std_hooks.lua b/src/std_hooks.lua
 index bfef561..7099f83 100644
 --- src/std_hooks.lua
 +++ src/std_hooks.lua
 @@ -10,6 +10,13 @@
  -- this is the standard set of lua hooks for monotone;
  -- user-provided files can override it or add to it.
 =20
 +-- Since Lua 5.2, unpack and loadstrings are deprecated and are either mov=
 ed
 +-- to table.unpack() or replaced by load(). If lua was compiled without
 +-- LUA_COMPAT_UNPACK and/or LUA_COMPAT_LOADSTRING, these two are not
 +-- available and we add a similar compatibility layer, ourselves.
 +unpack =3D unpack or table.unpack
 +loadstring =3D loadstring or load
 +
  function temp_file(namehint)
     local tdir
     tdir =3D os.getenv("TMPDIR")
 @@ -1465,7 +1472,7 @@ do
        return true, warning
     end
     function push_hook_functions(functions)
 -      local n =3D table.maxn(hook_functions) + 1
 +      local n =3D #hook_functions + 1
        return add_hook_functions(functions, n)
     end
 =20
 diff --git a/test/func-testsuite.lua b/test/func-testsuite.lua
 index 64a6f26..454cd9c 100755
 --- test/func-testsuite.lua
 +++ test/func-testsuite.lua
 @@ -10,6 +10,13 @@
  monotone_path =3D nil
  no_network_tests =3D false
 =20
 +-- Since Lua 5.2, unpack and loadstrings are deprecated and are either mov=
 ed
 +-- to table.unpack() or replaced by load(). If lua was compiled without
 +-- LUA_COMPAT_UNPACK and/or LUA_COMPAT_LOADSTRING, these two are not
 +-- available and we add a similar compatibility layer, ourselves.
 +unpack =3D unpack or table.unpack
 +loadstring =3D loadstring or load
 +
  function safe_mtn(...)
    if monotone_path =3D=3D nil then
      monotone_path =3D os.getenv("mtn")
 diff --git a/test/func/automate_get_attributes/__driver__.lua b/test/func/a=
 utomate_get_attributes/__driver__.lua
 index 2e92654..eb91015 100644
 --- test/func/automate_get_attributes/__driver__.lua
 +++ test/func/automate_get_attributes/__driver__.lua
 @@ -28,7 +28,7 @@ check(mtn("automate", "get_attributes", "testfile"), 0, t=
 rue, true)
  check(fsize("stderr") =3D=3D 0)
  parsed =3D parse_basic_io(readfile("stdout"))
  -- make sure the output generated 8 stanzas
 -check(table.getn(parsed) =3D=3D 8)
 +check(#parsed =3D=3D 8)
  lastkey =3D ""
  checked =3D {}
  for _,l in pairs(parsed) do
 diff --git a/test/func/automate_interface_version/__driver__.lua b/test/fun=
 c/automate_interface_version/__driver__.lua
 index d969d7d..7ff79e9 100644
 --- test/func/automate_interface_version/__driver__.lua
 +++ test/func/automate_interface_version/__driver__.lua
 @@ -7,4 +7,4 @@ rename("stdout", "a_v")
  -- MinGW's wc produces "      1" as output.  Arithmetic comparison works, =
 string comparison doesn't
  check(numlines("a_v") =3D=3D 1)
  -- This is really ^[0-9]+\.[0-9]+$, but m4 is obfuscatory.
 -check(qgrep("^[0-9]+\.[0-9]+$", "a_v"))
 +check(qgrep("^[0-9]+\\.[0-9]+$", "a_v"))
 diff --git a/test/func/automate_inventory_ignore_dirs/__driver__.lua b/test=
 /func/automate_inventory_ignore_dirs/__driver__.lua
 index bfb5c25..72a89bb 100644
 --- test/func/automate_inventory_ignore_dirs/__driver__.lua
 +++ test/func/automate_inventory_ignore_dirs/__driver__.lua
 @@ -14,7 +14,7 @@ function sortContentsByLine(input)
    table.insert(lines, string.sub(input, theStart))
    table.sort(lines)
 =20
 -  local len =3D table.getn(lines)
 +  local len =3D #lines
    local output =3D lines[1]
    for i =3D 2, len do
      output =3D output .. delimiter .. lines[i]
 diff --git a/test/func/automate_put_revision/__driver__.lua b/test/func/aut=
 omate_put_revision/__driver__.lua
 index 2626ec3..32bdacb 100644
 --- test/func/automate_put_revision/__driver__.lua
 +++ test/func/automate_put_revision/__driver__.lua
 @@ -33,5 +33,5 @@ check(mtn("automate", "put_revision", rev), 3, false, fal=
 se)
  -- but this should work (tests that we can use put_revision to commit a
  -- single-parent revision)
  check(mtn("automate", "put_file", ""), 0, false, false)
 -rev =3D "format_version \"1\"\n\nnew_manifest [000000000000000000000000000=
 0000000000000]\n\nold_revision [4c2c1d846fa561601254200918fba1fd71e6795d]\n=
 \patch \"foo\"\n from [5bf1fd927dfb8679496a2e6cf00cbe50c1c87145] to [da39a3=
 ee5e6b4b0d3255bfef95601890afd80709]\n"
 +rev =3D "format_version \"1\"\n\nnew_manifest [000000000000000000000000000=
 0000000000000]\n\nold_revision [4c2c1d846fa561601254200918fba1fd71e6795d]\n=
 \npatch \"foo\"\n from [5bf1fd927dfb8679496a2e6cf00cbe50c1c87145] to [da39a=
 3ee5e6b4b0d3255bfef95601890afd80709]\n"
  check(mtn("automate", "put_revision", rev), 0, false, false)
 diff --git a/test/func/automate_set_drop_attribute/__driver__.lua b/test/fu=
 nc/automate_set_drop_attribute/__driver__.lua
 index 5369cd9..12ff4dc 100644
 --- test/func/automate_set_drop_attribute/__driver__.lua
 +++ test/func/automate_set_drop_attribute/__driver__.lua
 @@ -25,7 +25,7 @@ check(mtn("automate", "set_attribute", "testfile", "foo",=
  "bar"), 0, false, fals
  check(mtn("automate", "get_attributes", "testfile"), 0, true, false)
  parsed =3D parse_basic_io(readfile("stdout"))
 =20
 -check(table.getn(parsed) =3D=3D 2)
 +check(#parsed =3D=3D 2)
  for _,l in pairs(parsed) do
      if l.name =3D=3D "attr" then
          key =3D l.values[1]
 @@ -44,7 +44,7 @@ check(mtn("automate", "drop_attribute", "testfile", "foo"=
 ), 0, true, true)
  -- check if it has been really dropped
  check(mtn("automate", "get_attributes", "testfile"), 0, true, false)
  parsed =3D parse_basic_io(readfile("stdout"))
 -check(table.getn(parsed) =3D=3D 0)
 +check(#parsed =3D=3D 0)
 =20
  -- check if it escalates properly if there is no such attr to drop
  check(mtn("automate", "drop_attribute", "testfile", "foo"), 1, false, true)
 diff --git a/test/func/automate_stdio_band_output/__driver__.lua b/test/fun=
 c/automate_stdio_band_output/__driver__.lua
 index 4262d0e..88c8d63 100755
 --- test/func/automate_stdio_band_output/__driver__.lua
 +++ test/func/automate_stdio_band_output/__driver__.lua
 @@ -4,13 +4,13 @@ mtn_setup()
 =20
  -- check informational messages, warnings and errors
  out =3D run_stdio("l8:bandtest4:infoe", 0, 0, "p")
 -check(type(out) =3D=3D "table" and table.maxn(out) =3D=3D 1)
 +check(type(out) =3D=3D "table" and #out =3D=3D 1)
 =20
  out =3D run_stdio("l8:bandtest7:warninge", 0, 0, "w")
 -check(type(out) =3D=3D "table" and table.maxn(out) =3D=3D 1)
 +check(type(out) =3D=3D "table" and #out =3D=3D 1)
 =20
  out =3D run_stdio("l8:bandtest5:errore", 2, 0, "e")
 -check(type(out) =3D=3D "table" and table.maxn(out) =3D=3D 1)
 +check(type(out) =3D=3D "table" and #out =3D=3D 1)
 =20
  -- check tickers
  tickers =3D run_stdio("l8:bandtest6:tickere", 0, 0, "t")
 @@ -38,7 +38,7 @@ end
  ticker_data =3D {}
  for _,tick in ipairs(tickers) do
      ticks =3D split(tick, ";")
 -    check(table.maxn(ticks) > 0)
 +    check(#ticks > 0)
      for _,mtick in ipairs(ticks) do
          if string.len(mtick) > 0 then
              local begin,End,short,ticktype,content =3D
 @@ -78,6 +78,6 @@ for _,tick in ipairs(tickers) do
  end
 =20
  -- finally check if all tickers are completed
 -check(table.maxn(ticker_data) =3D=3D 0)
 +check(#ticker_data =3D=3D 0)
 =20
 =20
 diff --git a/test/func/clone_weird_branch_names/__driver__.lua b/test/func/=
 clone_weird_branch_names/__driver__.lua
 index 4948a72..a97c6ea 100644
 --- test/func/clone_weird_branch_names/__driver__.lua
 +++ test/func/clone_weird_branch_names/__driver__.lua
 @@ -7,7 +7,7 @@ commit("my-branch[1,2]-1^3")
 =20
  copy("test.db", "test-clone.db")
  -- some of the special chars need to get double-escaped to get "through"
 -testURI=3D"file://" .. test.root .. "/test-clone.db?my-branch\\\[1,2\\\]-1=
 ^3"
 +testURI=3D"file://" .. test.root .. "/test-clone.db?my-branch\\[1,2\\]-1^3"
 =20
  check(nodb_mtn("clone", testURI), 0, false, false)
  check(exists("my-branch[1,2]-1^3"))
 diff --git a/test/func/list_databases/__driver__.lua b/test/func/list_datab=
 ases/__driver__.lua
 index e3da0e9..48cd75c 100644
 --- test/func/list_databases/__driver__.lua
 +++ test/func/list_databases/__driver__.lua
 @@ -25,15 +25,15 @@ check(mt("db", "init", "-d", ":bar"), 0, false, false)
  check(exists("managed_databases/bar.mtn"))
 =20
  check(mt("ls", "dbs"), 0, true, false)
 -check(qgrep(":bar.mtn.+in.+list_databases\/managed_databases", "stdout"))
 +check(qgrep(":bar.mtn.+in.+list_databases/managed_databases", "stdout"))
  check(qgrep("\tno known valid workspaces", "stdout"))
 =20
  check(mt("setup", "-d", ":bar", "-b", "test.foo.branch", "test_foo"), 0, f=
 alse, false)
 =20
  check(mt("ls", "dbs"), 0, true, false)
  check(not qgrep("\tno known valid workspaces", "stdout"))
 -check(qgrep("\ttest.foo.branch.+in.+list_databases\/test_foo", "stdout"))
 +check(qgrep("\ttest.foo.branch.+in.+list_databases/test_foo", "stdout"))
 =20
  check(rename("managed_databases/bar.mtn", "managed_databases/bar.db"))
  check(mt("ls", "dbs"), 0, true, false)
 -check(qgrep(":bar.db.+in.+list_databases\/managed_databases", "stdout"))
 +check(qgrep(":bar.db.+in.+list_databases/managed_databases", "stdout"))
 diff --git a/test/func/list_workspaces/__driver__.lua b/test/func/list_work=
 spaces/__driver__.lua
 index 06dbfef..8895ed4 100644
 --- test/func/list_workspaces/__driver__.lua
 +++ test/func/list_workspaces/__driver__.lua
 @@ -10,17 +10,17 @@ check(samelines("stdout", {"no known valid workspaces"}=
 ))
  check(raw_mtn("setup", "-d", "test.mtn", "-b", "test.branch1", "work1"), 0=
 , false, false)
 =20
  check(raw_mtn("ls", "workspaces", "-d", "test.mtn"), 0, true, false)
 -check(qgrep("test.branch1.+in.+list_workspaces\/work1", "stdout"))
 +check(qgrep("test.branch1.+in.+list_workspaces/work1", "stdout"))
 =20
  check(raw_mtn("setup", "-d", "test.mtn", "-b", "test.branch2", "work2"), 0=
 , false, false)
  check(rename("work1", "work3"))
 =20
  check(raw_mtn("ls", "workspaces", "-d", "test.mtn"), 0, true, false)
 -check(qgrep("test.branch2.+in.+list_workspaces\/work2", "stdout"))
 -check(not qgrep("test.branch1.+in.+list_workspaces\/work1", "stdout"))
 +check(qgrep("test.branch2.+in.+list_workspaces/work2", "stdout"))
 +check(not qgrep("test.branch1.+in.+list_workspaces/work1", "stdout"))
 =20
  check(indir("work3", raw_mtn("register_workspace", "-d", "../test.mtn")), =
 0, false, false)
 =20
  check(raw_mtn("ls", "workspaces", "-d", "test.mtn"), 0, true, false)
 -check(qgrep("test.branch1.+in.+list_workspaces\/work3", "stdout"))
 +check(qgrep("test.branch1.+in.+list_workspaces/work3", "stdout"))
 =20
 diff --git a/test/func/log_--no-files_and_--merges/__driver__.lua b/test/fu=
 nc/log_--no-files_and_--merges/__driver__.lua
 index b27551e..de4d26d 100644
 --- test/func/log_--no-files_and_--merges/__driver__.lua
 +++ test/func/log_--no-files_and_--merges/__driver__.lua
 @@ -29,8 +29,8 @@ R2=3Dbase_revision()
 =20
  -- check that merge is included by default
  check(mtn("log"), 0, true, false)
 -check(qgrep("^[\\|\\\\\/ ]+Revision.*"..R2, "stdout"))
 +check(qgrep("^[\\|\\\\/ ]+Revision.*"..R2, "stdout"))
 =20
  -- and that it is excluded by --no-merges
  check(mtn("log", "--no-merges"), 0, true, false)
 -check(not qgrep("^[\\|\\\\\/ ]+Revision.*"..R2, "stdout"))
 +check(not qgrep("^[\\|\\\\/ ]+Revision.*"..R2, "stdout"))
 diff --git a/test/func/manpage/__driver__.lua b/test/func/manpage/__driver_=
 _.lua
 index 775714e..38e5ee7 100644
 --- test/func/manpage/__driver__.lua
 +++ test/func/manpage/__driver__.lua
 @@ -5,7 +5,7 @@ rename("stdout", "manpage")
 =20
  -- check for a proper header line
  check(mtn("version"), 0, true, false)
 -local s,e,version =3D string.find(readfile("stdout"), "(monotone %d+\.%d+%=
 S*)")
 +local s,e,version =3D string.find(readfile("stdout"), "(monotone %d+%.%d+%=
 S*)")
  check(qgrep(".TH \"monotone\" 1 \"[0-9]{4}-[0-9]{2}-[0-9]{2}\" \"" .. vers=
 ion .. "\"", "manpage"))
 =20
  -- check required sections
 diff --git a/test/func/netsync_negotiation/__driver__.lua b/test/func/netsy=
 nc_negotiation/__driver__.lua
 index 2efe421..c776f93 100644
 --- test/func/netsync_negotiation/__driver__.lua
 +++ test/func/netsync_negotiation/__driver__.lua
 @@ -87,10 +87,10 @@ function check_same_revs(cmd1, cmd2)
     check(cmd2, 0, true, false)
     local data2 =3D {}
     for l in io.lines("stdout") do table.insert(data2, l) end
 -   L("Command 1 has ", table.getn(data1), " lines.")
 -   L("Command 2 has ", table.getn(data2), " lines.")
 -   check(table.getn(data1) =3D=3D table.getn(data2))
 -   for i =3D 1, table.getn(data1) do
 +   L("Command 1 has ", #data1, " lines.")
 +   L("Command 2 has ", #data2, " lines.")
 +   check(#data1 =3D=3D #data2)
 +   for i =3D 1, #data1 do
        local hash_len =3D 40
        check(data1[i]:sub(1, hash_len) =3D=3D data2[i]:sub(1, hash_len))
     end
 diff --git a/test/func/serve-automate-single-run/__driver__.lua b/test/func=
 /serve-automate-single-run/__driver__.lua
 index 87b1ab7..b65b9c1 100644
 --- test/func/serve-automate-single-run/__driver__.lua
 +++ test/func/serve-automate-single-run/__driver__.lua
 @@ -28,7 +28,7 @@ server =3D netsync.start({"--rcfile=3Dallow-automate.lua"=
 })
 =20
  check(mtn2("automate", "remote", "--remote-stdio-host", server.address,
      "interface_version"), 0, true, false)
 -check(qgrep("^[0-9]{2,}\.[0-9]+$", "stdout"))
 +check(qgrep("^[0-9]{2,}\\.[0-9]+$", "stdout"))
 =20
  check(mtn2("automate", "remote", "--remote-stdio-host", server.address,
      "leaves"), 0, true, false)
 diff --git a/test/func/serve-automate/__driver__.lua b/test/func/serve-auto=
 mate/__driver__.lua
 index 32b2eaf..9e993dc 100644
 --- test/func/serve-automate/__driver__.lua
 +++ test/func/serve-automate/__driver__.lua
 @@ -14,7 +14,7 @@ server =3D netsync.start({"--rcfile=3Ddeny-automate.lua"})
 =20
  local errors =3D run_remote_stdio(server, "l17:interface_versione", 1, 0, =
 "e")
  check(
 -    table.maxn(errors) =3D=3D 1 and
 +    #errors =3D=3D 1 and
      errors[1] =3D=3D "misuse: Sorry, you aren't allowed to do that."
  )
 =20
 @@ -45,7 +45,7 @@ check(
 =20
  local errors =3D run_remote_stdio(server, "l5:stdioe", 1, 0, "e")
  check(
 -    table.maxn(errors) =3D=3D 1 and
 +    #errors =3D=3D 1 and
      errors[1] =3D=3D "error: sorry, that can't be run remotely or over std=
 io"
  )
 =20
 diff --git a/test/func/ssh_agent/__driver__.lua b/test/func/ssh_agent/__dri=
 ver__.lua
 index d927360..a36ce90 100644
 --- test/func/ssh_agent/__driver__.lua
 +++ test/func/ssh_agent/__driver__.lua
 @@ -81,7 +81,7 @@ end
 =20
  check({"ssh-agent"}, 0, true, false)
  for line in io.lines("stdout") do
 -   for k, v in string.gmatch(line, "([%w_]+)=3D([%w/\.-]+)") do
 +   for k, v in string.gmatch(line, "([%w_]+)=3D([%w/%.-]+)") do
        set_env(k, v)
     end
  end
 @@ -91,7 +91,7 @@ check(mtn("ssh_agent_add"), 0, false, false)
  check({"ssh-add", "-l"}, 0, true, false)
  ok =3D false
  for line in io.lines("stdout") do
 -    for k in string.gmatch(line, "tester@test\.net") do
 +    for k in string.gmatch(line, "tester@test%.net") do
        ok =3D true
      end
  end
 @@ -288,7 +288,7 @@ check(mtn("ssh_agent_add", "--key", 
"test2%tester.net@localhost")=
 , 0, false, false)
  check({"ssh-add", "-l"}, 0, true, false)
  ok =3D false
  for line in io.lines("stdout") do
 -    for k in string.gmatch(line, "test2@tester\.net") do
 +    for k in string.gmatch(line, "test2@tester%.net") do
        ok =3D true
      end
  end
 @@ -338,7 +338,7 @@ check(mtn("ssh_agent_add", "--key", "test_pass@tester.n=
 et"), 0, false, false, "p
  check({"ssh-add", "-l"}, 0, true, false)
  ok =3D false
  for line in io.lines("stdout") do
 -    for k in string.gmatch(line, "test_pass@tester\.net") do
 +    for k in string.gmatch(line, "test_pass@tester%.net") do
        ok =3D true
      end
  end
 diff --git a/test/func/two_parent_workspace_inodeprints/__driver__.lua b/te=
 st/func/two_parent_workspace_inodeprints/__driver__.lua
 index bd6c558..66d5150 100644
 --- test/func/two_parent_workspace_inodeprints/__driver__.lua
 +++ test/func/two_parent_workspace_inodeprints/__driver__.lua
 @@ -19,13 +19,13 @@ check(mtn("merge_into_workspace", other), 0, false, fal=
 se)
 =20
  -- check that we've got the expected initial status
  check(mtn("status"), 0, true, false)
 -check(qgrep("patched[         ]\+foo", "stdout"))
 +check(qgrep("patched[         ]+foo", "stdout"))
 =20
  -- enable inodeprints
  writefile("_MTN/inodeprints")
 =20
  check(mtn("status"), 0, true, false)
 -check(qgrep("patched[         ]\+foo", "stdout"))
 +check(qgrep("patched[         ]+foo", "stdout"))
 =20
  sleep(5)
 =20
 diff --git a/test/func/user_commands/extra_rc b/test/func/user_commands/ext=
 ra_rc
 index 2ec5f9f..aad3764 100644
 --- test/func/user_commands/extra_rc
 +++ test/func/user_commands/extra_rc
 @@ -5,7 +5,8 @@ function check_head(...)
        io.stderr:write("automate call failed\n")
        return
      end
 -    arghead =3D unpack(arg)
 +    local arg =3D {...}
 +    arghead =3D arg[1]
      heads =3D heads:gsub("^%s*(.-)%s*$", "%1")        -- trim leading and 
trailin=
 g whitespace
      if (heads =3D=3D arghead) then
          io.write("heads are equal\n")
 diff --git a/test/src/testlib.lua b/test/src/testlib.lua
 index 6d21a93..19eb278 100644
 --- test/src/testlib.lua
 +++ test/src/testlib.lua
 @@ -30,6 +30,13 @@ files =3D {stdout =3D nil, stdin =3D nil, stderr =3D nil}
  -- for convenience, this is the first word of what get_ostype() returns.
  ostype =3D string.sub(get_ostype(), 1, string.find(get_ostype(), " ")-1)
 =20
 +-- Since Lua 5.2, unpack and loadstrings are deprecated and are either mov=
 ed
 +-- to table.unpack() or replaced by load(). If lua was compiled without
 +-- LUA_COMPAT_UNPACK and/or LUA_COMPAT_LOADSTRING, these two are not
 +-- available and we add a similar compatibility layer, ourselves.
 +unpack =3D unpack or table.unpack
 +loadstring =3D loadstring or load
 +
  -- table of per-test values
  test =3D {}
  -- misc per-test values
 @@ -310,17 +317,11 @@ end
  -- to want to include from the dir for the current test,
  -- since in that case it could just go in the driver file.
  function include(name)
 -  local func, e =3D loadfile(testdir.."/"..name)
 -  if func =3D=3D nil then err(e, 2) end
 -  setfenv(func, getfenv(2))
 -  func()
 +  dofile(testdir.."/"..name)
  end
 =20
  function includecommon(name)
 -  local func, e =3D loadfile(srcdir.."/common/"..name)
 -  if func =3D=3D nil then err(e, 2) end
 -  setfenv(func, getfenv(2))
 -  func()
 +  dofile(srcdir.."/common/"..name)
  end
 =20
  function trim(str)
 @@ -479,12 +480,11 @@ end
  function samelines(f, t)
    local fl =3D {}
    for l in io.lines(f) do table.insert(fl, l) end
 -  if not (table.getn(fl) =3D=3D table.getn(t)) then
 -    L(locheader(), string.format("file has %s lines; table has %s\n",
 -                                 table.getn(fl), table.getn(t)))
 +  if not (#fl =3D=3D #t) then
 +    L(locheader(), string.format("file has %s lines; table has %s\n", #fl,=
  #t))
      return false
    end
 -  for i=3D1,table.getn(t) do
 +  for i=3D1,#t do
      if fl[i] ~=3D t[i] then
        if fl[i] then
          L(locheader(), string.format("file[%d] =3D '%s'; table[%d] =3D '%s=
 '\n",
 @@ -502,12 +502,11 @@ end
  function greplines(f, t)
    local fl =3D {}
    for l in io.lines(f) do table.insert(fl, l) end
 -  if not (table.getn(fl) =3D=3D table.getn(t)) then
 -    L(locheader(), string.format("file has %s lines; table has %s\n",
 -                                 table.getn(fl), table.getn(t)))
 +  if not (#fl =3D=3D #t) then
 +    L(locheader(), string.format("file has %s lines; table has %s\n", #fl,=
  #t))
      return false
    end
 -  for i=3D1,table.getn(t) do
 +  for i=3D1,#t do
      if not regex.search(t[i], fl[i]) then
        L(locheader(), string.format("file[i] =3D '%s'; table[i] =3D '%s'\n",
                                     fl[i], t[i]))
 @@ -577,7 +576,7 @@ function tail(...)
      local mylines =3D {}
      for l in io.lines(file) do
        table.insert(mylines, l)
 -      if table.getn(mylines) > num then
 +      if #mylines > num then
          table.remove(mylines, 1)
        end
      end
 @@ -932,8 +931,8 @@ function run_tests(debugging, list_only, run_dir, logna=
 me, args, progress)
      if _1 then
        l =3D l + 0
        r =3D r + 0
 -      if l < 1 then l =3D table.getn(tests) + l + 1 end
 -      if r < 1 then r =3D table.getn(tests) + r + 1 end
 +      if l < 1 then l =3D #tests + l + 1 end
 +      if r < 1 then r =3D #tests + r + 1 end
        if l > r then l,r =3D r,l end
        for j =3D l,r do
          torun[j] =3D tests[j]
 @@ -941,7 +940,7 @@ function run_tests(debugging, list_only, run_dir, logna=
 me, args, progress)
        run_all =3D false
      elseif string.find(a, "^-?%d+$") then
        r =3D a + 0
 -      if r < 1 then r =3D table.getn(tests) + r + 1 end
 +      if r < 1 then r =3D #tests + r + 1 end
        torun[r] =3D tests[r]
        run_all =3D false
      else
 --=20
 tg: (1150daa..) lua-5.2 (depends on: master)
 
 --KsGdsel6WgEHnImy
 Content-Type: application/pgp-signature
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.14 (NetBSD)
 
 iQEcBAEBAgAGBQJSZDr3AAoJEJmJxkVhw/vTFNIIALHOyZzTNFIgCBhkrhss+yQ/
 yMnf1p/htngBDyOpt/1/u78WZDUHJoxeYfYAhJqRDGSU1uvtcDf8Tp4G3L+cZjBz
 hnu8N0HTj+naSMCbR90z5SwRjZ7iOpM6mbvifdJMPrjiosfdb/vilk9vaWUkz+ZE
 F/ilzOtsE+5n2vm4kyzIg4xDSRxfcrhVfU/3bLTuUcLASxGvBe3aTT7fQyaXF4PC
 l18OErhe9bzuB3KsSWFXsqpztXVF8St39yHT7wscRwsheWG+1kNv/zeJ8o+tqA09
 URYfgaibJp5u+DRt2DxzM4vNzcqtzoaN6wRiM+5AwtH3amckeF9zjfc2d+F3ev4=
 =0dp0
 -----END PGP SIGNATURE-----
 
 --KsGdsel6WgEHnImy--
 


Home | Main Index | Thread Index | Old Index