Hi, thanks to you both for your help!
Ricardo Wurmus <rek...@elephly.net> writes: > Thompson, David <dthomps...@worcester.edu> writes: > >> On Fri, Jul 8, 2016 at 11:53 AM, ng0 <n...@we.make.ritual.n0.is> wrote: >>> I need some feedback on the git-service. >>> The inserted patch gives me this output: >>> >>> >>> +(define-record-type* <git-configuration> >>> + git-configuration make-git-configuration >>> + git-configuration? >>> + (git git-configuration-git ; <package> >>> + (default git)) >>> + (base-path git-configuration-base-path) ; string >>> + (port git-configuration-port)) ; string >> >> So, this is a record type... >> >>> + >>> +(define git-shepherd-service >>> + (match-lambda >>> + (($ <git-configuration> git base-path port) >>> + (let ((conf (string-append >>> + "--base-path="base-path >>> + "--port="(number->string port)))) >>> + (list (shepherd-service >>> + (provision '(git)) >>> + (requirement '(networking loopback syslogd)) >>> + (documentation "Run the git-daemon server for git >>> repositories") >>> + (start #~(make-forkexec-constructor >>> + (list (string-append #$git "/bin/git") >>> + "daemon" "--syslog" "--informative-errors" >>> + #$conf))) >> >> ...and you (ungexp conf), where conf is an instance of that record >> type, into what is supposed to be a list of strings that form command >> line arguments for git. See the issue? With the additional input Ricardo gave it's clearer now. > > I might be misreading this, but “conf” here is literally the string > > “--base-path=something--port=1234” > > when “base-path” is the string “something” and “port” is the number > “1234”. > > The let binding for “conf” is incorrect. > > First, you say earlier that “port” is a string: > >> + (port git-configuration-port)) ; string > > but then you pass it to “number->string”, so it’s actually expected to > be a number. > > Second, the argument to “make-forkexec-constructor” is supposed to be a > list of strings, each representing one argument. So defining “conf” as > a concatenation is not okay. You don’t need a let-binding for “conf” at > all. Just use “base-path” and “port” directly. (I haven’t tested > this.) > > (list (string-append #$git "/bin/git") > "daemon" "--syslog" "--informative-errors" > (string-append "--base-path=" $#base-path) > (string-append "--port=" $#port)) > > But the error you get stems from passing a value of > “<git-configuration>” to something that expects a package. I don’t see > where this happens. Since I cannot see “~/testvm.scm” I cannot tell you > anything more. > > ~~ Ricardo > I based this on information sourced from other services, and some parts (the service field and the shepherd-service) are just testing out what is expected and what's not. I feel like your information and what I need to read up on helps alot. thanks. -- ♥Ⓐ ng0 For non-prism friendly talk find me on http://www.psyced.org SecuShare – http://secushare.org