{"thread":{"id":"20551","subject":"[PATCH JGIT 2/5] FileMode: Store bit masks in int constants","startedAt":"2009-08-12T14:33:34Z","lastAt":"2009-08-12T15:22:52Z","messageCount":3,"participants":["Jonas Fonseca","Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"120408","messageId":"2c6b72b30908120733h4ecb3fccm3a1e80c111c1185c@mail.gmail.com","threadId":"20551","inReplyTo":null,"subject":"[PATCH JGIT 2/5] FileMode: Store bit masks in int constants","fromName":"Jonas Fonseca","fromEmail":"fonseca@diku.dk","sentAt":"2009-08-12T14:33:34Z","receivedAt":"2009-08-12T14:33:34Z","isPatch":true,"sender":{"key":"fonseca@diku.dk","avatar":"https://gravatar.com/avatar/f82f3ad698717c51873b020c750a92438c820a24056dc39fe4d07baa10a92264?d=mp&s=160"},"body":"Signed-off-by: Jonas Fonseca <fonseca@diku.dk>\n---\n .../src/org/spearce/jgit/lib/FileMode.java         |   38 ++++++++++++--------\n .../spearce/jgit/treewalk/WorkingTreeIterator.java |    8 ++--\n 2 files changed, 27 insertions(+), 19 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\nb/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\nindex cf42f37..a1f82f8 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\n@@ -50,21 +50,29 @@\n  * </p>\n  */\n public abstract class FileMode {\n+\n+\tpublic static final int TYPE_MASK = 0170000;\n+\tpublic static final int TREE_MASK = 0040000;\n+\tpublic static final int SYMLINK_MASK = 0120000;\n+\tpublic static final int FILE_MASK = 0100000;\n+\tpublic static final int GITLINK_MASK = 0160000;\n+\tpublic static final int MISSING_MASK = 0000000;\n+\n \t/** Mode indicating an entry is a {@link Tree}. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode TREE = new FileMode(0040000,\n+\tpublic static final FileMode TREE = new FileMode(TREE_MASK,\n \t\t\tConstants.OBJ_TREE) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0040000;\n+\t\t\treturn (modeBits & TYPE_MASK) == TREE_MASK;\n \t\t}\n \t};\n\n \t/** Mode indicating an entry is a {@link SymlinkTreeEntry}. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode SYMLINK = new FileMode(0120000,\n+\tpublic static final FileMode SYMLINK = new FileMode(SYMLINK_MASK,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0120000;\n+\t\t\treturn (modeBits & TYPE_MASK) == SYMLINK_MASK;\n \t\t}\n \t};\n\n@@ -73,7 +81,7 @@ public boolean equals(final int modeBits) {\n \tpublic static final FileMode REGULAR_FILE = new FileMode(0100644,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0100000 && (modeBits & 0111) == 0;\n+\t\t\treturn (modeBits & TYPE_MASK) == FILE_MASK && (modeBits & 0111) == 0;\n \t\t}\n \t};\n\n@@ -82,22 +90,22 @@ public boolean equals(final int modeBits) {\n \tpublic static final FileMode EXECUTABLE_FILE = new FileMode(0100755,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0100000 && (modeBits & 0111) != 0;\n+\t\t\treturn (modeBits & TYPE_MASK) == FILE_MASK && (modeBits & 0111) != 0;\n \t\t}\n \t};\n\n \t/** Mode indicating an entry is a submodule commit in another repository. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode GITLINK = new FileMode(0160000,\n+\tpublic static final FileMode GITLINK = new FileMode(GITLINK_MASK,\n \t\t\tConstants.OBJ_COMMIT) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0160000;\n+\t\t\treturn (modeBits & TYPE_MASK) == GITLINK_MASK;\n \t\t}\n \t};\n\n \t/** Mode indicating an entry is missing during parallel walks. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode MISSING = new FileMode(0000000,\n+\tpublic static final FileMode MISSING = new FileMode(MISSING_MASK,\n \t\t\tConstants.OBJ_BAD) {\n \t\tpublic boolean equals(final int modeBits) {\n \t\t\treturn modeBits == 0;\n@@ -112,20 +120,20 @@ public boolean equals(final int modeBits) {\n \t * @return the FileMode instance that represents the given bits.\n \t */\n \tpublic static final FileMode fromBits(final int bits) {\n-\t\tswitch (bits & 0170000) {\n-\t\tcase 0000000:\n+\t\tswitch (bits & TYPE_MASK) {\n+\t\tcase MISSING_MASK:\n \t\t\tif (bits == 0)\n \t\t\t\treturn MISSING;\n \t\t\tbreak;\n-\t\tcase 0040000:\n+\t\tcase TREE_MASK:\n \t\t\treturn TREE;\n-\t\tcase 0100000:\n+\t\tcase FILE_MASK:\n \t\t\tif ((bits & 0111) != 0)\n \t\t\t\treturn EXECUTABLE_FILE;\n \t\t\treturn REGULAR_FILE;\n-\t\tcase 0120000:\n+\t\tcase SYMLINK_MASK:\n \t\t\treturn SYMLINK;\n-\t\tcase 0160000:\n+\t\tcase GITLINK_MASK:\n \t\t\treturn GITLINK;\n \t\t}\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\nb/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\nindex d4291ea..6003736 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\n@@ -134,16 +134,16 @@ protected WorkingTreeIterator(final\nWorkingTreeIterator p) {\n \tpublic byte[] idBuffer() {\n \t\tif (contentIdFromPtr == ptr)\n \t\t\treturn contentId;\n-\t\tswitch (mode & 0170000) {\n-\t\tcase 0100000: /* normal files */\n+\t\tswitch (mode & FileMode.TYPE_MASK) {\n+\t\tcase FileMode.FILE_MASK:\n \t\t\tcontentIdFromPtr = ptr;\n \t\t\treturn contentId = idBufferBlob(entries[ptr]);\n-\t\tcase 0120000: /* symbolic links */\n+\t\tcase FileMode.SYMLINK_MASK:\n \t\t\t// Java does not support symbolic links, so we should not\n \t\t\t// have reached this particular part of the walk code.\n \t\t\t//\n \t\t\treturn zeroid;\n-\t\tcase 0160000: /* gitlink */\n+\t\tcase FileMode.GITLINK_MASK:\n \t\t\t// TODO: Support obtaining current HEAD SHA-1 from nested repository\n \t\t\t//\n \t\t\treturn zeroid;\n-- \n1.6.4.rc3.195.g2b05f\n"},{"id":"120415","messageId":"1250089776-22895-1-git-send-email-fonseca@diku.dk","threadId":"20551","inReplyTo":"2c6b72b30908120733h4ecb3fccm3a1e80c111c1185c@mail.gmail.com","subject":"[PATCH JGIT 2/5] FileMode: Store bit masks in int constants","fromName":"Jonas Fonseca","fromEmail":"fonseca@diku.dk","sentAt":"2009-08-12T15:09:36Z","receivedAt":"2009-08-12T15:09:36Z","isPatch":true,"sender":{"key":"fonseca@diku.dk","avatar":"https://gravatar.com/avatar/f82f3ad698717c51873b020c750a92438c820a24056dc39fe4d07baa10a92264?d=mp&s=160"},"body":"\nSigned-off-by: Jonas Fonseca <fonseca@diku.dk>\n---\n .../src/org/spearce/jgit/lib/FileMode.java         |   38 ++++++++++++--------\n .../spearce/jgit/treewalk/WorkingTreeIterator.java |    8 ++--\n 2 files changed, 27 insertions(+), 19 deletions(-)\n\n Resend without mailer errors ...\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java b/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\nindex cf42f37..a1f82f8 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/FileMode.java\n@@ -50,21 +50,29 @@\n  * </p>\n  */\n public abstract class FileMode {\n+\n+\tpublic static final int TYPE_MASK = 0170000;\n+\tpublic static final int TREE_MASK = 0040000;\n+\tpublic static final int SYMLINK_MASK = 0120000;\n+\tpublic static final int FILE_MASK = 0100000;\n+\tpublic static final int GITLINK_MASK = 0160000;\n+\tpublic static final int MISSING_MASK = 0000000;\n+\n \t/** Mode indicating an entry is a {@link Tree}. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode TREE = new FileMode(0040000,\n+\tpublic static final FileMode TREE = new FileMode(TREE_MASK,\n \t\t\tConstants.OBJ_TREE) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0040000;\n+\t\t\treturn (modeBits & TYPE_MASK) == TREE_MASK;\n \t\t}\n \t};\n \n \t/** Mode indicating an entry is a {@link SymlinkTreeEntry}. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode SYMLINK = new FileMode(0120000,\n+\tpublic static final FileMode SYMLINK = new FileMode(SYMLINK_MASK,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0120000;\n+\t\t\treturn (modeBits & TYPE_MASK) == SYMLINK_MASK;\n \t\t}\n \t};\n \n@@ -73,7 +81,7 @@ public boolean equals(final int modeBits) {\n \tpublic static final FileMode REGULAR_FILE = new FileMode(0100644,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0100000 && (modeBits & 0111) == 0;\n+\t\t\treturn (modeBits & TYPE_MASK) == FILE_MASK && (modeBits & 0111) == 0;\n \t\t}\n \t};\n \n@@ -82,22 +90,22 @@ public boolean equals(final int modeBits) {\n \tpublic static final FileMode EXECUTABLE_FILE = new FileMode(0100755,\n \t\t\tConstants.OBJ_BLOB) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0100000 && (modeBits & 0111) != 0;\n+\t\t\treturn (modeBits & TYPE_MASK) == FILE_MASK && (modeBits & 0111) != 0;\n \t\t}\n \t};\n \n \t/** Mode indicating an entry is a submodule commit in another repository. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode GITLINK = new FileMode(0160000,\n+\tpublic static final FileMode GITLINK = new FileMode(GITLINK_MASK,\n \t\t\tConstants.OBJ_COMMIT) {\n \t\tpublic boolean equals(final int modeBits) {\n-\t\t\treturn (modeBits & 0170000) == 0160000;\n+\t\t\treturn (modeBits & TYPE_MASK) == GITLINK_MASK;\n \t\t}\n \t};\n \n \t/** Mode indicating an entry is missing during parallel walks. */\n \t@SuppressWarnings(\"synthetic-access\")\n-\tpublic static final FileMode MISSING = new FileMode(0000000,\n+\tpublic static final FileMode MISSING = new FileMode(MISSING_MASK,\n \t\t\tConstants.OBJ_BAD) {\n \t\tpublic boolean equals(final int modeBits) {\n \t\t\treturn modeBits == 0;\n@@ -112,20 +120,20 @@ public boolean equals(final int modeBits) {\n \t * @return the FileMode instance that represents the given bits.\n \t */\n \tpublic static final FileMode fromBits(final int bits) {\n-\t\tswitch (bits & 0170000) {\n-\t\tcase 0000000:\n+\t\tswitch (bits & TYPE_MASK) {\n+\t\tcase MISSING_MASK:\n \t\t\tif (bits == 0)\n \t\t\t\treturn MISSING;\n \t\t\tbreak;\n-\t\tcase 0040000:\n+\t\tcase TREE_MASK:\n \t\t\treturn TREE;\n-\t\tcase 0100000:\n+\t\tcase FILE_MASK:\n \t\t\tif ((bits & 0111) != 0)\n \t\t\t\treturn EXECUTABLE_FILE;\n \t\t\treturn REGULAR_FILE;\n-\t\tcase 0120000:\n+\t\tcase SYMLINK_MASK:\n \t\t\treturn SYMLINK;\n-\t\tcase 0160000:\n+\t\tcase GITLINK_MASK:\n \t\t\treturn GITLINK;\n \t\t}\n \ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\nindex d4291ea..6003736 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/WorkingTreeIterator.java\n@@ -134,16 +134,16 @@ protected WorkingTreeIterator(final WorkingTreeIterator p) {\n \tpublic byte[] idBuffer() {\n \t\tif (contentIdFromPtr == ptr)\n \t\t\treturn contentId;\n-\t\tswitch (mode & 0170000) {\n-\t\tcase 0100000: /* normal files */\n+\t\tswitch (mode & FileMode.TYPE_MASK) {\n+\t\tcase FileMode.FILE_MASK:\n \t\t\tcontentIdFromPtr = ptr;\n \t\t\treturn contentId = idBufferBlob(entries[ptr]);\n-\t\tcase 0120000: /* symbolic links */\n+\t\tcase FileMode.SYMLINK_MASK:\n \t\t\t// Java does not support symbolic links, so we should not\n \t\t\t// have reached this particular part of the walk code.\n \t\t\t//\n \t\t\treturn zeroid;\n-\t\tcase 0160000: /* gitlink */\n+\t\tcase FileMode.GITLINK_MASK:\n \t\t\t// TODO: Support obtaining current HEAD SHA-1 from nested repository\n \t\t\t//\n \t\t\treturn zeroid;\n-- \n1.6.4.rc3.195.g2b05f\n"},{"id":"120416","messageId":"20090812152252.GE1033@spearce.org","threadId":"20551","inReplyTo":"1250089776-22895-1-git-send-email-fonseca@diku.dk","subject":"Re: [PATCH JGIT 2/5] FileMode: Store bit masks in int constants","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-08-12T15:22:52Z","receivedAt":"2009-08-12T15:22:52Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Jonas Fonseca <fonseca@diku.dk> wrote:\n> +\tpublic static final int TYPE_MASK = 0170000;\n> +\tpublic static final int TREE_MASK = 0040000;\n> +\tpublic static final int SYMLINK_MASK = 0120000;\n> +\tpublic static final int FILE_MASK = 0100000;\n> +\tpublic static final int GITLINK_MASK = 0160000;\n> +\tpublic static final int MISSING_MASK = 0000000;\n\nThese last 5 entries aren't masks, they are type codes.  I'd rather\nthey be called FOO_TYPE than FOO_MASK.  In particular what is really\ntroubling is MISSING_MASK, being all 0 it always destroys the input\nand then matches everything.  :-)\n\nI'm going to amend this name change in here, s/_MASK/_TYPE/ on the\nlast 5 fields.\n\n-- \nShawn.\n"}]}