Skip to content

Commit

Permalink
Merge pull request supercollider#4644 from supercollider/3.10
Browse files Browse the repository at this point in the history
3.10 -> develop
  • Loading branch information
nhthn authored Nov 19, 2019
2 parents 36cbdde + dd80d8d commit 6e409d3
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 90 deletions.
2 changes: 2 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ deploy:
artifact: art_folder
unzip: true
set_public: true
on:
appveyor_repo_name: supercollider/supercollider

# github releases - only tags
- provider: GitHub
Expand Down
24 changes: 23 additions & 1 deletion QtCollider/QcApplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ QcApplication::QcApplication(int& argc, char** argv): QApplication(argc, argv, Q
icon.addFile(":/icons/sc-cube-32");
icon.addFile(":/icons/sc-cube-16");
setWindowIcon(icon);
_mainMenu = QSharedPointer<QMenuBar>(new QMenuBar(0));
createMenu();
}

#ifdef Q_OS_MAC
Expand All @@ -104,6 +104,28 @@ QcApplication::~QcApplication() {
_mutex.unlock();
}

void QcApplication::createMenu() {
_mainMenu = QSharedPointer<QMenuBar>::create();

#ifdef Q_OS_MAC
// macOS registers cmd+q on menu bars by default. Here we register a handler for cmd+q that does nothing
// and we disable the Quit menu by default
auto* action = new QAction("");
action->setMenuRole(QAction::QuitRole);
action->setEnabled(false);
QObject::connect(action, SIGNAL(triggered()), this, SLOT(onQuit()));
auto* menu = new QMenu(tr("&File"));
menu->addAction(action);
_mainMenu->addMenu(menu);
#endif
}

void QcApplication::onQuit() {
qWarning("[QcApplication::onQuit] CMD+Q was caught by the interpreter. "
"This is weird, it should not happen. "
"Please file an issue at https://github.com/supercollider/supercollider/issues");
}

bool QcApplication::compareThread() { return gMainVMGlobals->canCallOS; }

