push: support pushing HEAD to real branch name
[gitweb.git] / tree-walk.h
index ca0c29fb1ac7d6e5c0d364fd27845515de151469..903a7b0f483fec5cbb6c6b372ab49cc28b655e75 100644 (file)
@@ -1,25 +1,39 @@
 #ifndef TREE_WALK_H
 #define TREE_WALK_H
 
-struct tree_desc {
-       const void *buffer;
-       unsigned int size;
-};
-
 struct name_entry {
        const unsigned char *sha1;
        const char *path;
        unsigned int mode;
 };
 
+static inline enum object_type object_type(unsigned int mode)
+{
+       return S_ISDIR(mode) ? OBJ_TREE :
+               S_ISGITLINK(mode) ? OBJ_COMMIT :
+               OBJ_BLOB;
+}
+
+struct tree_desc {
+       const void *buffer;
+       struct name_entry entry;
+       unsigned int size;
+};
+
+static inline const unsigned char *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned int *modep)
+{
+       *pathp = desc->entry.path;
+       *modep = canon_mode(desc->entry.mode);
+       return desc->entry.sha1;
+}
+
 static inline int tree_entry_len(const char *name, const unsigned char *sha1)
 {
-       return (char *)sha1 - (char *)name - 1;
+       return (const char *)sha1 - name - 1;
 }
 
 void update_tree_entry(struct tree_desc *);
 void init_tree_desc(struct tree_desc *desc, const void *buf, unsigned long size);
-const unsigned char *tree_entry_extract(struct tree_desc *, const char **, unsigned int *);
 
 /* Helper function that does both of the above and returns true for success */
 int tree_entry(struct tree_desc *, struct name_entry *);