Skip to content

Support server-side dynamically generated tarballs #145

Open
@daewok

Description

@daewok

I'd love to make a ql distribution for my colleagues and myself that fetches tarballs directly from our source control website (such as gitlab or github) based on git SHA-1 IDs. This almost works out of the box, but there are a few show stoppers that need to be addressed. I was wondering if the improvements below would be welcome additions to the quicklisp-client.

  1. Allow ? to appear in release URLs. Gitlab generates tarballs from URLs of the form: /GROUP/PROJECT/repository/archive.tar.gz?ref=REF-ID. Currently, it seems the ? throws the client for a loop. When unescaped in releases.txt, probe-file treats it as a wildcard and when it's escaped, it's escaped in the URL when fetching which is not correct.

  2. Allow URL filenames to be different from the name of the tarball on the file system. Both github and gitlab generate tarballs from URLs with filenames that are independent of the repo name (REF-ID.tar.gz for github and archive.tar.gz?ref=REF-ID for gitlab). However, they both send back the Content-Disposition header with an appropriate name. I'd like to make the client look for this header and if it's provided, use the provided filename for storing the tarball on the file system.

  3. Allow users to set headers for the fetch requests. (Not really directly related to server-side generated tarballs, but useful in many situations where you also want to use generated tarballs). We need this to authenticate to our gitlab install (and I believe it could be used for private github repos as well). I have a proof of concept for this that stores headers using config-value for the path fetch-headers/HOSTNAME/HEADER-NAME/value. I imagine a full-featured version would also allow for command instead of value to tell the client to run a command to get the header value in case users don't want to store private tokens in plain text on the file system. And the presence of secure would prevent the header from being sent over unencrypted connections.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions