Merge branch 'jc/diff-no-no-index'
[gitweb.git] / lockfile.c
index b0118d0592f691d6ae9f321c6303f93d43007f6f..cfc7335347c4875537d1c45c909921908f3d4f10 100644 (file)
@@ -160,6 +160,34 @@ int hold_lock_file_for_update(struct lock_file *lk, const char *path, int die_on
        return fd;
 }
 
+int hold_lock_file_for_append(struct lock_file *lk, const char *path, int die_on_error)
+{
+       int fd, orig_fd;
+
+       fd = lock_file(lk, path);
+       if (fd < 0) {
+               if (die_on_error)
+                       die("unable to create '%s.lock': %s", path, strerror(errno));
+               return fd;
+       }
+
+       orig_fd = open(path, O_RDONLY);
+       if (orig_fd < 0) {
+               if (errno != ENOENT) {
+                       if (die_on_error)
+                               die("cannot open '%s' for copying", path);
+                       close(fd);
+                       return error("cannot open '%s' for copying", path);
+               }
+       } else if (copy_fd(orig_fd, fd)) {
+               if (die_on_error)
+                       exit(128);
+               close(fd);
+               return -1;
+       }
+       return fd;
+}
+
 int close_lock_file(struct lock_file *lk)
 {
        int fd = lk->fd;