mirror of
https://github.com/frej/fast-export.git
synced 2026-02-27 14:50:42 +01:00
Run file_data_filter on deleted files
The `file_data_filter` method should be called when files are deleted. In this case the `data` and `file_ctx` keys map to None. This is so that a filter which modifies file names can apply the same name transformations before files are deleted.
This commit is contained in:
@@ -179,7 +179,7 @@ values in the dictionary after filters have been run are used to create the git
|
|||||||
commit.
|
commit.
|
||||||
|
|
||||||
```
|
```
|
||||||
file_data = {'filename':filename,'file_ctx':file_ctx,'d':d}
|
file_data = {'filename':filename,'file_ctx':file_ctx,'data':file_contents}
|
||||||
|
|
||||||
def file_data_filter(self,file_data):
|
def file_data_filter(self,file_data):
|
||||||
```
|
```
|
||||||
@@ -189,6 +189,11 @@ can be modified by any filter. `file_ctx` is the filecontext from the
|
|||||||
mercurial python library. After all filters have been run, the values
|
mercurial python library. After all filters have been run, the values
|
||||||
are used to add the file to the git commit.
|
are used to add the file to the git commit.
|
||||||
|
|
||||||
|
The `file_data_filter` method is also called when files are deleted,
|
||||||
|
but in this case the `data` and `file_ctx` keys map to None. This is
|
||||||
|
so that a filter which modifies file names can apply the same name
|
||||||
|
transformations when files are deleted.
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
See README-SUBMODULES.md for how to convert subrepositories into git
|
See README-SUBMODULES.md for how to convert subrepositories into git
|
||||||
|
|||||||
@@ -311,9 +311,18 @@ def export_commit(ui,repo,revision,old_marks,max,count,authors,
|
|||||||
% (branch, type.encode(), revision + 1, max, len(modified), len(removed))
|
% (branch, type.encode(), revision + 1, max, len(modified), len(removed))
|
||||||
)
|
)
|
||||||
|
|
||||||
for filename in removed:
|
for file in removed:
|
||||||
if fn_encoding:
|
if fn_encoding:
|
||||||
filename=filename.decode(fn_encoding).encode('utf8')
|
filename=file.decode(fn_encoding).encode('utf8')
|
||||||
|
else:
|
||||||
|
filename=file
|
||||||
|
|
||||||
|
if plugins and plugins['file_data_filters']:
|
||||||
|
file_data = {'filename':filename, 'file_ctx':None, 'data':None}
|
||||||
|
for filter in plugins['file_data_filters']:
|
||||||
|
filter(file_data)
|
||||||
|
filename=file_data['filename']
|
||||||
|
|
||||||
filename=strip_leading_slash(filename)
|
filename=strip_leading_slash(filename)
|
||||||
if filename==b'.hgsub':
|
if filename==b'.hgsub':
|
||||||
remove_gitmodules(ctx)
|
remove_gitmodules(ctx)
|
||||||
|
|||||||
27
t/file_data_filter.expected
Normal file
27
t/file_data_filter.expected
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
blob
|
||||||
|
mark :1
|
||||||
|
data 7
|
||||||
|
a_file
|
||||||
|
|
||||||
|
blob
|
||||||
|
mark :2
|
||||||
|
data 17
|
||||||
|
a_file_to_rename
|
||||||
|
|
||||||
|
reset refs/heads/master
|
||||||
|
commit refs/heads/master
|
||||||
|
mark :3
|
||||||
|
author Grevious Bodily Harmsworth <gbh@example.com> 1679014800 +0000
|
||||||
|
committer Grevious Bodily Harmsworth <gbh@example.com> 1679014800 +0000
|
||||||
|
data 2
|
||||||
|
r0M 100644 :1 a.txt
|
||||||
|
M 100644 :2 c.txt
|
||||||
|
|
||||||
|
commit refs/heads/master
|
||||||
|
mark :4
|
||||||
|
author Grevious Bodily Harmsworth <gbh@example.com> 1679018400 +0000
|
||||||
|
committer Grevious Bodily Harmsworth <gbh@example.com> 1679018400 +0000
|
||||||
|
data 2
|
||||||
|
r1from :3
|
||||||
|
D c.txt
|
||||||
|
|
||||||
81
t/file_data_filter.t
Executable file
81
t/file_data_filter.t
Executable file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 Felipe Contreras
|
||||||
|
# Copyright (c) 2023 Frej Drejhammar
|
||||||
|
#
|
||||||
|
# Check that the file_data_filter is called for removed files.
|
||||||
|
#
|
||||||
|
|
||||||
|
test_description='Smoke test'
|
||||||
|
|
||||||
|
. "${SHARNESS_TEST_SRCDIR-$(dirname "$0")/sharness}"/sharness.sh || exit 1
|
||||||
|
|
||||||
|
check() {
|
||||||
|
echo "$3" > expected &&
|
||||||
|
git -C "$1" show -q --format='%s' "$2" > actual &&
|
||||||
|
test_cmp expected actual
|
||||||
|
}
|
||||||
|
|
||||||
|
git_create() {
|
||||||
|
git init -q "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
git_convert() {
|
||||||
|
(
|
||||||
|
cd "$2" &&
|
||||||
|
hg-fast-export.sh --repo "../$1" \
|
||||||
|
-s --hgtags -n \
|
||||||
|
--plugin ../../plugins/rename_file_test_plugin
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
cat > "$HOME"/.hgrc <<-EOF
|
||||||
|
[ui]
|
||||||
|
username = Grevious Bodily Harmsworth <gbh@example.com>
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
commit0() {
|
||||||
|
(
|
||||||
|
cd hgrepo &&
|
||||||
|
echo "a_file" > a.txt &&
|
||||||
|
echo "a_file_to_rename" > b.txt &&
|
||||||
|
hg add a.txt b.txt &&
|
||||||
|
hg commit -d "2023-03-17 01:00Z" -m "r0"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
commit1() {
|
||||||
|
(
|
||||||
|
cd hgrepo &&
|
||||||
|
hg remove b.txt &&
|
||||||
|
hg commit -d "2023-03-17 02:00Z" -m "r1"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
make-branch() {
|
||||||
|
hg branch "$1"
|
||||||
|
FILE=$(echo "$1" | sha1sum | cut -d " " -f 1)
|
||||||
|
echo "$1" > $FILE
|
||||||
|
hg add $FILE
|
||||||
|
hg commit -d "2023-03-17 $2:00Z" -m "Added file in branch $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup
|
||||||
|
|
||||||
|
test_expect_success 'all in one' '
|
||||||
|
test_when_finished "rm -rf hgrepo gitrepo" &&
|
||||||
|
|
||||||
|
(
|
||||||
|
hg init hgrepo &&
|
||||||
|
commit0 &&
|
||||||
|
commit1
|
||||||
|
) &&
|
||||||
|
git_create gitrepo &&
|
||||||
|
git_convert hgrepo gitrepo &&
|
||||||
|
git -C gitrepo fast-export --all > actual &&
|
||||||
|
|
||||||
|
test_cmp "$SHARNESS_TEST_DIRECTORY"/file_data_filter.expected actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
||||||
15
t/plugins/rename_file_test_plugin/__init__.py
Normal file
15
t/plugins/rename_file_test_plugin/__init__.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import subprocess
|
||||||
|
import shlex
|
||||||
|
import sys
|
||||||
|
from mercurial import node
|
||||||
|
|
||||||
|
def build_filter(args):
|
||||||
|
return Filter(args)
|
||||||
|
|
||||||
|
class Filter:
|
||||||
|
def __init__(self, args):
|
||||||
|
self.filter_contents = shlex.split(args)
|
||||||
|
|
||||||
|
def file_data_filter(self,file_data):
|
||||||
|
if file_data['filename'] == b'b.txt':
|
||||||
|
file_data['filename'] = b'c.txt'
|
||||||
Reference in New Issue
Block a user