<font size=2 face="sans-serif">Got it, thanks Daniel. Just in case we
get the cycles to work on a PR, could you point us to the file (or set
of files) in the </font><a href="https://github.com/apple/swift-package-manager"><font size=2 color=blue face="sans-serif">https://github.com/apple/swift-package-manager</font></a><font size=2 face="sans-serif">repo that we'd need to modify so that the swift-build-tool only looks at
the time/size metadata? I must admit I am not quite familiar yet with the
internals of SwiftPM.</font><br><br><font size=2 face="sans-serif">Regards,<br> &nbsp; Ricardo Olivieri<br> &nbsp; Software Engineer<br> &nbsp; IBM Swift Engineering at IBM Cloud</font><br><br><br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Daniel Dunbar &lt;daniel@zuster.org&gt;</font><br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Ricardo N Olivieri/Austin/IBM@IBMUS</font><br><font size=1 color=#5f5f5f face="sans-serif">Cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">swift-build-dev@swift.org</font><br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">11/21/2016 04:41 PM</font><br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [swift-build-dev]
SwiftPM recompilation - Packages folder</font><br><font size=1 color=#5f5f5f face="sans-serif">Sent by: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">daniel.dunbar@gmail.com</font><br><hr noshade><br><br><br><font size=3>On Mon, Nov 21, 2016 at 2:37 PM, Ricardo N Olivieri &lt;</font><a href=mailto:ricardo.olivieri@us.ibm.com target=_blank><font size=3 color=blue><u>ricardo.olivieri@us.ibm.com</u></font></a><font size=3>&gt;
wrote:</font><br><font size=2 face="sans-serif">Thanks Daniel for the response. That's
probably the reason (i.e. metadata changes in the file inode) for the behavior
we are seeing in SwiftPM.<br><br>The use case for us is as follows: </font><font size=3><br></font><font size=2 face="sans-serif"><br>We'd like to improve even further the performance of the IBM Bluemix buildpack
for Swift and one way we could accomplish this is by not recompiling the
Packages folder as long as the content of that folder has not changed.
Without getting into too many details about cloud foundry buildpacks, for
the buildpack to reuse the contents of the Packages folder in future re-deployments
of the same application to the cloud, the buildpack has to copy the Packages
folder a different folder outside the repo's folder and then copy it back
again when the developer redeploys his/her application. This is when we
noticed that despite the contents of the Packages folder had not changed,
SwiftPM still recompiled all of the dependencies under the Packages folder.</font><br><br><font size=3>Makes sense, thanks!</font><br><font size=2 face="sans-serif"><br>Is there an ETA for using content-based signatures instead? </font><br><br><font size=3>No, unfortunately.</font><br><br><font size=3>If it is important for your use case, I'd be ok with accepting
a PR to change swift-build-tool to only look at the time/size information
to workaround this in the meantime.</font><br><br><font size=3>&nbsp;- Daniel</font><br><font size=3>&nbsp;</font><br><font size=3><br></font><font size=2 face="sans-serif"><br><br>Regards,<br>&nbsp; Ricardo Olivieri<br>&nbsp; Software Engineer<br>&nbsp; IBM Swift Engineering at IBM Cloud</font><font size=3><br><br></font><font size=1 color=#5f5f5f face="sans-serif"><br>From: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Daniel
Dunbar &lt;</font><a href=mailto:daniel@zuster.org target=_blank><font size=1 color=blue face="sans-serif"><u>daniel@zuster.org</u></font></a><font size=1 face="sans-serif">&gt;</font><font size=1 color=#5f5f5f face="sans-serif"><br>To: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Ricardo
N Olivieri/Austin/IBM@IBMUS</font><font size=1 color=#5f5f5f face="sans-serif"><br>Cc: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href="mailto:swift-build-dev@swift.org" target=_blank><font size=1 color=blue face="sans-serif"><u>swift-build-dev@swift.org</u></font></a><font size=1 color=#5f5f5f face="sans-serif"><br>Date: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">11/21/2016
03:58 PM</font><font size=1 color=#5f5f5f face="sans-serif"><br>Subject: &nbsp; &nbsp; &nbsp; &nbsp;</font><font size=1 face="sans-serif">Re:
[swift-build-dev] SwiftPM recompilation - Packages folder</font><font size=1 color=#5f5f5f face="sans-serif"><br>Sent by: &nbsp; &nbsp; &nbsp; &nbsp;</font><a href=mailto:daniel.dunbar@gmail.com target=_blank><font size=1 color=blue face="sans-serif"><u>daniel.dunbar@gmail.com</u></font></a><font size=3><br></font><hr noshade><br><font size=3><br><br><br>swift-build-tool will currently rebuild any file if it detects a change
to the file inode or device -- my guess is that is what you are seeing
here.<br><br>My intention is to eventually move to using content-based signatures to
determine the rebuild conditions (for tools where we know that is safe),
which would prevent the rebuild in this situation.<br><br>Is there a particularly reason it is important to you that this not rebuild?<br><br>&nbsp;- Daniel<br><br>On Mon, Nov 21, 2016 at 1:54 PM, Ricardo N Olivieri via swift-build-dev
&lt;</font><a href="mailto:swift-build-dev@swift.org" target=_blank><font size=3 color=blue><u>swift-build-dev@swift.org</u></font></a><font size=3>&gt;
wrote:<br>Hello all,&nbsp;<br><br><br>I was wondering if someone could&nbsp;shed some light on how SwiftPM determines
if it needs to compile&nbsp;again any of the source code under the Packages
folder. I had thought that the&nbsp;modified timestamp attribute&nbsp;of
any source code files under the Packages folder was the key for determining
if any of the Swift package dependencies should be recompiled. However,
it seems SwiftPM uses additional criteria to make this determination. Here’s
the test we&nbsp;executed: <br><br><br>1) At T0, we&nbsp;executed swift build. As expected all Swift package dependencies
were cloned and compiled along with the application’s code. <br><br><br><br>2) At T1, we&nbsp;executed swift build again and nothing was recompiled,
as expected since no code changes were made. <br><br><br>3) At T2, we&nbsp;made a copy of the Packages folder and place this copy
in a location outside the repo’s directory. We then&nbsp;deleted the Packages
folder from the repo’s directory, and, finally,&nbsp;we&nbsp;copied the
Packages folder back to its original location in the repo’s directory.
<br><br><br>4) At T3, we&nbsp;executed again swift build and noticed that&nbsp;SwiftPM
recompiled each one of the Swift package dependencies in the Packages folder,
even though no code changes were made. We also double checked that the&nbsp;modified
and creation timestamps for the Packages folder and folders and files&nbsp;in
it were not changed. After doing so, we concluded that though copying the
Packages folder back to the application’s repo did keep the original creation
and modified timestamp values of all files and folders, SwiftPM still recompiled
all of the dependencies in the Packages folder. <br><br><br>Does anyone know why we are seeing in SwiftPM the behavior described above?
</font><font size=2 face="sans-serif"><br><br><br>Regards,<br>&nbsp; Ricardo Olivieri</font><font size=3><br><br><br>_______________________________________________<br>swift-build-dev mailing list</font><font size=3 color=blue><u><br></u></font><a href="mailto:swift-build-dev@swift.org" target=_blank><font size=3 color=blue><u>swift-build-dev@swift.org</u></font></a><font size=3 color=blue><u><br></u></font><a href="https://lists.swift.org/mailman/listinfo/swift-build-dev" target=_blank><font size=3 color=blue><u>https://lists.swift.org/mailman/listinfo/swift-build-dev</u></font></a><font size=3><br><br><br><br></font><br><br><br><BR>