Subject: [bug#40752] gnu: Add eject.

From: Tobias Geerinckx-Rice <[email-masked]>
Date: Wed, 22 Apr 2020 00:28:30 +0200

Raghav,

Thanks for the patch!  Amazing that this wasn't in Guix yet.  Even 
more amazing that I didn't package it.

Raghav Gururajan 写道：
+(define-public eject
+  (package
+    (name "eject")
+    (version "2019.08.22")

You've been around long enough to know how we package git releases 
:-)  Certainly not like this.

More like

  ;; Comment explaining why we use a git snapshot.
  (let ((commit "12a22e…")
        (revision "0"))
    (package …
      (version (git version "2.1.…" revision commit))

please.

Upstream[0 ]says there's a 2.1.6 version, but it may exist nowhere 
but in the author's mind.  If you do find a tarball, tag, or 
corresponding commit, use it, or explain in a comment why 12a22e 
is better.

+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://git.code.sf.net/p/eject/git")
+         (commit "12a22e")))

Please don't abbreviate commits like this.

+       (file-name (git-file-name name version))

Yay!

+       (sha256
+        (base32 
"1dxj0zn32l8k16j5innh8y4snambx1b702ny37114drddqcqac6h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No target

Write ‘; no test suite’ instead, which is to be expected from a 
package like this.

‘No target’ makes it sound like who knows, there might be tests, 
but there's no make rule to run them, so we don't.  Not a good 
look.

+       #:make-flags
+       (list

Hm?  Eh?  Oh…  Please insert a comment here:

         ;; ./configure respects --prefix=; the handwritten 
         po/Makefile doesn't.

+        (string-append "PREFIX=" (assoc-ref %outputs "out")))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)))
+    (inputs
+     `(("lvm2" ,lvm2)
+       ("sg3-utils" ,sg3-utils)))
+    (synopsis "Utility for Removable Media")

…is too vague.  And this is worse:

+    (description "Eject allows removable media (typically a 
CD-ROM, floppy disk,
+tape, or JAZ or ZIP disk) to be ejected under software control. 
The command can
+also control some multi-disc CD-ROM changers, the auto-eject 
feature supported
+by some devices, and close the disc tray of some CD-ROM 
drives. ")

I know this is upstream's handiwork; not yours, but crikey.

Always feel free to edit the hell out of these texts.  ‘Software 
Foo allows gizmos to be frobbed under software control’? → ‘Foo 
frobs gizmos’. Done.

A quick attempt with some inspiration from Debian:

  (synopsis "Eject and safely disconnect removable media")
  (description
    "This little program will eject CD-ROMs and other ejectable 
    removable media.
It can also set the auto-eject feature, close the tray of some 
CD-ROM drives,
and select the active disc in supported multi-disc changers.

You can also use @command{eject} to properly disconnect external 
mass-storage
devices like mobile phones, digital cameras, or portable music 
players.")

+    (home-page "http://eject.sourceforge.net")
+    (license license:gpl2+)))
+

I wasn't able to apply & test this patch; I guess ‘udevil’ is 
still under review.  I don't have time to review it as well.

Please: try to add new packages in alphabetical order, NOT blindly 
to the beginning or end of files.  For once, this has nothing 
(well, less) to do with my obsession for ordnung.  It makes 
annoying issues like this less likely.

It doesn't matter that most package .scm files are an unordered 
mess: if you'd added eject near the beginning and udevil near the 
end, the two unrelated packages wouldn't conflict.

Kind regards,

T G-R

[0]: https://sourceforge.net/p/eject/git/ci/master/tree/NEWS