<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neovim/test/functional/plugin/pack_spec.lua, branch marvim/ci-version-update</title>
<subtitle>Vim-fork focused on extensibility and usability</subtitle>
<id>http://git.waynecole.info/neovim/atom?h=marvim%2Fci-version-update</id>
<link rel='self' href='http://git.waynecole.info/neovim/atom?h=marvim%2Fci-version-update'/>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/'/>
<updated>2026-04-23T15:14:06Z</updated>
<entry>
<title>fix(pack): only use tags that strictly comply with semver spec #39342</title>
<updated>2026-04-23T15:14:06Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-04-23T15:14:06Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=f8c94bb8cf470ff875ac6dc2e962cfb4b9cef0c2'/>
<id>urn:sha1:f8c94bb8cf470ff875ac6dc2e962cfb4b9cef0c2</id>
<content type='text'>
Problem: Using `version=vim.version.range(...)` in plugin specification
  is meant to use semver-like tags. Whether a tag is semver-like was
  decided by a plain `vim.version.parse` which is not strict by default.
  This allowed treating tags like `nvim-0.6` (which is usually reserved
  for the latest revision compatible with Nvim&lt;=0.6 version) like semver
  tags and resulted in confusing behavior (preferring `nvim-0.6` tag
  over `v0.2.2`, for example).

Solution: Use `vim.version.range(x, { strict = true })` to decide if the
  tag name is semver-like or not. This allows tags like both `v1.2.3`
  and `1.2.3` while being consistent in what Nvim thinks is a semver
  string.

  This is technically not a breaking change since it was documented that
  only tags like `v&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;` will be recognized as
  semver.</content>
</entry>
<entry>
<title>fix(pack): GIT_DIR/GIT_WORK_TREE env vars may interfere #39279</title>
<updated>2026-04-22T08:46:48Z</updated>
<author>
<name>fleesk</name>
<email>48991514+fleesk@users.noreply.github.com</email>
</author>
<published>2026-04-22T08:46:48Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=e53e728c925641397bc25969457db67189a2eb75'/>
<id>urn:sha1:e53e728c925641397bc25969457db67189a2eb75</id>
<content type='text'>
Problem:
With GIT_DIR/GIT_WORK_TREE set, the LSP on the vim.pack.update()
confirmation buffer does not show the correct git log on hover.

Solution:
Temporarily remove the git vars from the environment.</content>
</entry>
<entry>
<title>test(pack): increase retry timeout for startup test #39125</title>
<updated>2026-04-16T14:11:34Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-04-16T14:11:34Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=df6a0827fbabbf7501bf6f110a5fd3c3463eb6ac'/>
<id>urn:sha1:df6a0827fbabbf7501bf6f110a5fd3c3463eb6ac</id>
<content type='text'>
Problem: Unreliable test on Windows which sometimes fails with too many
  failed retries.

Solution: Increase timeout in hopes that it will be enough to make it
  pass more frequently. This should not affect fast and already working
  platforms.</content>
</entry>
<entry>
<title>test(pack): use n.rmdir() to delete directories #39046</title>
<updated>2026-04-14T12:22:11Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-04-14T12:22:11Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=b8a24bfadf5c70bc2169bbc309999df6a0fea87a'/>
<id>urn:sha1:b8a24bfadf5c70bc2169bbc309999df6a0fea87a</id>
<content type='text'>
Problem: using `vim.fs.rm(dir_path, { force = true, recursive = true })`
  can result in an error on Windows if the process has a handle to it.

Solution: Use `n.rmdir()` helper in cases when its possible side effects
  (like changing working directory) does not matter.</content>
</entry>
<entry>
<title>test: fix s390x failures</title>
<updated>2026-03-29T11:36:56Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-03-28T22:56:13Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=0ac321a1d6fb9c40fd0343f88398773b1cc1f71a'/>
<id>urn:sha1:0ac321a1d6fb9c40fd0343f88398773b1cc1f71a</id>
<content type='text'>
Problem:
failures in s390x CI.

Solution:
- runtime/lua/man.lua: parse_path() can return nil but 3 callers didn't handle it.
- skip some tests on s390x.

TODO:

- TODO: why "build/bin/xxd is not executable" on s390x?
- TODO: other failures, not addressed (see below).

OTHER FAILURES:

    FAILED   test/functional/treesitter/fold_spec.lua @ 87: treesitter foldexpr recomputes fold levels after lines are added/removed
    test/functional/treesitter/fold_spec.lua:95: Expected objects to be the same.
    Passed in:
    (table: 0x4013c18940) {
      [1] = '0'
      [2] = '0'
      [3] = '0'
     *[4] = '0'
      [5] = '0'
      ...
    Expected:
    (table: 0x4005acf900) {
      [1] = '0'
      [2] = '0'
      [3] = '&gt;1'
     *[4] = '1'
      [5] = '1'
      ...

    stack traceback:
            (tail call): ?
            test/functional/treesitter/fold_spec.lua:95: in function &lt;test/functional/treesitter/fold_spec.lua:87&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 52: treesitter incremental-selection works
    test/functional/treesitter/select_spec.lua:63: Expected objects to be the same.
    Passed in:
    (string) 'bar(2)'
    Expected:
    (string) 'foo(1)'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:63: in function &lt;test/functional/treesitter/select_spec.lua:52&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 69: treesitter incremental-selection repeat
    test/functional/treesitter/select_spec.lua:82: Expected objects to be the same.
    Passed in:
    (string) '2'
    Expected:
    (string) '4'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:82: in function &lt;test/functional/treesitter/select_spec.lua:69&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 98: treesitter incremental-selection history
    test/functional/treesitter/select_spec.lua:111: Expected objects to be the same.
    Passed in:
    (string) 'bar(2)'
    Expected:
    (string) 'foo(1)'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:111: in function &lt;test/functional/treesitter/select_spec.lua:98&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 186: treesitter incremental-selection with injections works
    test/functional/treesitter/select_spec.lua:201: Expected objects to be the same.
    Passed in:
    (string) 'lua'
    Expected:
    (string) 'foo'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:201: in function &lt;test/functional/treesitter/select_spec.lua:186&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 216: treesitter incremental-selection with injections ignores overlapping nodes
    test/functional/treesitter/select_spec.lua:231: Expected objects to be the same.
    Passed in:
    (string) ' )'
    Expected:
    (string) ' foo('

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:231: in function &lt;test/functional/treesitter/select_spec.lua:216&gt;

    FAILED   test/functional/treesitter/select_spec.lua @ 307: treesitter incremental-selection with injections handles disjointed trees
    test/functional/treesitter/select_spec.lua:337: Expected objects to be the same.
    Passed in:
    (string) 'int'
    Expected:
    (string) '1}'

    stack traceback:
            (tail call): ?
            test/functional/treesitter/select_spec.lua:337: in function &lt;test/functional/treesitter/select_spec.lua:307&gt;

    ERROR    test/functional/treesitter/parser_spec.lua @ 562: treesitter parser API can run async parses with string parsers
    test/functional/treesitter/parser_spec.lua:565: attempt to index a nil value

    stack traceback:
            test/functional/testnvim/exec_lua.lua:124: in function &lt;test/functional/testnvim/exec_lua.lua:105&gt;
            (tail call): ?
            (tail call): ?
            test/functional/treesitter/parser_spec.lua:563: in function &lt;test/functional/treesitter/parser_spec.lua:562&gt;

    FAILED   test/functional/core/job_spec.lua @ 1157: jobs jobstop() kills entire process tree #6530
    test/functional/core/job_spec.lua:1244: retry() attempts: 94
    test/functional/core/job_spec.lua:1246: Expected objects to be the same.
    Passed in:
    (table: 0x401dd74b30) {
      [name] = 'sleep &lt;defunct&gt;'
      [pid] = 33579
      [ppid] = 1 }
    Expected:
    (userdata) 'vim.NIL'

    stack traceback:
            test/testutil.lua:89: in function 'retry'
            test/functional/core/job_spec.lua:1244: in function &lt;test/functional/core/job_spec.lua:1157&gt;
</content>
</entry>
<entry>
<title>fix(pack): set `source` in progress report #38511</title>
<updated>2026-03-27T11:36:06Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-03-27T11:36:06Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=0fa96585dc1deda5bdba4053a51cafee6308c095'/>
<id>urn:sha1:0fa96585dc1deda5bdba4053a51cafee6308c095</id>
<content type='text'>
Problem: Progress reports via `nvim_echo()` gained an ability to set
  `source` and `vim.pack` doesn't currently set one.

Solution: Set `source` to 'vim.pack'. Ideally, the title then can be
  something else more informative (like "update", "download", etc.), but
  it is used when showing progress messages. So it has to be "vim.pack"
  in this case.</content>
</entry>
<entry>
<title>fix(pack): add trailing newline to lockfile #38469</title>
<updated>2026-03-24T17:23:17Z</updated>
<author>
<name>Justin Mayhew</name>
<email>mayhew@live.ca</email>
</author>
<published>2026-03-24T17:23:17Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=b02d1303b80f18f482b9eee94f1f29245c9da69f'/>
<id>urn:sha1:b02d1303b80f18f482b9eee94f1f29245c9da69f</id>
<content type='text'>
Problem: JSON files should end with a trailing newline so that Unix
  tools work as expected, Git doesn't report "No newline at end of file"
  and to avoid noise in diffs from editors and other tools adding the
  missing newline.

Solution: Add trailing newline.</content>
</entry>
<entry>
<title>fix(pack): ensure `data` spec is passed in events during lockfile sync #38139</title>
<updated>2026-03-04T00:16:24Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-03-04T00:16:24Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=f00abc6a56693b030bed2e9771141067712e2b2a'/>
<id>urn:sha1:f00abc6a56693b030bed2e9771141067712e2b2a</id>
<content type='text'>
Problem: During initial "bootstrap" via lockfile synchronization, the
  whole plugin specification is reconstructed from the lockfile data,
  ignoring potential user changes added in the first `vim.pack.add()`.
  This is enough in most situations since it is the only data needed
  for actual installation.

  However, this affects specification passed to `PackChanged[Pre]`
  events. In particular, `data` field is missing which can be a problem
  if there is a `PackChanged kind=install` hook that uses that field
  (like with some kind of `build` method used during install).
  And there might be different `version` set in `vim.pack.add()`.

Solution: Pass the `specs` input of the first `vim.pack.add()` down to
  lockfile synchronization and use it to reconstruct plugin
  specification for the to-be-installed plugin. If present among the
  user's `specs`, it is used but with forced `src` from the lockfile (as
  it is the one used during installation).

  Note that this still has a caveat when using separate
  `vim.pack.add()`, as only the specs from the first input (when the
  lockfile synchronization happens) is taken into account.</content>
</entry>
<entry>
<title>test: start test runners in Xtest_xdg dir (#37964)</title>
<updated>2026-02-19T22:53:33Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2026-02-19T22:53:33Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=e3d46a63375c84b7bd409f1f07ef56eb985eae50'/>
<id>urn:sha1:e3d46a63375c84b7bd409f1f07ef56eb985eae50</id>
<content type='text'>
This is a better way to prevent parallel tests from interfering with
each other, as there are many ways files can be created and deleted in
tests, so enforcing different file names is hard.

Using $TMPDIR can also work in most cases, but 'backipskip' etc. have
special defaults for $TMPDIR.

Symlink runtime/, src/, test/ and README.md to Xtest_xdg dir to make
tests more convenient (and symlinking test/ is required for busted).

Also, use README.md instead of test/README.md in the Ex mode inccommand
test, as test/README.md no longer contains 'N' char.</content>
</entry>
<entry>
<title>fix(pack): explicitly close confirmation window #37861</title>
<updated>2026-02-14T13:26:36Z</updated>
<author>
<name>Evgeni Chasnovski</name>
<email>evgeni.chasnovski@gmail.com</email>
</author>
<published>2026-02-14T13:26:36Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=539b8027a3099399ad362896dc7de0e93e2f5bfa'/>
<id>urn:sha1:539b8027a3099399ad362896dc7de0e93e2f5bfa</id>
<content type='text'>
Problem: Executing `nvim_buf_delete()` does not guarantee that the
  window which shows the buffer is going to close after `:write` or
  `:quit`. In particular, if there is no listed buffer present.

Solution: Explicitly close the window that was created for confirmation
  buffer. Use `pcall` to catch cases when the window was already closed
  or when it is the last window.</content>
</entry>
</feed>