void QcApplication::interpret(const QString& str, bool print) {
Expand Down
2 changes: 2 additions & 0 deletions QtCollider/QcApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,15 @@ class QcApplication : public QApplication {

public Q_SLOTS:
void interpret(const QString& code, bool printResult = true);
void onQuit();

protected:
virtual bool event(QEvent*);
virtual bool notify(QObject*, QEvent*);

private:
QSharedPointer<QMenuBar> _mainMenu;
void createMenu();

QtCollider::EventProcessor _eventProc;

Expand Down
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Please read our adopted [code of conduct](CODE_OF_CONDUCT.md), which applies to
[sc-users archives]: https://www.listarc.bham.ac.uk/lists/sc-users/
[sc-dev archives]: https://www.listarc.bham.ac.uk/lists/sc-dev/
[Discourse]: https://scsynth.org/
[Slack]: https://join.slack.com/t/scsynth/shared_invite/enQtMzk3OTY3MzE0MTAyLWY1ZGE1MTJjYmI5NTRkZjFmNjZmNmYxOWI0NDZkNjdkMzdkNjgxNTJhZGVlOTEwYjdjMDY5OWM0ZTA4NWFiOGY
[Slack]: https://join.slack.com/t/scsynth/shared_invite/enQtMzk3OTY3MzE0MTAyLTFmMTliMmU0NjIwYzgyZGY1MjgxNGI2MGUxMTNlMWVhZWQzZjFmOTJhNzg2NDdmNzZmM2JiYTkyMjRiNDBiOTk

Contribute
----------
Expand All @@ -67,11 +67,14 @@ Please read our adopted [code of conduct](CODE_OF_CONDUCT.md) before contributin

Read our [contributing guide](https://github.com/supercollider/supercollider/wiki) to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes.


### Good First Issues

To help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/supercollider/supercollider/labels/good%20first%20issue) that contain bugs which have a relatively limited scope. This is a great place to get started. You can also ask on our developer's mailing list, on [Slack][Slack], or on the [forum][Discourse].

### Requests for Comment

SuperCollider uses a Requests for Comment (RFC) system to propose, design, and discuss 'big' changes. Submitting a new RFC or discussing an existing one is a great way to get involved, especially if you are looking for a way to contribute that doesn't involve writing code or using a terminal. You can learn more at the [RFC repository](https://github.com/supercollider/rfcs).

License
-------

Expand Down
2 changes: 1 addition & 1 deletion external_libraries/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nova-simd/vec.hpp)
message(FATAL_ERROR "nova-simd submodule is missing: please run `git submodule init && git submodule update' from the toplevel of your git working tree")
message(FATAL_ERROR "It appears you haven't cloned this project's git submodules: please run `git submodule update --init --recursive` from the root level of the repository")
endif()

if(NOT SYSTEM_BOOST) # we compile boost ourselves
Expand Down
50 changes: 26 additions & 24 deletions testsuite/classlibrary/TestOSCBundle.sc
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@

TestOSCBundle : UnitTest {

test_prepare {
var sd, b,completed=false;

b = OSCBundle.new;

sd = Array.fill(100,{ |i|
var d;
d = SynthDef( "TestOSCBundle" ++ i,{
SinOsc.ar(400 + i,mul: 0.0001)
});

b.addPrepare( ["/d_recv", d.asBytes] )

});

this.bootServer;

b.doPrepare(Server.default,{ completed = true});

this.wait( {completed},"waiting for prepare to send all");


var server;

setUp {
server = Server(this.class.name);
server.bootSync;
}

}
tearDown {
server.quit;
server.remove;
}

test_doPrepare {
var synthDef, bundle;
var completed = false;

bundle = OSCBundle.new;
synthDef = Array.fill(100, { |i|
var def = SynthDef("TestOSCBundle" ++ i, { Silent.ar });
bundle.addPrepare(["/d_recv", def.asBytes])
});
bundle.doPrepare(server, { completed = true });
this.wait({ completed }, "% timed out waiting for bundle to be sent".format(thisMethod));

this.assertEquals(completed, true, "'doPrepare' sent the prepare bundle to the server");
}

}

147 changes: 90 additions & 57 deletions testsuite/classlibrary/server/TestMixedBundleTester.sc
Original file line number Diff line number Diff line change
@@ -1,103 +1,136 @@

TestMixedBundleTester : UnitTest {

var t;
var server, tester;

setUp {
t = MixedBundleTester.new;
server = Server(this.class.name);
server.bootSync;
tester = MixedBundleTester.new;
MixedBundleTester.reset;
}

tearDown {
server.quit;
server.remove;
}

test_findMessage {
t.add( [ "/n_free",1001]);
tester.add(["/n_free", 1001]);
tester.send(server);

t.send(Server.default);
Server.default.latency.wait;
server.latency.wait;
0.01.wait;
this.assert( MixedBundleTester.findMessage( [ "/n_free",1001]),
"should find the message in its sent messages");

this.assert( MixedBundleTester.findMessage( [ "/n_free"]),
"should match any /n_free message")
this.assert(MixedBundleTester.findMessage(["/n_free", 1001]), "should find the message in its sent messages");
this.assert(MixedBundleTester.findMessage(["/n_free"]), "should match any /n_free message");
}

test_findPreparationMessage {
var d;
var def;

this.bootServer;

d = SynthDef("TestOSCBundle", { arg freq = 440;
Out.ar(0, SinOsc.ar(freq, 0, 0.1));
def = SynthDef("TestOSCBundle", { |out = 0, freq = 440|
Out.ar(out, SinOsc.ar(freq));
});

// bad.
// this is really testng UnitTest setUp
// and is assuming the implementation of MixedBundle
//this.assert( t.messages.isNil,"bundle should have no messages to start with");
//this.assert( t.preparationMessages.isNil,"bundle should have no preparationMessages to start with");
// this.assert( t.messages.isNil,"bundle should have no messages to start with");
// this.assert( t.preparationMessages.isNil,"bundle should have no preparationMessages to start with");
// anyway, they passed

t.addPrepare( ["/d_recv", d.asBytes]);
this.assert( t.preparationMessages.size == 1,"bundle should have 1 preparationMessages");

t.send(Server.default);
tester.addPrepare(["/d_recv", def.asBytes]);
this.assertEquals(tester.preparationMessages.size, 1, "Bundle should have 1 preparationMessages");

(Server.default.latency * 2).wait;
tester.send(server);
(server.latency * 2).wait;

this.assert( MixedBundleTester.findPreparationMessage( ["/d_recv", d.asBytes] ),
"should find the synth def message in its preparation messages" );

this.assert( MixedBundleTester.findPreparationMessage( ["/d_recv"] ),
"should match any synth def /d_recv" );
this.assert(MixedBundleTester.findPreparationMessage(["/d_recv", def.asBytes]), "should find the synth def message in its preparation messages");
this.assert(MixedBundleTester.findPreparationMessage(["/d_recv"]), "should match any synth def /d_recv");
}

// test that after sending that the bundle gets put in bundlesSent
test_send { arg numDefs = 100;
var functionFired = false, sent;
test_send {
var sent;
var numDefs = 100;
var functionFired = false;

this.makeDefs(numDefs);
t.addFunction({ functionFired = true });

this.bootServer;
tester.addFunction({ functionFired = true });

t.send(Server.default);
this.wait( { functionFired }, "wait for functionFired to be set by bundle.doFunction");
tester.send(server);
this.wait({ functionFired }, "% timed out while waiting".format(thisMethod));

// should be 100 in preparationMessages
this.assert( MixedBundleTester.bundlesSent.size == 1, "should be 1 bundle sent");
this.assertEquals(MixedBundleTester.bundlesSent.size, 1, "should be 1 bundle sent");

sent = MixedBundleTester.bundlesSent.first;
this.assert( sent === t, "it should be our bundle");
this.assert( sent.preparationMessages.size == numDefs,"should be " + numDefs + " in preparationMessages");
this.assertEquals(sent, tester, "it should be our bundle");
this.assertEquals(sent.preparationMessages.size, numDefs, "should be 100 in preparationMessages");
}

// crashes the language
// test_largePrepare {
// this.test_prepare(1000)
// }
// crashes the language
// test_largePrepare {
// this.test_prepare(1000)
// }

makeDefs { |numDefs|
numDefs.do({ |i|
var d;
d = SynthDef( "TestOSCBundle" ++ i,{
SinOsc.ar([400,403] + i)
var def = SynthDef("TestOSCBundle" ++ i, {
Silent.ar
});

t.addPrepare( ["/d_recv", d.asBytes] )

tester.addPrepare(["/d_recv", def.asBytes] )
});
}

test_defNames {
var d,names;
d = [ "/d_recv", Int8Array[ 83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 7, 100, 105, 115, 107, 73, 110, 52, 0, 5, 0, 0, 0, 0, 63, -128, 0, 0, 64, 0, 0, 0, 64, 64, 0, 0, -62, -58, 0, 0, 0, 7, 0, 0, 0, 0, 63, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 35, -41, 10, 63, -128, 0, 0, 0, 7, 3, 111, 117, 116, 0, 0, 3, 97, 109, 112, 0, 1, 6, 98, 117, 102, 110, 117, 109, 0, 2, 7, 115, 117, 115, 116, 97, 105, 110, 0, 3, 2, 97, 114, 0, 4, 2, 100, 114, 0, 5, 4, 103, 97, 116, 101, 0, 6, 0, 20, 7, 67, 111, 110, 116, 114, 111, 108, 1, 0, 0, 0, 7, 0, 0, 1, 1, 1, 1, 1, 1, 1, 6, 68, 105, 115, 107, 73, 110, 2, 0, 2, 0, 4, 0, 0, 0, 0, 0, 2, -1, -1, 0, 0, 2, 2, 2, 2, 5, 76, 105, 110, 101, 110, 1, 0, 5, 0, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 4, -1, -1, 0, 1, 0, 0, 0, 5, -1, -1, 0, 2, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 0, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 1, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 3, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 1, 0, 2, 0, 1, 0, 1, 0, 0, 0, 3, 0, 0, 0, 4, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 1, 0, 2, 0, 1, 0, 1, 0, 7, 0, 0, 0, 0, 0, 5, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 1, 0, 2, 0, 1, 0, 13, 0, 8, 0, 0, -1, -1, 0, 0, 1, 6, 69, 110, 118, 71, 101, 110, 1, 0, 21, 0, 1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 1, -1, -1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 2, -1, -1, 0, 0, -1, -1, 0, 3, -1, -1, 0, 4, -1, -1, 0, 4, -1, -1, 0, 1, 0, 0, 0, 4, -1, -1, 0, 1, -1, -1, 0, 0, -1, -1, 0, 1, 0, 9, 0, 0, -1, -1, 0, 1, -1, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 5, -1, -1, 0, 1, -1, -1, 0, 0, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 3, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 11, 0, 0, 0, 0, 0, 1, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 4, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 13, 0, 0, 0, 0, 0, 1, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 5, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 15, 0, 0, 0, 0, 0, 1, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 6, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 17, 0, 0, 0, 0, 0, 1, 2, 3, 79, 117, 116, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 0, 0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0 ] ];

t.addPrepare(d);

names = t.defNames;

this.assertEquals( names[0],"diskIn4");

this.assert( t.includesDefName("diskIn4") );
var def, names;
def = [
"/d_recv",
Int8Array[83, 67, 103, 102, 0, 0, 0, 1, 0, 1, 7, 100, 105, 115, 107,
73, 110, 52, 0, 5, 0, 0, 0, 0, 63, -128, 0, 0, 64, 0, 0, 0, 64, 64, 0, 0, -62,
-58, 0, 0, 0, 7, 0, 0, 0, 0, 63, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60, 35, -41, 10, 63, -128, 0, 0, 0, 7, 3, 111, 117, 116, 0, 0, 3, 97, 109, 112,
0, 1, 6, 98, 117, 102, 110, 117, 109, 0, 2, 7, 115, 117, 115, 116, 97, 105, 110,
0, 3, 2, 97, 114, 0, 4, 2, 100, 114, 0, 5, 4, 103, 97, 116, 101, 0, 6, 0, 20, 7,
67, 111, 110, 116, 114, 111, 108, 1, 0, 0, 0, 7, 0, 0, 1, 1, 1, 1, 1, 1, 1, 6,
68, 105, 115, 107, 73, 110, 2, 0, 2, 0, 4, 0, 0, 0, 0, 0, 2, -1, -1, 0, 0, 2, 2,
2, 2, 5, 76, 105, 110, 101, 110, 1, 0, 5, 0, 1, 0, 0, 0, 0, 0, 6, 0, 0, 0, 4,
-1, -1, 0, 1, 0, 0, 0, 5, -1, -1, 0, 2, 1, 12, 66, 105, 110, 97, 114, 121, 79,
112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 0, 0, 2, 0, 0, 2, 12, 66,
105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0,
1, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2,
0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0, 2, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79,
112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 1, 0, 3, 0, 2, 0, 0, 2, 12, 66,
105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 1, 0, 2, 0, 1, 0, 1, 0, 0, 0,
3, 0, 0, 0, 4, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 1,
0, 2, 0, 1, 0, 1, 0, 7, 0, 0, 0, 0, 0, 5, 1, 12, 66, 105, 110, 97, 114, 121, 79,
112, 85, 71, 101, 110, 1, 0, 2, 0, 1, 0, 13, 0, 8, 0, 0, -1, -1, 0, 0, 1, 6, 69,
110, 118, 71, 101, 110, 1, 0, 21, 0, 1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 1, -1,
-1, 0, 0, -1, -1, 0, 1, -1, -1, 0, 2, -1, -1, 0, 0, -1, -1, 0, 3, -1, -1, 0, 4,
-1, -1, 0, 4, -1, -1, 0, 1, 0, 0, 0, 4, -1, -1, 0, 1, -1, -1, 0, 0, -1, -1, 0,
1, 0, 9, 0, 0, -1, -1, 0, 1, -1, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 5, -1, -1, 0,
1, -1, -1, 0, 0, 1, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110,
2, 0, 2, 0, 1, 0, 2, 0, 3, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121,
79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 11, 0, 0, 0, 0, 0, 1, 2, 12,
66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0,
4, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101,
110, 2, 0, 2, 0, 1, 0, 2, 0, 13, 0, 0, 0, 0, 0, 1, 2, 12, 66, 105, 110, 97, 114,
121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 5, 0, 0, 0, 10, 0, 0, 2,
12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2,
0, 15, 0, 0, 0, 0, 0, 1, 2, 12, 66, 105, 110, 97, 114, 121, 79, 112, 85, 71,
101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 6, 0, 0, 0, 10, 0, 0, 2, 12, 66, 105, 110, 97,
114, 121, 79, 112, 85, 71, 101, 110, 2, 0, 2, 0, 1, 0, 2, 0, 17, 0, 0, 0, 0, 0,
1, 2, 3, 79, 117, 116, 2, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 14, 0,
0, 0, 16, 0, 0, 0, 18, 0, 0, 0, 0]
];

tester.addPrepare(def);

names = tester.defNames;

this.assertEquals(names[0], "diskIn4");
this.assert(tester.includesDefName("diskIn4"));
}

}
Expand Down
11 changes: 6 additions & 5 deletions tools/clang-format.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ def _access_check(fn, mode):
# Constants
#

CLANG_FORMAT_ACCEPTED_VERSION = "8.0.0"
CLANG_FORMAT_ACCEPTED_VERSION_REGEX = re.compile("8\\.\\d+\\.\\d+")
CLANG_FORMAT_ACCEPTED_VERSION_STRING = "8.y.z"

# all the extensions we format with clang-format in SC (no JS!)
CLANG_FORMAT_FILES_REGEX = re.compile('\\.(cpp|hpp|h|c|m|mm)$')
Expand Down Expand Up @@ -235,13 +236,13 @@ def __init__(self, cf_cmd):
def _validate_version(self):
cf_version = callo([self.cf_cmd, "--version"])

if CLANG_FORMAT_ACCEPTED_VERSION in cf_version:
if CLANG_FORMAT_ACCEPTED_VERSION_REGEX.search(cf_version):
return

# TODO add instructions to check docs when docs are written
raise ValueError("clang-format found, but incorrect version at " +
self.cf_cmd + " with version: " + cf_version + "\nAccepted version: " +
CLANG_FORMAT_ACCEPTED_VERSION)
self.cf_cmd + " with version: " + cf_version + "\nAccepted versions: " +
CLANG_FORMAT_ACCEPTED_VERSION_STRING)
sys.exit(5)

def lint(self, file_name, print_diff):
Expand Down Expand Up @@ -482,7 +483,7 @@ def do_lint(clang_format, clang_format_diff, commit):
diff_text = prepare_diff_for_lint_format(clang_format, commit)
lint_out = callo_with_input(['python', clang_format_diff, '-p1', '-binary', clang_format], diff_text)
print(lint_out, end='')
if lint_out != '\n':
if lint_out != '\n' and lint_out != '':
sys.exit(1)

def do_format(clang_format, clang_format_diff, commit):
Expand Down

0 comments on commit 6e409d3

Please sign in to comment.