commit - c2ac94566e2a939475a82ccfde0d509ea8508c7e
commit + cbd1af7a5ac90edbfeec7507187896b76710c60e
blob - bae036809c6294a731832bedff5d12763eda61d3
blob + fd0fb74b2c6a1723f8aca3e8c9c832e065f1d6d1
--- got/got.c
+++ got/got.c
return NULL;
}
+static const struct got_error *
+resolve_path_in_worktree(char **wt_path, struct got_worktree *worktree,
+ const char *arg)
+{
+ const struct got_error *err = NULL;
+ char *resolved, *path = NULL;
+ size_t len;
+
+ *wt_path = NULL;
+
+ resolved = realpath(arg, NULL);
+ if (resolved == NULL)
+ return got_error_from_errno();
+
+ if (strncmp(got_worktree_get_root_path(worktree), resolved,
+ strlen(got_worktree_get_root_path(worktree)))) {
+ err = got_error(GOT_ERR_BAD_PATH);
+ goto done;
+ }
+
+ path = strdup(resolved + strlen(got_worktree_get_root_path(worktree)));
+ if (path == NULL) {
+ err = got_error_from_errno();
+ goto done;
+ }
+
+ /* XXX status walk can't deal with trailing slash! */
+ len = strlen(path);
+ while (path[len - 1] == '/') {
+ path[len - 1] = '\0';
+ len--;
+ }
+done:
+ free(resolved);
+ if (err == NULL)
+ *wt_path = path;
+ else
+ free(path);
+ return err;
+}
+
__dead static void
usage_checkout(void)
{
argc -= optind;
argv += optind;
-
- if (argc == 0)
- path = strdup("");
- else if (argc == 1)
- path = strdup(argv[0]);
- else
- usage_log();
- if (path == NULL)
- return got_error_from_errno();
cwd = getcwd(NULL, 0);
if (cwd == NULL) {
goto done;
error = NULL;
+ if (argc == 0)
+ path = strdup("");
+ else if (argc == 1) {
+ error = resolve_path_in_worktree(&path, worktree, argv[0]);
+ if (error)
+ goto done;
+ } else
+ usage_log();
+ if (path == NULL)
+ goto done;
+
repo_path = worktree ?
strdup(got_worktree_get_repo_path(worktree)) : strdup(cwd);
if (repo_path == NULL) {
}
static const struct got_error *
-get_status_path(char **status_path, struct got_worktree *worktree,
- const char *arg)
-{
- const struct got_error *err = NULL;
- char *resolved, *path = NULL;
- size_t len;
-
- *status_path = NULL;
-
- resolved = realpath(arg, NULL);
- if (resolved == NULL)
- return got_error_from_errno();
-
- if (strncmp(got_worktree_get_root_path(worktree), resolved,
- strlen(got_worktree_get_root_path(worktree)))) {
- err = got_error(GOT_ERR_BAD_PATH);
- goto done;
- }
-
- path = strdup(resolved + strlen(got_worktree_get_root_path(worktree)));
- if (path == NULL) {
- err = got_error_from_errno();
- goto done;
- }
-
- /* XXX status walk can't deal with trailing slash! */
- len = strlen(path);
- while (path[len - 1] == '/') {
- path[len - 1] = '\0';
- len--;
- }
-done:
- free(resolved);
- if (err == NULL)
- *status_path = path;
- else
- free(path);
- return err;
-}
-
-static const struct got_error *
cmd_diff(int argc, char *argv[])
{
const struct got_error *error;
goto done;
}
if (argc == 1) {
- error = get_status_path(&path, worktree, argv[0]);
+ error = resolve_path_in_worktree(&path, worktree,
+ argv[0]);
if (error)
goto done;
} else {
goto done;
}
} else if (argc == 1) {
- error = get_status_path(&path, worktree, argv[0]);
+ error = resolve_path_in_worktree(&path, worktree, argv[0]);
if (error)
goto done;
} else
blob - 53654f5fbd9e0f82eb6ed8d9de43129689a6bf99
blob + d26e99387b67e0166e2150169d1ae7771aa42301
--- regress/cmdline/Makefile
+++ regress/cmdline/Makefile
status:
./status.sh
+log:
+ ./log.sh
+
.include <bsd.regress.mk>
blob - /dev/null
blob + 1e0c31ab493c7eb86539cf585e80f33a4be1e856 (mode 755)
--- /dev/null
+++ regress/cmdline/log.sh
+#!/bin/sh
+#
+# Copyright (c) 2019 Stefan Sperling <stsp@openbsd.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+. ./common.sh
+
+function test_log_in_worktree {
+ local testroot=`test_init log_in_worktree`
+ local head_rev=`git_show_head $testroot/repo`
+
+ got checkout $testroot/repo $testroot/wt > /dev/null
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+
+ echo "commit $head_rev (master)" > $testroot/stdout.expected
+
+ for p in "" "." alpha epsilon; do
+ (cd $testroot/wt && got log $p | \
+ grep ^commit > $testroot/stdout)
+ cmp $testroot/stdout.expected $testroot/stdout
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+ done
+
+ for p in "" "." zeta; do
+ (cd $testroot/wt/epsilon && got log $p | \
+ grep ^commit > $testroot/stdout)
+ cmp $testroot/stdout.expected $testroot/stdout
+ ret="$?"
+ if [ "$ret" != "0" ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+ done
+
+ test_done "$testroot" "0"
+}
+
+run_test test_log_in_worktree