Skip to content

Commit 36b4c12

Browse files
authored
feat(bundler): added provides, conflicts and replaces for deb and rpm (#9331)
* feat(bundler): added provides, conflicts and replaces for deb and rpm packages * added change file * update .changes/deb-rpm-provides-conflicts-replaces.md according to review Co-authored-by: Amr Bashir <[email protected]> * inlined provides/conflicts/replaces(obsoletes) variables * fmt
1 parent 2f20fdf commit 36b4c12

File tree

8 files changed

+224
-0
lines changed

8 files changed

+224
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'tauri-bundler': 'minor:feat'
3+
'tauri-utils': 'minor:feat'
4+
---
5+
6+
Added support for `provides`, `conflicts` and `replaces` (`obsoletes` for RPM) options for `bundler > deb` and `bundler > rpm` configs.

core/tauri-config-schema/schema.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,36 @@
24222422
"type": "string"
24232423
}
24242424
},
2425+
"provides": {
2426+
"description": "The list of dependencies the package provides.",
2427+
"type": [
2428+
"array",
2429+
"null"
2430+
],
2431+
"items": {
2432+
"type": "string"
2433+
}
2434+
},
2435+
"conflicts": {
2436+
"description": "The list of package conflicts.",
2437+
"type": [
2438+
"array",
2439+
"null"
2440+
],
2441+
"items": {
2442+
"type": "string"
2443+
}
2444+
},
2445+
"replaces": {
2446+
"description": "The list of package replaces.",
2447+
"type": [
2448+
"array",
2449+
"null"
2450+
],
2451+
"items": {
2452+
"type": "string"
2453+
}
2454+
},
24252455
"files": {
24262456
"description": "The files to include on the package.",
24272457
"default": {},
@@ -2503,6 +2533,36 @@
25032533
"type": "string"
25042534
}
25052535
},
2536+
"provides": {
2537+
"description": "The list of RPM dependencies your application provides.",
2538+
"type": [
2539+
"array",
2540+
"null"
2541+
],
2542+
"items": {
2543+
"type": "string"
2544+
}
2545+
},
2546+
"conflicts": {
2547+
"description": "The list of RPM dependencies your application conflicts with. They must not be present in order for the package to be installed.",
2548+
"type": [
2549+
"array",
2550+
"null"
2551+
],
2552+
"items": {
2553+
"type": "string"
2554+
}
2555+
},
2556+
"obsoletes": {
2557+
"description": "The list of RPM dependencies your application supersedes - if this package is installed, packages listed as “obsoletes” will be automatically removed (if they are present).",
2558+
"type": [
2559+
"array",
2560+
"null"
2561+
],
2562+
"items": {
2563+
"type": "string"
2564+
}
2565+
},
25062566
"release": {
25072567
"description": "The RPM release tag.",
25082568
"default": "1",

core/tauri-utils/src/config.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,12 @@ pub struct AppImageConfig {
323323
pub struct DebConfig {
324324
/// The list of deb dependencies your application relies on.
325325
pub depends: Option<Vec<String>>,
326+
/// The list of dependencies the package provides.
327+
pub provides: Option<Vec<String>>,
328+
/// The list of package conflicts.
329+
pub conflicts: Option<Vec<String>>,
330+
/// The list of package replaces.
331+
pub replaces: Option<Vec<String>>,
326332
/// The files to include on the package.
327333
#[serde(default)]
328334
pub files: HashMap<PathBuf, PathBuf>,
@@ -384,6 +390,14 @@ pub struct LinuxConfig {
384390
pub struct RpmConfig {
385391
/// The list of RPM dependencies your application relies on.
386392
pub depends: Option<Vec<String>>,
393+
/// The list of RPM dependencies your application provides.
394+
pub provides: Option<Vec<String>>,
395+
/// The list of RPM dependencies your application conflicts with. They must not be present
396+
/// in order for the package to be installed.
397+
pub conflicts: Option<Vec<String>>,
398+
/// The list of RPM dependencies your application supersedes - if this package is installed,
399+
/// packages listed as “obsoletes” will be automatically removed (if they are present).
400+
pub obsoletes: Option<Vec<String>>,
387401
/// The RPM release tag.
388402
#[serde(default = "default_release")]
389403
pub release: String,
@@ -420,6 +434,9 @@ impl Default for RpmConfig {
420434
fn default() -> Self {
421435
Self {
422436
depends: None,
437+
provides: None,
438+
conflicts: None,
439+
obsoletes: None,
423440
release: default_release(),
424441
epoch: 0,
425442
files: Default::default(),

tooling/bundler/src/bundle/linux/debian.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,33 @@ fn generate_control_file(
182182
if !dependencies.is_empty() {
183183
writeln!(file, "Depends: {}", dependencies.join(", "))?;
184184
}
185+
let provides = settings
186+
.deb()
187+
.provides
188+
.as_ref()
189+
.cloned()
190+
.unwrap_or_default();
191+
if !provides.is_empty() {
192+
writeln!(file, "Provides: {}", provides.join(", "))?;
193+
}
194+
let conflicts = settings
195+
.deb()
196+
.conflicts
197+
.as_ref()
198+
.cloned()
199+
.unwrap_or_default();
200+
if !conflicts.is_empty() {
201+
writeln!(file, "Conflicts: {}", conflicts.join(", "))?;
202+
}
203+
let replaces = settings
204+
.deb()
205+
.replaces
206+
.as_ref()
207+
.cloned()
208+
.unwrap_or_default();
209+
if !replaces.is_empty() {
210+
writeln!(file, "Replaces: {}", replaces.join(", "))?;
211+
}
185212
let mut short_description = settings.short_description().trim();
186213
if short_description.is_empty() {
187214
short_description = "(none)";

tooling/bundler/src/bundle/linux/rpm.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,39 @@ pub fn bundle_project(settings: &Settings) -> crate::Result<Vec<PathBuf>> {
5858
builder = builder.requires(Dependency::any(dep));
5959
}
6060

61+
// Add provides
62+
for dep in settings
63+
.rpm()
64+
.provides
65+
.as_ref()
66+
.cloned()
67+
.unwrap_or_default()
68+
{
69+
builder = builder.provides(Dependency::any(dep));
70+
}
71+
72+
// Add conflicts
73+
for dep in settings
74+
.rpm()
75+
.conflicts
76+
.as_ref()
77+
.cloned()
78+
.unwrap_or_default()
79+
{
80+
builder = builder.conflicts(Dependency::any(dep));
81+
}
82+
83+
// Add obsoletes
84+
for dep in settings
85+
.rpm()
86+
.obsoletes
87+
.as_ref()
88+
.cloned()
89+
.unwrap_or_default()
90+
{
91+
builder = builder.obsoletes(Dependency::any(dep));
92+
}
93+
6194
// Add binaries
6295
for bin in settings.binaries() {
6396
let src = settings.binary_path(bin);

tooling/bundler/src/bundle/settings.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@ pub struct DebianSettings {
168168
// OS-specific settings:
169169
/// the list of debian dependencies.
170170
pub depends: Option<Vec<String>>,
171+
/// the list of dependencies the package provides.
172+
pub provides: Option<Vec<String>>,
173+
/// the list of package conflicts.
174+
pub conflicts: Option<Vec<String>>,
175+
/// the list of package replaces.
176+
pub replaces: Option<Vec<String>>,
171177
/// List of custom files to add to the deb package.
172178
/// Maps the path on the debian package to the path of the file to include (relative to the current working directory).
173179
pub files: HashMap<PathBuf, PathBuf>,
@@ -214,6 +220,14 @@ pub struct AppImageSettings {
214220
pub struct RpmSettings {
215221
/// The list of RPM dependencies your application relies on.
216222
pub depends: Option<Vec<String>>,
223+
/// The list of RPM dependencies your application provides.
224+
pub provides: Option<Vec<String>>,
225+
/// The list of RPM dependencies your application conflicts with. They must not be present
226+
/// in order for the package to be installed.
227+
pub conflicts: Option<Vec<String>>,
228+
/// The list of RPM dependencies your application supersedes - if this package is installed,
229+
/// packages listed as “obsoletes” will be automatically removed (if they are present).
230+
pub obsoletes: Option<Vec<String>>,
217231
/// The RPM release tag.
218232
pub release: String,
219233
/// The RPM epoch.

tooling/cli/schema.json

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,36 @@
24222422
"type": "string"
24232423
}
24242424
},
2425+
"provides": {
2426+
"description": "The list of dependencies the package provides.",
2427+
"type": [
2428+
"array",
2429+
"null"
2430+
],
2431+
"items": {
2432+
"type": "string"
2433+
}
2434+
},
2435+
"conflicts": {
2436+
"description": "The list of package conflicts.",
2437+
"type": [
2438+
"array",
2439+
"null"
2440+
],
2441+
"items": {
2442+
"type": "string"
2443+
}
2444+
},
2445+
"replaces": {
2446+
"description": "The list of package replaces.",
2447+
"type": [
2448+
"array",
2449+
"null"
2450+
],
2451+
"items": {
2452+
"type": "string"
2453+
}
2454+
},
24252455
"files": {
24262456
"description": "The files to include on the package.",
24272457
"default": {},
@@ -2503,6 +2533,36 @@
25032533
"type": "string"
25042534
}
25052535
},
2536+
"provides": {
2537+
"description": "The list of RPM dependencies your application provides.",
2538+
"type": [
2539+
"array",
2540+
"null"
2541+
],
2542+
"items": {
2543+
"type": "string"
2544+
}
2545+
},
2546+
"conflicts": {
2547+
"description": "The list of RPM dependencies your application conflicts with. They must not be present in order for the package to be installed.",
2548+
"type": [
2549+
"array",
2550+
"null"
2551+
],
2552+
"items": {
2553+
"type": "string"
2554+
}
2555+
},
2556+
"obsoletes": {
2557+
"description": "The list of RPM dependencies your application supersedes - if this package is installed, packages listed as “obsoletes” will be automatically removed (if they are present).",
2558+
"type": [
2559+
"array",
2560+
"null"
2561+
],
2562+
"items": {
2563+
"type": "string"
2564+
}
2565+
},
25062566
"release": {
25072567
"description": "The RPM release tag.",
25082568
"default": "1",

tooling/cli/src/interface/rust.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,7 @@ fn tauri_config_to_bundle_settings(
12081208
.unwrap_or(BundleResources::List(Vec::new()));
12091209
#[allow(unused_mut)]
12101210
let mut depends_deb = config.linux.deb.depends.unwrap_or_default();
1211+
12111212
#[allow(unused_mut)]
12121213
let mut depends_rpm = config.linux.rpm.depends.unwrap_or_default();
12131214

@@ -1330,6 +1331,9 @@ fn tauri_config_to_bundle_settings(
13301331
} else {
13311332
Some(depends_deb)
13321333
},
1334+
provides: config.linux.deb.provides,
1335+
conflicts: config.linux.deb.conflicts,
1336+
replaces: config.linux.deb.replaces,
13331337
files: config.linux.deb.files,
13341338
desktop_template: config.linux.deb.desktop_template,
13351339
section: config.linux.deb.section,
@@ -1349,6 +1353,9 @@ fn tauri_config_to_bundle_settings(
13491353
} else {
13501354
Some(depends_rpm)
13511355
},
1356+
provides: config.linux.rpm.provides,
1357+
conflicts: config.linux.rpm.conflicts,
1358+
obsoletes: config.linux.rpm.obsoletes,
13521359
release: config.linux.rpm.release,
13531360
epoch: config.linux.rpm.epoch,
13541361
files: config.linux.rpm.files,

0 commit comments

Comments
 (0)