hunk ./Debian/VersionPolicy.hs 64 -parseTag :: String -> DebianVersion -> (DebianVersion, Maybe VersionTag) -parseTag vendor version = - let (e, v, r) = evr version in - let (prefix, tag) = - case r of - Nothing -> (Nothing, Nothing) - Just s -> - case matchRegex re s of - Nothing -> (Just s, Nothing) - Just [prefix1, prefix2, buildNo, "", _, _, _, _] -> - (Just (prefix1 ++ prefix2), - Just (VersionTag { extraNumber = Nothing - , vendorTag = (vendor, read buildNo) - , releaseTag = Nothing })) - Just [prefix1, prefix2, buildNo, _, releaseName, _, _, releaseNo] -> - (Just (prefix1 ++ prefix2), - Just (VersionTag { extraNumber = Nothing - , vendorTag = (vendor, read buildNo) - , releaseTag = Just (releaseName, read releaseNo) })) - Just result -> error $ "Internal error: " ++ show result in - -- Try to parse the r5 from the end of the prefix. - let (prefix', tag') = - case (maybe Nothing (matchRegex extraRE) prefix, tag) of - (Just [prefix1, prefix2, digits], Just tag) -> - (Just (prefix1 ++ prefix2), Just (tag {extraNumber = Just (read digits)})) - _ -> (prefix, tag) in - (buildDebianVersion e v (if prefix' == Just "0" then Nothing else prefix'), tag') +parseTag :: [String] -> DebianVersion -> (DebianVersion, Maybe VersionTag) +parseTag vendors version = + fromMaybe (version, Nothing) . listToMaybe . filter (isJust . snd) . map (`tryTag` version) $ vendors hunk ./Debian/VersionPolicy.hs 68 - re = mkRegex (prefixRE ++ digitsRE ++ vendorRE ++ "(" ++ releaseRE ++ ")?$") - prefixRE = "^(.*[^0-9])?" - digitsRE = "([0-9]+)" - vendorRE = escapeForRegex vendor ++ "([0-9]+)" - releaseRE = "~(([^0-9]+)|(bpo[0-9]+\\+))([0-9]+)" - extraRE = mkRegex "^(.*)([0-9]+)r([0-9]+)" + tryTag vendor version = + let (e, v, r) = evr version in + let (prefix, tag) = + case r of + Nothing -> (Nothing, Nothing) + Just s -> + case matchRegex re s of + Nothing -> (Just s, Nothing) + Just [prefix1, prefix2, buildNo, "", _, _, _, _] -> + (Just (prefix1 ++ prefix2), + Just (VersionTag { extraNumber = Nothing + , vendorTag = (vendor, read buildNo) + , releaseTag = Nothing })) + Just [prefix1, prefix2, buildNo, _, releaseName, _, _, releaseNo] -> + (Just (prefix1 ++ prefix2), + Just (VersionTag { extraNumber = Nothing + , vendorTag = (vendor, read buildNo) + , releaseTag = Just (releaseName, read releaseNo) })) + Just result -> error $ "Internal error: " ++ show result in + -- Try to parse the r5 from the end of the prefix. + let (prefix', tag') = + case (maybe Nothing (matchRegex extraRE) prefix, tag) of + (Just [prefix1, prefix2, digits], Just tag) -> + (Just (prefix1 ++ prefix2), Just (tag {extraNumber = Just (read digits)})) + _ -> (prefix, tag) in + (buildDebianVersion e v (if prefix' == Just "0" then Nothing else prefix'), tag') + where + re = mkRegex (prefixRE ++ digitsRE ++ vendorRE ++ "(" ++ releaseRE ++ ")?$") + vendorRE = escapeForRegex vendor ++ "([0-9]+)" + prefixRE = "^(.*[^0-9])?" + digitsRE = "([0-9]+)" + releaseRE = "~(([^0-9]+)|(bpo[0-9]+\\+))([0-9]+)" + extraRE = mkRegex "^(.*)([0-9]+)r([0-9]+)" hunk ./Debian/VersionPolicy.hs 110 -getTag :: String -> DebianVersion -> Maybe VersionTag -getTag vendor version = snd (parseTag vendor version) +getTag :: [String] -> DebianVersion -> Maybe VersionTag +getTag vendors version = snd (parseTag vendors version) hunk ./Debian/VersionPolicy.hs 114 -dropTag :: String -> DebianVersion -> DebianVersion -dropTag vendor version = fst (parseTag vendor version) +dropTag :: [String] -> DebianVersion -> DebianVersion +dropTag vendors version = fst (parseTag vendors version) hunk ./Debian/VersionPolicy.hs 125 + -- ^ Other release names we manage that might appear in the repository. + -> [String] hunk ./Debian/VersionPolicy.hs 146 -{-setTag alias vendor release extra distVersion allVersions sourceVersion = +{-setTag alias vendor oldVendors release extra distVersion allVersions sourceVersion = hunk ./Debian/VersionPolicy.hs 148 -setTag alias vendor release extra distVersion allVersions sourceVersion = +setTag alias vendor oldVendors release extra distVersion allVersions sourceVersion = hunk ./Debian/VersionPolicy.hs 150 - case maybe Nothing (Just . parseTag vendor) distVersion of + case maybe Nothing (Just . parseTag (vendor : oldVendors)) distVersion of hunk ./Debian/VersionPolicy.hs 157 - EQ -> Right distTag in + -- Make sure we have the new vendor tag, not the one that + -- we just parsed. + EQ -> Right (maybe Nothing (Just . fixVendor vendor) distTag) in hunk ./Debian/VersionPolicy.hs 162 + fixVendor vendor tag = let (_, n) = vendorTag tag in tag {vendorTag = (vendor, n)} hunk ./Debian/VersionPolicy.hs 175 - let distTag' = fixReleaseName release (bumpTag distTag) in + let distTag' = fixReleaseName release (bumpTag (fixVendor vendor distTag)) in hunk ./Debian/VersionPolicy.hs 180 - (sourceUpstreamVersion, sourceTag) = parseTag vendor sourceVersion + (sourceUpstreamVersion, sourceTag) = parseTag (vendor : oldVendors) sourceVersion hunk ./Debian/VersionPolicy.hs 182 - allTags = catMaybes (map snd (filter (\ (v, _) -> v == sourceUpstreamVersion) (map (parseTag vendor) allVersions))) + allTags = catMaybes (map snd (filter (\ (v, _) -> v == sourceUpstreamVersion) (map (parseTag (vendor : oldVendors)) allVersions))) hunk ./debian-repo.cabal 2 -Version: 5.4 +Version: 5.5 hunk ./debian/changelog 1 +haskell-debian-repo (5.5) unstable; urgency=low + + * Modify the vendor tag parsing function to accept a list of possible + tags instead of a single one, in case we use more than one tag in the + repository. + + -- David Fox Mon, 27 Jul 2009 10:45:36 -0700 +