Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFE: implement fast mode for getting EVR #392

Closed
ignatenkobrain opened this issue Feb 10, 2018 · 5 comments
Closed

RFE: implement fast mode for getting EVR #392

ignatenkobrain opened this issue Feb 10, 2018 · 5 comments

Comments

@ignatenkobrain
Copy link
Contributor

rpmspec is quite slow because it needs to parse whole spec and so on. Would be nice if there would be some flag to turn off %include, parsing of all sections and just give me stupid EVR. It won't check spec for correctness and such, but it would be very fast.

Just to give some background, I'm writing tool which is generating RPM changelogs out of git history and rpmspec is slowest part in there.

@ignatenkobrain
Copy link
Contributor Author

@n3npq believe me, it is slowest part in my tool ;)

287.25user 152.95system 2:11.94elapsed 333%CPU (0avgtext+0avgdata 68724maxresident)k
13648inputs+0outputs (53major+30349595minor)pagefaults 0swaps
diff --git a/src/main.rs b/src/main.rs
index 4b0f2ff..9306517 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -79,6 +79,7 @@ fn run(opt: &Opt) -> Result<(), Error> {
             let atime = author.when();
             let datetime =
                 FixedOffset::east(atime.offset_minutes() * 3600 / 60).timestamp(atime.seconds(), 0);
+            /*
             let output = Command::new("rpmspec")
                 .args(&[
                     "--srpm",
@@ -92,6 +93,7 @@ fn run(opt: &Opt) -> Result<(), Error> {
                     workdir.join(&spec).to_str().unwrap(),
                 ])
                 .output()?;
+            */
 
             let mut chlog_header = format!(
                 "* {} {} <{}>",
@@ -99,11 +101,13 @@ fn run(opt: &Opt) -> Result<(), Error> {
                 author.name().unwrap_or("Nobody"),
                 author.email().unwrap_or("nobody@fedoraproject.org"),
             );
+            /*
             if output.status.success() {
                 chlog_header.push_str(&format!(" - {}", String::from_utf8_lossy(&output.stdout)));
             } else {
                 eprintln!("{}", String::from_utf8_lossy(&output.stderr));
             }
+            */
             let chlog_entry = format!("- {}", commit.summary().unwrap());
 
             Ok(Some(format!("{}\n{}", chlog_header, chlog_entry)))
13.41user 2.05system 0:03.20elapsed 482%CPU (0avgtext+0avgdata 66184maxresident)k
0inputs+0outputs (0major+495394minor)pagefaults 0swaps

@ignatenkobrain
Copy link
Contributor Author

@n3npq it's not single spec.. Its 4000+ different specs.

What I wrote there if you run rpmspec, then tool is taking 2 minutes to do the job. If you remove execution of rpmspec, then tool takes 3 seconds.

@ignatenkobrain
Copy link
Contributor Author

Since your program appears to be multithreaded, try splitting the 4000 specfile queries across 10-20 worker threads.

That's exactly what it does.

@ignatenkobrain
Copy link
Contributor Author

If I would be querying them sequentially, then it would take hour or so

@ffesti
Copy link
Contributor

ffesti commented Mar 12, 2018

yup, wontfix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants