[bug#35653] gnu: Add rcm.
diff mbox series

Message ID 20190509153834.26585-1-josh@inv.alid.pw
State New
Headers show
Series
  • [bug#35653] gnu: Add rcm.
Related show

Checks

Context Check Description
cbaines/applying patch success Successfully applied

Commit Message

Josh Holland May 9, 2019, 3:38 p.m. UTC
Hi,

Below is the first package definition I have written for Guix, defining
the dotfile management suite rcm[0].  I'm sure there are changes to be
made before it can be merged, and I did have a few issues while I was
writing it.  However, it does now build, install and run fine on my
local machine.

First, I wasn't sure whether it fits into an existing module already.
I had a look through the contents of gnu/packages/ but I didn't see
anything that really stuck out.  Perhaps it fits into shellutils?

Second, I had a lot of trouble with the test suite.  The first thing
that I had to solve was some hardcoded paths in the test cases, which
I solved with the following argument to `#:phases`:

(modify-phases %standard-phases
  (add-after 'patch-source-shebangs 'patch-tests
    (lambda _
      (substitute* '("test/rcrc-tilde.t"
                     "test/rcdn-hooks-run-in-order.t"
                     "test/rcup-hooks-run-in-order.t")
        (("/bin/sh") (which "sh")))
      (substitute* "test/rcup-hooks.t"
        (("/usr/bin/env") (which "env")))
      #t)))

This may or may not be the right way to go about things; I'd appreciate
some feedback on that.

However, I was still having issues with certain tests
(`test/rcup-hooks.t`, `test/rcdn-hooks.t` and possibly others)
non-deterministically failing trying to create and read /tmp/test files.
I'm not sure how to fix this, or even what's causing it: every time I
tried to reproduce it by hand the tests passed.  I assume that something
is deleting /tmp/test while the test is running but I'm not sure what.
In the end I just disabled the tests, since even passing XFAIL_TESTS
doesn't work as sometimes the tests just pass.

If there are any ideas to solve the tests, or any other issues that need
fixing, I'm happy to re-submit the patch.

Thanks,
Josh

[0]: http://thoughtbot.github.io/rcm/

-- >8 --
Subject: [PATCH] gnu: Add rcm.

* gnu/packages/rcm.scm (rcm): New variable.
---
 gnu/packages/rcm.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 gnu/packages/rcm.scm

Comments

Danny Milosavljevic May 9, 2019, 4:52 p.m. UTC | #1
Hi,

On Thu,  9 May 2019 16:38:34 +0100
Josh Holland <josh@inv.alid.pw> wrote:

> First, I wasn't sure whether it fits into an existing module already.
> I had a look through the contents of gnu/packages/ but I didn't see
> anything that really stuck out.  Perhaps it fits into shellutils?

Yes, and it's not so important in which module what is.  The module
name is not part of the package name anyway, so we are mostly using
it to manage compilation complexity (sigh).  Developers can find it
using "guix edit rcm" anyway.

I try not to introduce a new module for each package because it leads
to a lot of file header duplication, and at some point the comment/code
ratio is getting ridiculous--but, technically, even that would be fine.

> This may or may not be the right way to go about things; I'd appreciate
> some feedback on that.

Looks fine.

> If there are any ideas to solve the tests, or any other issues that need
> fixing, I'm happy to re-submit the patch.

> +    (arguments '(#:tests? #f))

From your description, try (#:parallel-tests? #f) instead of (#:tests? #f).

Nice work!

Some test scripts still have /bin/sh
Josh Holland May 9, 2019, 5:59 p.m. UTC | #2
Danny Milosavljevic writes:
> Yes, and it's not so important in which module what is.

I'll just leave it in its own module for now then, and if a maintainer
wants to move it either when it's merged or later down the line that's
fine.

> From your description, try (#:parallel-tests? #f) instead of (#:tests? #f).

Oh of course, that makes perfect sense!  That fixes it and all the tests
pass now.

> Some test scripts still have /bin/sh

AFAICT the only one I'm not patching is `test/rcup-standalone.t` and
that's kind of a weird one, because it's testing the feature to output a
standalone shell script rather than run it.  Changing that would require
patching the rcup script itself and I don't think that's worth it,
especially as the script uses the bash default value syntax to allow
all the commands to be overriden.

If I'm still operating git send-email correctly, a new patch should be
attached with these changes, and a better commit message.  I also updated
`gnu/local.mk` because that seems to be a thing I forgot initially.

Thanks,
Josh

Patch
diff mbox series

diff --git a/gnu/packages/rcm.scm b/gnu/packages/rcm.scm
new file mode 100644
index 0000000000..180fff5ed9
--- /dev/null
+++ b/gnu/packages/rcm.scm
@@ -0,0 +1,33 @@ 
+(define-module (gnu packages rcm)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages perl))
+
+(define-public rcm
+  (package
+    (name "rcm")
+    (version "1.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://thoughtbot.github.io/rcm/dist/rcm-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32 "1bqk7rrp1ckzvsvl9wghsr77m8xl3a7yc5gqdsisz492dx2j8mck"))))
+    (build-system gnu-build-system)
+    (arguments '(#:tests? #f))
+    (native-inputs `(("perl" ,perl)
+                     ("python-cram" ,python-cram)))
+    (synopsis "Management suite for dotfiles")
+    (description "The rcm suite of tools is for managing dotfiles directories.  This is
+a directory containing all the @code{.*rc} files in your home directory
+(@code{.zshrc}, @code{.vimrc}, and so on). These files have gone by many
+names in history, such as “rc files” because they typically end in rc
+or “dotfiles” because they begin with a period.  This suite is useful
+for committing your rc files to a central repository to share, but it also
+scales to a more complex situation such as multiple source directories
+shared between computers with some host-specific or task-specific files.")
+    (license bsd-3)
+    (home-page "https://github.com/thoughtbot/rcm")))