Mercurial > repo
view share/lua/5.2/luarocks/dir.lua @ 12508:335a2a849232 draft default tip
<wib_jonas> `` f=/hackenv/bin/dateu; >$f echo $\'#!/bin/bash\\nset -e\\nif (( 1 < $# )); then echo "dateu error: too many command-line arguments. Usage: dateu datetimestring"; exit 2; fi\\nexec date -u ${1:+-d "$1"} "+%Y-%m-%d %H:%M:%S.%3N %z %Z %B %-e %A %G-W%V-%u"\'; chmod a+x "$f"
author | HackEso <hackeso@esolangs.org> |
---|---|
date | Wed, 03 Jul 2024 18:15:24 +0100 |
parents | d137f631bad5 |
children |
line wrap: on
line source
--- Generic utilities for handling pathnames. module("luarocks.dir", package.seeall) separator = "/" --- Strip the path off a path+filename. -- @param pathname string: A path+name, such as "/a/b/c" -- or "\a\b\c". -- @return string: The filename without its path, such as "c". function base_name(pathname) assert(type(pathname) == "string") local base = pathname:gsub("[/\\]*$", ""):match(".*[/\\]([^/\\]*)") return base or pathname end --- Strip the name off a path+filename. -- @param pathname string: A path+name, such as "/a/b/c". -- @return string: The filename without its path, such as "/a/b/". -- For entries such as "/a/b/", "/a/" is returned. If there are -- no directory separators in input, "" is returned. function dir_name(pathname) assert(type(pathname) == "string") return (pathname:gsub("/*$", ""):match("(.*/)[^/]*")) or "" end --- Describe a path in a cross-platform way. -- Use this function to avoid platform-specific directory -- separators in other modules. Removes trailing slashes from -- each component given, to avoid repeated separators. -- Separators inside strings are kept, to handle URLs containing -- protocols. -- @param ... strings representing directories -- @return string: a string with a platform-specific representation -- of the path. function path(...) local items = {...} local i = 1 while items[i] do items[i] = items[i]:gsub("(.+)/+$", "%1") if items[i] == "" then table.remove(items, i) else i = i + 1 end end return (table.concat(items, "/"):gsub("(.+)/+$", "%1")) end --- Split protocol and path from an URL or local pathname. -- URLs should be in the "protocol://path" format. -- For local pathnames, "file" is returned as the protocol. -- @param url string: an URL or a local pathname. -- @return string, string: the protocol, and the pathname without the protocol. function split_url(url) assert(type(url) == "string") local protocol, pathname = url:match("^([^:]*)://(.*)") if not protocol then protocol = "file" pathname = url end return protocol, pathname end function normalize(name) return name:gsub("\\", "/"):gsub("(.)/*$", "%1") end