From: Marc Strapetz <hidden> Date: 2016-06-15 22:47:46
I have noticed that jgit converts file paths to UTF-8 when querying the
repository. Especially,
org.eclipse.jgit.treewalk.filter.PathFilter#PathFilter performs this
conversion:
private PathFilter(final String s) {
pathStr = s;
pathRaw = Constants.encode(pathStr);
}
Because of this conversion, a TreeWalk fails to identify a file with
German umlauts. When using platform encoding to convert the file path to
bytes:
private PathFilter(final String s) {
pathStr = s;
pathRaw = s.getBytes();
}
the TreeWalk works as expected. Actually, the file path seems to be
stored with platform encoding in the repository.
Is this a bug or a misconfiguration of my repository? I'm using jgit
(commit e16af839e8a0cc01c52d3648d2d28e4cb915f80f) on Windows.
Thanks!
--
Best regards,
Marc Strapetz
=============
syntevo GmbH
http://www.syntevo.comhttp://blog.syntevo.com
From: Robin Rosenberg <hidden> Date: 2016-06-15 22:47:46
onsdag 25 november 2009 14:47:25 skrev Marc Strapetz:
I have noticed that jgit converts file paths to UTF-8 when querying the
repository. Especially,
org.eclipse.jgit.treewalk.filter.PathFilter#PathFilter performs this
conversion:
private PathFilter(final String s) {
pathStr = s;
pathRaw = Constants.encode(pathStr);
}
Because of this conversion, a TreeWalk fails to identify a file with
German umlauts. When using platform encoding to convert the file path to
bytes:
private PathFilter(final String s) {
pathStr = s;
pathRaw = s.getBytes();e pr
}
the TreeWalk works as expected. Actually, the file path seems to be
stored with platform encoding in the repository.
Is this a bug or a misconfiguration of my repository? I'm using jgit
(commit e16af839e8a0cc01c52d3648d2d28e4cb915f80f) on Windows.
A bug.
The problem here is that we need to allow multiple encodings since there
is no reliable encoding specified anywhere. The approach I advocate is
the one we use for handling encoding in general. I.e. if it looks like UTF-8,
treat it like that else fallback. This is expensive however and then we have
all the other issues with case insensitive name and the funny property that
unicode has when it allows characters to be encoding using multiple sequences
of code points as empoloyed by Apple.
-- robin
-- robin
From: Shawn O. Pearce <hidden> Date: 2016-06-15 22:47:46
Robin Rosenberg [off-list ref] wrote:
onsdag 25 november 2009 14:47:25 skrev Marc Strapetz:
quoted
I have noticed that jgit converts file paths to UTF-8 when querying the
repository.
...
quoted
Is this a bug or a misconfiguration of my repository? I'm using jgit
(commit e16af839e8a0cc01c52d3648d2d28e4cb915f80f) on Windows.
A bug.
The problem here is that we need to allow multiple encodings since there
is no reliable encoding specified anywhere.
This is a design fault of both Linux and git. git gets a byte
sequence from readdir and stores that as-is into the repository.
We have no way of knowing what that encoding is. So now everyone
touching a Git repository is screwed.
The approach I advocate is
the one we use for handling encoding in general. I.e. if it looks like UTF-8,
treat it like that else fallback. This is expensive however
We should try to work harder with the git-core folks to get character
set encoding for file names worked out. We might be able to use a
configuration setting in the repository to tell us what the proper
encoding should be, and if not set, assume UTF-8.
and then we have
all the other issues with case insensitive name and the funny property that
unicode has when it allows characters to be encoding using multiple sequences
of code points as empoloyed by Apple.
But as you said, this still doesn't make the Apple normal form
any easier. Though if we know we are on such a strange filesystem
we might be able to assume the paths in the repository are equally
damaged. Or not.
--
Shawn.
From: Thomas Singer <hidden> Date: 2016-06-15 22:47:46
But as you said, this still doesn't make the Apple normal form
any easier. Though if we know we are on such a strange filesystem
we might be able to assume the paths in the repository are equally
damaged. Or not.
Well, if the git-core folks could standardize on, e.g., composed UTF-8
(rather then just UTF-8), for storing file names in the repository, then
everything should be clear, isn't it?
--
Best regards,
Thomas Singer
=============
syntevo GmbH
http://www.syntevo.comhttp://blog.syntevo.com
Shawn O. Pearce wrote:
Robin Rosenberg [off-list ref] wrote:
quoted
onsdag 25 november 2009 14:47:25 skrev Marc Strapetz:
quoted
I have noticed that jgit converts file paths to UTF-8 when querying the
repository.
...
quoted
quoted
Is this a bug or a misconfiguration of my repository? I'm using jgit
(commit e16af839e8a0cc01c52d3648d2d28e4cb915f80f) on Windows.
A bug.
The problem here is that we need to allow multiple encodings since there
is no reliable encoding specified anywhere.
This is a design fault of both Linux and git. git gets a byte
sequence from readdir and stores that as-is into the repository.
We have no way of knowing what that encoding is. So now everyone
touching a Git repository is screwed.
quoted
The approach I advocate is
the one we use for handling encoding in general. I.e. if it looks like UTF-8,
treat it like that else fallback. This is expensive however
We should try to work harder with the git-core folks to get character
set encoding for file names worked out. We might be able to use a
configuration setting in the repository to tell us what the proper
encoding should be, and if not set, assume UTF-8.
quoted
and then we have
all the other issues with case insensitive name and the funny property that
unicode has when it allows characters to be encoding using multiple sequences
of code points as empoloyed by Apple.
But as you said, this still doesn't make the Apple normal form
any easier. Though if we know we are on such a strange filesystem
we might be able to assume the paths in the repository are equally
damaged. Or not.
From: Marc Strapetz <hidden> Date: 2016-06-15 22:47:46
We should try to work harder with the git-core folks to get character
set encoding for file names worked out. We might be able to use a
configuration setting in the repository to tell us what the proper
encoding should be, and if not set, assume UTF-8.
I agree that this should be the ultimate goal, though the default should
better be "system encoding" for compatibility with current git
repositories and instead have newer git versions always set encoding to
UTF-8. Thus, for our jgit clone I've introduced a system property to
configure Constants.PATH_ENCODING set to system encoding. It's used by
PathFilter and this resolves my original problem.
I have tried to switch more usages from Constants.CHARACTER_ENCODING to
Constants.PATH_ENCODING, but ended up in confusion due to my lack of
understanding: primarily because I couldn't tell anymore whether encoded
strings were file names or not. Does it make sense to explicitly
distinguish encoding usages in that way? We could try to contribute here
(and hopefully cause less review effort to jgit developers than the
changes itself are worth ;-)
--
Best regards,
Marc Strapetz
=============
syntevo GmbH
http://www.syntevo.comhttp://blog.syntevo.com
Shawn O. Pearce wrote:
Robin Rosenberg [off-list ref] wrote:
quoted
onsdag 25 november 2009 14:47:25 skrev Marc Strapetz:
quoted
I have noticed that jgit converts file paths to UTF-8 when querying the
repository.
...
quoted
quoted
Is this a bug or a misconfiguration of my repository? I'm using jgit
(commit e16af839e8a0cc01c52d3648d2d28e4cb915f80f) on Windows.
A bug.
The problem here is that we need to allow multiple encodings since there
is no reliable encoding specified anywhere.
This is a design fault of both Linux and git. git gets a byte
sequence from readdir and stores that as-is into the repository.
We have no way of knowing what that encoding is. So now everyone
touching a Git repository is screwed.
quoted
The approach I advocate is
the one we use for handling encoding in general. I.e. if it looks like UTF-8,
treat it like that else fallback. This is expensive however
We should try to work harder with the git-core folks to get character
set encoding for file names worked out. We might be able to use a
configuration setting in the repository to tell us what the proper
encoding should be, and if not set, assume UTF-8.
quoted
and then we have
all the other issues with case insensitive name and the funny property that
unicode has when it allows characters to be encoding using multiple sequences
of code points as empoloyed by Apple.
But as you said, this still doesn't make the Apple normal form
any easier. Though if we know we are on such a strange filesystem
we might be able to assume the paths in the repository are equally
damaged. Or not.
From: Johannes Schindelin <hidden> Date: 2016-06-15 22:47:46
Hi,
On Thu, 26 Nov 2009, Thomas Singer wrote:
[someone said, Thomas did not say who]
quoted
But as you said, this still doesn't make the Apple normal form any
easier. Though if we know we are on such a strange filesystem we
might be able to assume the paths in the repository are equally
damaged. Or not.
Well, if the git-core folks could standardize on, e.g., composed UTF-8
(rather then just UTF-8), for storing file names in the repository, then
everything should be clear, isn't it?
You mean we should do the same thing as Apple with HFS? Are you serious?
Ciao,
Dscho
From: Thomas Singer <hidden> Date: 2016-06-15 22:47:46
You mean we should do the same thing as Apple with HFS? Are you serious?
Yes, I'm serious. IMHO there should be a defined clear encoding used for
files names in the repository. Otherwise you don't know what you can expect
by reading it - it could mean anything. File names are in fact strings which
are based on characters. To convert characters to bytes (or visa versa) you
need to know the encoding.
--
Best regards,
Thomas Singer
=============
syntevo GmbH
http://www.syntevo.comhttp://blog.syntevo.com
Johannes Schindelin wrote:
Hi,
On Thu, 26 Nov 2009, Thomas Singer wrote:
quoted
[someone said, Thomas did not say who]
quoted
But as you said, this still doesn't make the Apple normal form any
easier. Though if we know we are on such a strange filesystem we
might be able to assume the paths in the repository are equally
damaged. Or not.
Well, if the git-core folks could standardize on, e.g., composed UTF-8
(rather then just UTF-8), for storing file names in the repository, then
everything should be clear, isn't it?
You mean we should do the same thing as Apple with HFS? Are you serious?
Ciao,
Dscho
From: Robin Rosenberg <hidden> Date: 2016-06-15 22:47:46
torsdag 26 november 2009 14:09:09 skrev Thomas Singer:
quoted
But as you said, this still doesn't make the Apple normal form
any easier. Though if we know we are on such a strange filesystem
we might be able to assume the paths in the repository are equally
damaged. Or not.
Well, if the git-core folks could standardize on, e.g., composed UTF-8
(rather then just UTF-8), for storing file names in the repository, then
everything should be clear, isn't it?
Hey, we're trying to enforce composed characters...
-- robin
From: Shawn O. Pearce <hidden> Date: 2016-06-15 22:47:46
Thomas Singer [off-list ref] wrote:
quoted
You mean we should do the same thing as Apple with HFS? Are you serious?
Yes, I'm serious. IMHO there should be a defined clear encoding used for
files names in the repository. Otherwise you don't know what you can expect
by reading it - it could mean anything. File names are in fact strings which
are based on characters. To convert characters to bytes (or visa versa) you
need to know the encoding.
That's likely not going to fly. HFS+ has changed their decomposition
rules at least once, which means the byte sequence for the same
character sequence would differ, and a tree or commit hash would
come out different depending upon which rules you were following.
See [1] for details on what HFS+ does.
Also, Linus has previously stated HFS+ chose the worst possible
way to encode the names. Getting Linus to admit he was wrong is
impossible, getting Linus to accept the HFS+ encoding rules as the
standard format used in a Git repository is not likely to happen.
Fortunately Linus carries a slightly smaller stick in Git than he
used to, but he is quite vocal and people tend to listen.
[1] http://developer.apple.com/mac/library/technotes/tn/tn1150.html#UnicodeSubtleties
--
Shawn.
From: Shawn O. Pearce <hidden> Date: 2016-06-15 22:47:46
Marc Strapetz [off-list ref] wrote:
quoted
We should try to work harder with the git-core folks to get character
set encoding for file names worked out. We might be able to use a
configuration setting in the repository to tell us what the proper
encoding should be, and if not set, assume UTF-8.
I agree that this should be the ultimate goal, though the default should
better be "system encoding" for compatibility with current git
repositories and instead have newer git versions always set encoding to
UTF-8. Thus, for our jgit clone I've introduced a system property to
configure Constants.PATH_ENCODING set to system encoding. It's used by
PathFilter and this resolves my original problem.
That's probably a good point, using the system encoding on a
repository may produce the file names in a more compatible way
with git-core. But we probably don't want the encoding to be a
single encoding constant in this JVM, we probably need to support
a per-repository configuration of the encoding for path names so
that we can eventually move to a non-platform specific encoding.
I have tried to switch more usages from Constants.CHARACTER_ENCODING to
Constants.PATH_ENCODING, but ended up in confusion due to my lack of
understanding: primarily because I couldn't tell anymore whether encoded
strings were file names or not.
Heh. Yea. There are a number of file name encoding sites. I think
everything in the treewalk package, as well as the GitIndex, Tree and
DirCache* classes. Also the Patch class and its FileHeader friend.
Does it make sense to explicitly
distinguish encoding usages in that way? We could try to contribute here
(and hopefully cause less review effort to jgit developers than the
changes itself are worth ;-)
Yes, it does. Because we eventually need to support encodings
other than the current UTF-8 we assume for file names, especially
if a repository is using the local filesystem encoding and that
isn't UTF-8.
--
Shawn.