grim/convey

Prep for release
v0.9.1
2017-09-21, Gary Kramlich
86643e4fda89
Prep for release
/*
* Convey
* Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package tasks
import (
"os"
"strings"
)
// ParseFilePath will split a string on the first : and return two pieces.
// If there is no colon, then either "." (the current working directory)
// will be returned as the destination if the source was an item in the
// root of the workspace; otherwise, the source will be returned as the
// destination. If base is specified it will be stripped from the destination.
func ParseFilePath(base, file string) (string, string) {
parts := strings.SplitN(file, ":", 2)
if len(parts) != 1 {
return parts[0], trimBase(base, parts[1])
}
return parts[0], trimBase(base, DestFromSrc(parts[0]))
}
func trimBase(base, path string) string {
if base == "" {
return path
}
if !strings.HasSuffix(base, string(os.PathSeparator)) {
base += string(os.PathSeparator)
}
return strings.TrimPrefix(path, base)
}
// DestFromSrc returns "." if the given filename does not reference a
// file or directory outside of the current working directory and the
// input otherwise.
func DestFromSrc(file string) string {
clean := strings.TrimRight(file, string(os.PathSeparator))
if !strings.ContainsRune(clean, os.PathSeparator) {
return "."
}
return file
}