projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Simplify building of programs
[git.git]
/
update-cache.c
diff --git
a/update-cache.c
b/update-cache.c
index
68d2f95
..
4353b80
100644
(file)
--- a/
update-cache.c
+++ b/
update-cache.c
@@
-21,6
+21,7
@@
static int index_fd(unsigned char *sha1, int fd, struct stat *st)
int max_out_bytes = size + 200;
void *out = malloc(max_out_bytes);
void *metadata = malloc(200);
int max_out_bytes = size + 200;
void *out = malloc(max_out_bytes);
void *metadata = malloc(200);
+ int metadata_size;
void *in;
SHA_CTX c;
void *in;
SHA_CTX c;
@@
-31,6
+32,13
@@
static int index_fd(unsigned char *sha1, int fd, struct stat *st)
if (!out || (int)(long)in == -1)
return -1;
if (!out || (int)(long)in == -1)
return -1;
+ metadata_size = 1+sprintf(metadata, "blob %lu", size);
+
+ SHA1_Init(&c);
+ SHA1_Update(&c, metadata, metadata_size);
+ SHA1_Update(&c, in, size);
+ SHA1_Final(sha1, &c);
+
memset(&stream, 0, sizeof(stream));
deflateInit(&stream, Z_BEST_COMPRESSION);
memset(&stream, 0, sizeof(stream));
deflateInit(&stream, Z_BEST_COMPRESSION);
@@
-38,7
+46,7
@@
static int index_fd(unsigned char *sha1, int fd, struct stat *st)
* ASCII size + nul byte
*/
stream.next_in = metadata;
* ASCII size + nul byte
*/
stream.next_in = metadata;
- stream.avail_in =
1+sprintf(metadata, "blob %lu", size)
;
+ stream.avail_in =
metadata_size
;
stream.next_out = out;
stream.avail_out = max_out_bytes;
while (deflate(&stream, 0) == Z_OK)
stream.next_out = out;
stream.avail_out = max_out_bytes;
while (deflate(&stream, 0) == Z_OK)
@@
-54,10
+62,6
@@
static int index_fd(unsigned char *sha1, int fd, struct stat *st)
deflateEnd(&stream);
deflateEnd(&stream);
- SHA1_Init(&c);
- SHA1_Update(&c, out, stream.total_out);
- SHA1_Final(sha1, &c);
-
return write_sha1_buffer(sha1, out, stream.total_out);
}
return write_sha1_buffer(sha1, out, stream.total_out);
}
@@
-270,25
+274,29
@@
static int add_cacheinfo(char *arg1, char *arg2, char *arg3)
return add_cache_entry(ce, allow_add);
}
return add_cache_entry(ce, allow_add);
}
-static
int remove_lock = 0
;
+static
const char *lockfile_name = NULL
;
static void remove_lock_file(void)
{
static void remove_lock_file(void)
{
- if (
remove_lock
)
- unlink(
".git/index.lock"
);
+ if (
lockfile_name
)
+ unlink(
lockfile_name
);
}
int main(int argc, char **argv)
{
int i, newfd, entries;
int allow_options = 1;
}
int main(int argc, char **argv)
{
int i, newfd, entries;
int allow_options = 1;
+ static char lockfile[MAXPATHLEN+1];
+ const char *indexfile = get_index_file();
+
+ snprintf(lockfile, sizeof(lockfile), "%s.lock", indexfile);
- newfd = open(
".git/index.lock"
, O_RDWR | O_CREAT | O_EXCL, 0600);
+ newfd = open(
lockfile
, O_RDWR | O_CREAT | O_EXCL, 0600);
if (newfd < 0)
die("unable to create new cachefile");
atexit(remove_lock_file);
if (newfd < 0)
die("unable to create new cachefile");
atexit(remove_lock_file);
-
remove_lock = 1
;
+
lockfile_name = lockfile
;
entries = read_cache();
if (entries < 0)
entries = read_cache();
if (entries < 0)
@@
-329,10
+337,9
@@
int main(int argc, char **argv)
if (add_file_to_cache(path))
die("Unable to add %s to database", path);
}
if (add_file_to_cache(path))
die("Unable to add %s to database", path);
}
- if (write_cache(newfd, active_cache, active_nr) ||
- rename(".git/index.lock", ".git/index"))
+ if (write_cache(newfd, active_cache, active_nr) || rename(lockfile, indexfile))
die("Unable to write new cachefile");
die("Unable to write new cachefile");
-
remove_lock = 0
;
+
lockfile_name = NULL
;
return 0;
}
return 0;
}