Make file deletion work, add test
This commit is contained in:
parent
05c35f2cf7
commit
2bd973f645
|
|
@ -899,7 +899,7 @@ walk_parsed_tree (HacktreeRepo *self,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
ParsedTreeData *tree,
|
ParsedTreeData *tree,
|
||||||
int *out_filename_index, /* out*/
|
int *out_filename_index, /* out*/
|
||||||
char **out_component, /* out, but do not free */
|
char **out_component, /* out, must free */
|
||||||
ParsedTreeData **out_tree, /* out, but do not free */
|
ParsedTreeData **out_tree, /* out, but do not free */
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
|
@ -907,8 +907,8 @@ walk_parsed_tree (HacktreeRepo *self,
|
||||||
GPtrArray *components = NULL;
|
GPtrArray *components = NULL;
|
||||||
ParsedTreeData *current_tree = tree;
|
ParsedTreeData *current_tree = tree;
|
||||||
const char *component = NULL;
|
const char *component = NULL;
|
||||||
const char *file_sha1;
|
const char *file_sha1 = NULL;
|
||||||
ParsedDirectoryData *dir;
|
ParsedDirectoryData *dir = NULL;
|
||||||
int i;
|
int i;
|
||||||
int ret_filename_index = 0;
|
int ret_filename_index = 0;
|
||||||
|
|
||||||
|
|
@ -937,16 +937,18 @@ walk_parsed_tree (HacktreeRepo *self,
|
||||||
filename);
|
filename);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
else if (!dir)
|
else
|
||||||
g_assert_not_reached ();
|
{
|
||||||
current_tree = dir->tree_data;
|
g_assert (dir != NULL);
|
||||||
ret_filename_index++;
|
current_tree = dir->tree_data;
|
||||||
|
ret_filename_index++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
g_assert (!(file_sha1 && dir));
|
|
||||||
*out_filename_index = i;
|
*out_filename_index = i;
|
||||||
*out_component = components->pdata[i-1];
|
*out_component = components->pdata[components->len-1];
|
||||||
|
components->pdata[components->len-1] = NULL; /* steal */
|
||||||
*out_tree = current_tree;
|
*out_tree = current_tree;
|
||||||
out:
|
out:
|
||||||
g_ptr_array_free (components, TRUE);
|
g_ptr_array_free (components, TRUE);
|
||||||
|
|
@ -967,7 +969,7 @@ remove_files_from_tree (HacktreeRepo *self,
|
||||||
{
|
{
|
||||||
const char *filename = removed_files->pdata[i];
|
const char *filename = removed_files->pdata[i];
|
||||||
int filename_index;
|
int filename_index;
|
||||||
const char *component;
|
char *component = NULL;
|
||||||
ParsedTreeData *parent;
|
ParsedTreeData *parent;
|
||||||
const char *file_sha1;
|
const char *file_sha1;
|
||||||
ParsedTreeData *dir;
|
ParsedTreeData *dir;
|
||||||
|
|
@ -988,7 +990,14 @@ remove_files_from_tree (HacktreeRepo *self,
|
||||||
else if (dir)
|
else if (dir)
|
||||||
g_hash_table_remove (parent->directories, component);
|
g_hash_table_remove (parent->directories, component);
|
||||||
else
|
else
|
||||||
g_assert_not_reached ();
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"No such file or directory: %s",
|
||||||
|
filename);
|
||||||
|
g_free (component);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
g_free (component);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,13 @@ die () {
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_has_file () {
|
assert_has_file () {
|
||||||
test -f $1 || (echo "Couldn't find $1"; exit 1)
|
test -f "$1" || (echo "Couldn't find '$1'"; exit 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_not_has_file () {
|
||||||
|
if test -f "$1"; then
|
||||||
|
echo "File '$1' exists"; exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_test_repository1 () {
|
setup_test_repository1 () {
|
||||||
|
|
@ -67,8 +73,11 @@ setup_test_repository2 () {
|
||||||
mkdir baz/another/
|
mkdir baz/another/
|
||||||
echo x > baz/another/y
|
echo x > baz/another/y
|
||||||
|
|
||||||
mkdir ../repo
|
cd ..
|
||||||
ht_repo="--repo=../repo"
|
mkdir repo
|
||||||
|
cd repo
|
||||||
|
ht_repo="--repo=`pwd`"
|
||||||
|
cd ../files
|
||||||
export ht_repo
|
export ht_repo
|
||||||
hacktree init $ht_repo
|
hacktree init $ht_repo
|
||||||
hacktree commit $ht_repo -s "Test Commit 1" -b "Commit body first" --add=firstfile
|
hacktree commit $ht_repo -s "Test Commit 1" -b "Commit body first" --add=firstfile
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
|
||||||
|
#
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# Author: Colin Walters <walters@verbum.org>
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
. libtest.sh
|
||||||
|
|
||||||
|
echo '1..4'
|
||||||
|
|
||||||
|
setup_test_repository2
|
||||||
|
hacktree checkout $ht_repo HEAD $test_tmpdir/checkout2-head
|
||||||
|
echo 'ok setup'
|
||||||
|
cd $test_tmpdir/checkout2-head
|
||||||
|
hacktree commit -s delete $ht_repo -r firstfile
|
||||||
|
echo 'ok rm firstfile'
|
||||||
|
assert_has_file firstfile # It should still exist in this checkout
|
||||||
|
cd $test_tmpdir
|
||||||
|
hacktree checkout $ht_repo HEAD $test_tmpdir/checkout3-head
|
||||||
|
echo 'ok checkout 3'
|
||||||
|
cd $test_tmpdir/checkout3-head
|
||||||
|
assert_not_has_file firstfile
|
||||||
|
assert_has_file baz/saucer
|
||||||
|
echo 'ok removal full'
|
||||||
Loading…
Reference in New Issue