mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			v1.14.4
			...
			v1.15.0-de
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0fe32826ed | ||
| 
						 | 
					cf549500e0 | 
@@ -79,7 +79,7 @@ chmod 770 /etc/gitea
 | 
			
		||||
chmod 750 /etc/gitea
 | 
			
		||||
chmod 640 /etc/gitea/app.ini
 | 
			
		||||
```
 | 
			
		||||
If you don't want the web installer to be able to write the config file at all, it is also possible to make the config file read-only for the gitea user (owner/group `root:root`, mode `0660`), and set `INSTALL_LOCK = true`. In that case all database configuration details must be set beforehand in the config file, as well as the `SECRET_KEY` and `INTERNAL_TOKEN` values. See the [command line documentation]({{< relref "doc/usage/command-line.en-us.md" >}}) for information on using `gitea generate secret INTERNAL_TOKEN`.
 | 
			
		||||
If you don't want the web installer to be able to write the config file at all, it is also possible to make the config file read-only for the gitea user (owner/group `root:git`, mode `0640`), and set `INSTALL_LOCK = true`. In that case all database configuration details must be set beforehand in the config file, as well as the `SECRET_KEY` and `INTERNAL_TOKEN` values. See the [command line documentation]({{< relref "doc/usage/command-line.en-us.md" >}}) for information on using `gitea generate secret INTERNAL_TOKEN`.
 | 
			
		||||
 | 
			
		||||
### Configure Gitea's working directory
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			infos[i] = uploadInfo
 | 
			
		||||
 | 
			
		||||
		} else if objectHash, err = t.HashObject(file); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -133,7 +132,6 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
 | 
			
		||||
		// Add the object to the index
 | 
			
		||||
		if err := t.AddObjectToIndex("100644", objectHash, path.Join(opts.TreePath, uploadInfo.upload.Name)); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -170,28 +168,10 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
 | 
			
		||||
	// OK now we can insert the data into the store - there's no way to clean up the store
 | 
			
		||||
	// once it's in there, it's in there.
 | 
			
		||||
	contentStore := &lfs.ContentStore{ObjectStorage: storage.LFS}
 | 
			
		||||
	for _, uploadInfo := range infos {
 | 
			
		||||
		if uploadInfo.lfsMetaObject == nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		exist, err := contentStore.Exists(uploadInfo.lfsMetaObject)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
	for _, info := range infos {
 | 
			
		||||
		if err := uploadToLFSContentStore(info, contentStore); err != nil {
 | 
			
		||||
			return cleanUpAfterFailure(&infos, t, err)
 | 
			
		||||
		}
 | 
			
		||||
		if !exist {
 | 
			
		||||
			file, err := os.Open(uploadInfo.upload.LocalPath())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return cleanUpAfterFailure(&infos, t, err)
 | 
			
		||||
			}
 | 
			
		||||
			defer file.Close()
 | 
			
		||||
			// FIXME: Put regenerates the hash and copies the file over.
 | 
			
		||||
			// I guess this strictly ensures the soundness of the store but this is inefficient.
 | 
			
		||||
			if err := contentStore.Put(uploadInfo.lfsMetaObject, file); err != nil {
 | 
			
		||||
				// OK Now we need to cleanup
 | 
			
		||||
				// Can't clean up the store, once uploaded there they're there.
 | 
			
		||||
				return cleanUpAfterFailure(&infos, t, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Then push this tree to NewBranch
 | 
			
		||||
@@ -201,3 +181,29 @@ func UploadRepoFiles(repo *models.Repository, doer *models.User, opts *UploadRep
 | 
			
		||||
 | 
			
		||||
	return models.DeleteUploads(uploads...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func uploadToLFSContentStore(info uploadInfo, contentStore *lfs.ContentStore) error {
 | 
			
		||||
	if info.lfsMetaObject == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	exist, err := contentStore.Exists(info.lfsMetaObject)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if !exist {
 | 
			
		||||
		file, err := os.Open(info.upload.LocalPath())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		defer file.Close()
 | 
			
		||||
		// FIXME: Put regenerates the hash and copies the file over.
 | 
			
		||||
		// I guess this strictly ensures the soundness of the store but this is inefficient.
 | 
			
		||||
		if err := contentStore.Put(info.lfsMetaObject, file); err != nil {
 | 
			
		||||
			// OK Now we need to cleanup
 | 
			
		||||
			// Can't clean up the store, once uploaded there they're there.
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user