view tests/test-init.out @ 5378:8a2915f57dfc

convert: add a mode where mercurial_sink skips empty revisions. The getchanges function of some converter_source classes can return some false positives. I.e. they sometimes claim that a file "foo" was changed in some revision, even though its contents are still the same. convert_svn is particularly bad, but I think this can also happen with convert_cvs and, at least in theory, with mercurial_source. For regular conversions this is not really a problem - as long as getfile returns the right contents, we'll get a converted revision with the right contents. But when we use --filemap, this could lead to superfluous revisions being converted. Instead of fixing every converter_source, I decided to change mercurial_sink to work around this problem. When --filemap is used, we're interested only in revisions that touch some specific files. If a revision doesn't change any of these files, then we're not interested in it (at least for revisions with a single parent; merges are special). For mercurial_sink, we abuse this property and rollback a commit if the manifest text hasn't changed. This avoids duplicating the logic from localrepo.filecommit to detect unchanged files.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Thu, 04 Oct 2007 23:21:37 -0300
parents 27590c19ad30
children
line wrap: on
line source

# creating 'local'
store created
00changelog.i created
revlogv1
store
adding foo
# creating repo with old format
revlogv1
#test failure
abort: repository local already exists!
# init+push to remote2
comparing with local
changeset:   0:c4e059d443be
tag:         tip
user:        test
date:        Mon Jan 12 13:46:40 1970 +0000
summary:     init

pushing to ssh://user@dummy/remote2
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
# clone to remote1
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
# init to existing repo
abort: repository remote1 already exists!
abort: could not create remote repo!
# clone to existing repo
abort: repository remote1 already exists!
abort: could not create remote repo!
# output of dummyssh
Got arguments 1:user@dummy 2:hg init remote2
Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:hg -R remote1 serve --stdio
Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:hg init remote1
# comparing repositories
0:c4e059d443be
0:c4e059d443be
0:c4e059d443be
# check names for repositories (clashes with URL schemes, special chars)
# hg init "bundle"
ok
# hg init "file"
ok
# hg init "hg"
ok
# hg init "http"
ok
# hg init "https"
ok
# hg init "old-http"
ok
# hg init "ssh"
ok
# hg init "static-http"
ok
# hg init " "
ok
# hg init "with space"
ok