git-annex 10.20250605 → 10.20250630
raw patch · 8 files changed
+60/−16 lines, 8 files
Files
- Annex/Import.hs +24/−3
- Assistant/WebApp/Configurators/Edit.hs +3/−3
- Assistant/WebApp/routes +1/−1
- CHANGELOG +13/−0
- Database/Keys.hs +10/−2
- Utility/Tmp.hs +5/−3
- git-annex.cabal +1/−1
- templates/configurators/edit/nonannexremote.hamlet +3/−3
Annex/Import.hs view
@@ -1,6 +1,6 @@ {- git-annex import from remotes -- - Copyright 2019-2024 Joey Hess <id@joeyh.name>+ - Copyright 2019-2025 Joey Hess <id@joeyh.name> - - Licensed under the GNU AGPL version 3 or higher. -}@@ -64,6 +64,7 @@ import qualified Database.Export as Export import qualified Database.ContentIdentifier as CIDDb import qualified Logs.ContentIdentifier as CIDLog+import qualified Utility.OsString as OS import Backend.Utilities import Control.Concurrent.STM@@ -1048,6 +1049,10 @@ - write a git tree that contains that, git will complain and refuse to - check it out. -+ - Filters out any paths that contain an empty filename, because git cannot+ - represent an empty filename in a tree, but some special remotes do+ - support empty filenames.+ - - Filters out new things not matching the FileMatcher or that are - gitignored. However, files that are already in git get imported - regardless. (Similar to how git add behaves on gitignored files.)@@ -1094,19 +1099,35 @@ wanted dbhandle (loc, (_cid, sz)) | ingitdir = pure False+ | OS.null (fromImportLocation loc) = do+ warning $ UnquotedString "Cannot import a file with an empty filename"+ return False+ | isdirectory = do+ warning $ UnquotedString "Cannot import a file with a name that appears to be a directory: "+ <> QuotedPath (fromImportLocation loc)+ return False | otherwise = isknown <||> (matches <&&> notignored) where -- Checks, from least to most expensive. #ifdef mingw32_HOST_OS- ingitdir = ".git" `elem` Posix.splitDirectories (fromOsPath (fromImportLocation loc))+ ingitdir = ".git" `elem` Posix.splitDirectories loc' #else ingitdir = literalOsPath ".git" `elem` splitDirectories (fromImportLocation loc) #endif+#ifdef mingw32_HOST_OS+ isdirectory = Posix.dropFileName loc' == loc'+#else+ isdirectory = dropFileName (fromImportLocation loc) == fromImportLocation loc+#endif matches = matchesImportLocation matcher loc sz isknown = isKnownImportLocation dbhandle loc notignored = notIgnoredImportLocation importtreeconfig ci loc- ++#ifdef mingw32_HOST_OS+ loc' = fromOsPath (fromImportLocation loc)+#endif+ wantedunder dbhandle root (loc, v) = wanted dbhandle (importableContentsChunkFullLocation root loc, v)
Assistant/WebApp/Configurators/Edit.hs view
@@ -291,9 +291,9 @@ |] getRepoEncryption _ _ = return () -- local repo -getUpgradeRepositoryR :: RepoId -> Handler ()-getUpgradeRepositoryR (RepoUUID _) = redirect DashboardR-getUpgradeRepositoryR r = go =<< liftAnnex (repoIdRemote r)+getConvertRepositoryR :: RepoId -> Handler ()+getConvertRepositoryR (RepoUUID _) = redirect DashboardR+getConvertRepositoryR r = go =<< liftAnnex (repoIdRemote r) where go Nothing = redirect DashboardR go (Just rmt) = do
Assistant/WebApp/routes view
@@ -36,7 +36,7 @@ /config/repository/edit/new/cloud/#UUID EditNewCloudRepositoryR GET POST /config/repository/sync/disable/#RepoId DisableSyncR GET /config/repository/sync/enable/#RepoId EnableSyncR GET-/config/repository/upgrade/#RepoId UpgradeRepositoryR GET+/config/repository/convert/#RepoId ConvertRepositoryR GET /config/repository/add/drive AddDriveR GET POST /config/repository/add/drive/confirm/#RemovableDrive ConfirmAddDriveR GET
CHANGELOG view
@@ -1,3 +1,16 @@+git-annex (10.20250630) upstream; urgency=medium++ * Work around git 2.50 bug that caused it to crash when there is a merge+ conflict with an unlocked annexed file.+ * Skip and warn when a tree import includes empty filenames,+ which can happen with eg a S3 bucket.+ * Avoid a problem with temp file names ending in whitespace on+ filesystems like VFAT that don't support such filenames.+ * webapp: Rename "Upgrade Repository" to "Convert Repository"+ to avoid confusion with git-annex upgrade.++ -- Joey Hess <id@joeyh.name> Mon, 30 Jun 2025 10:05:18 -0400+ git-annex (10.20250605) upstream; urgency=medium * sync: Push the current branch first, rather than a synced branch,
Database/Keys.hs view
@@ -1,6 +1,6 @@ {- Sqlite database of information about Keys -- - Copyright 2015-2022 Joey Hess <id@joeyh.name>+ - Copyright 2015-2025 Joey Hess <id@joeyh.name> - - Licensed under the GNU AGPL version 3 or higher. -}@@ -260,7 +260,7 @@ - is an associated file. -} reconcileStaged :: Bool -> H.DbQueue -> Annex DbTablesChanged-reconcileStaged dbisnew qh = ifM isBareRepo+reconcileStaged dbisnew qh = ifM notneeded ( return mempty , do gitindex <- inRepo currentIndexFile@@ -334,6 +334,14 @@ -- index or on the tree that gets written from it. getindextree = inRepo $ \r -> writeTreeQuiet $ r { gitGlobalOpts = gitGlobalOpts r ++ bypassSmudgeConfig }+ + notneeded = isBareRepo+ -- Avoid doing anything when run by the + -- smudge clean filter. When that happens in a conflicted+ -- merge situation, running git write-tree+ -- here would cause git merge to fail with an internal+ -- error. This works around around that bug in git.+ <||> Annex.getState Annex.insmudgecleanfilter diff old new = -- Avoid running smudge clean filter, since we want the
Utility/Tmp.hs view
@@ -117,13 +117,15 @@ relatedTemplate' f | len > templateAddedLength = {- Some filesystems like FAT have issues with filenames- - ending in ".", so avoid truncating a filename to end- - that way. -}- B.dropWhileEnd (== dot) $+ - ending in ".", and others like VFAT don't allow a+ - filename to end with trailing whitespace, so avoid+ - truncating a filename to end that way. -}+ B.dropWhileEnd disallowed $ truncateFilePath (len - templateAddedLength) f | otherwise = f where len = B.length f+ disallowed c = c == dot || isSpace (chr (fromIntegral c)) dot = fromIntegral (ord '.') #else -- Avoids a test suite failure on windows, reason unknown, but
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 10.20250605+Version: 10.20250630 Cabal-Version: 1.12 License: AGPL-3 Maintainer: Joey Hess <id@joeyh.name>
templates/configurators/edit/nonannexremote.hamlet view
@@ -8,11 +8,11 @@ $if sshrepo <p> If this repository's ssh server has git-annex installed, you can #- upgrade this repository to a full git annex, which will store the+ convert this repository to a full git annex, which will store the contents of your files, not only their metadata. <p>- <a .btn .btn-default href="@{UpgradeRepositoryR r}">- Upgrade Repository+ <a .btn .btn-default href="@{ConvertRepositoryR r}">+ Convert Repository <h2> Repository information <p>