Why is this symlink created when repository is initialized? - .net-core

I'm developing a tool that utilizes libgit2sharp. Currently using LINQPad 6 running on .net core 3.1 to develop this.
While I was testing, I noticed that an oddly named directory symlink (_git2_a09040 in this case) is created in the bare repository that I initialized. Last I remembered working with libgit2sharp, no such link is created.
It is pointing to a "testing" directory which doesn't exist and not typically a file that would expect to see in a git directory. Libgit2sharp just forwards the call to libgit2's git_repository_init_ext() function so I think this is coming from libgit2. Some old testing artifact that got into the build perhaps?
What is this symlink and why is it being added here?
It doesn't matter so much to me that this is created, I don't think it would negatively impact my project, just curious as to why.
Win10 Pro x64 1909
DotNet Core x64 3.1.100
LINQPad 6 x64 6.6.1 (beta)
LibGit2Sharp 0.26.2 (nuget)
LibGit2Sharp.NativeBinaries 2.0.306 (nuget dep)

When a Git repository is initialised, a check is performed to see if the filesystem on which the repostiory is created supports symlinks. This is done by creating a symlink and seeing if that works. If it does not work, core.symlinks is set to false.
When built for Windows, this check is only performed if core.symlinks is true which suggests you might have that setting enabled.
The function which tests for this does try to remove the symlink, but does not return an error in case that fails in order not to stop the repository creation from succeeding if this aspect of the check fails.

Related

What else does Qt5Network require when deployed?

I have successfully deployed my Qt application, with all the necessary dll files, and it works fine. However, as soon as I add something which uses Qt5Network, my program crashes with "The application was unable to start correctly (0xc000007b)".
I of course copied the Qt5Network.dll to my deployment dir, and I used a dependency walker, and found out that there was one new dependency compared to what I had before adding the "network" part: libgcc_s_seh-1.dll
I copied that as well, still the same error.
I learned that Qt Network requires OpenSSL, so I found libeay32 and ssleay32, and copied them to my deployment directory as well.
The error is the same. If I remove the requirement for Qt5Network, my program runs fine, and it uses many other modules, like Printsupport, Serialport, etc. without problem.
I tried it on Qt 5.9 and 5.15.
The official Qt binaries (Qt Network in your case) will try to load OpenSLL when first needed, at runtime, not when you first launch your application, see the SSL section here. And I believe that's the reason why dependency walker and windeployt were not able to identify OpenSSL as they can only identify load-time dependendencies.
It seems you were trying to bundle the OpenSSL binaries from an incompatible version. Starting with Qt 5.12.4 the supported OpenSSL version is 1.1.1, see for instance here. If you find the binaries from v1.1.1 and bundle those, your application should work.

Could I remove or move the folder NuGetFallbackFolder?

Could I remove the folder C:\Program Files\dotnet\sdk\NuGetFallbackFolder\ or move it to other folder? (better not in disk C)
If could remove, how to remove? delete the folder directly? any side effects or damages?
If could move, how to move? target folder like D:\NuGetFallbackFolder? How can I do it?
This folder contains a set of Nuget packages that the SDK expects to use. It's used as a nuget source whenever dotnet is trying to resolve nuget packages. Removing is generally similar to removing your nuget cache: .NET Core will simply not find the packages and download them into the (normal, non-NuGetFallbackFolder) local nuget cache.
Some distributions of .NET Core do not contain the NuGetFallbackFolder. The only consequence is that dotnet will download all those packages as soon as it needs them (possibly on the first SDK command).
If you move it around, .NET Core won't know about the new location and just treat it as if you had deleted the directory. On Linux, I would use a symlink to point from the old location to the new one. I don't know if Windows supports that.
after searching the internet and trying some in vain:
deleting the NuGetFallbackFolder in the corresponding .NET SDK and
repairing in Windows Uninstall Programm helps really
in my case it worked : the build process in solution got all new in

Should project.lock.json file be checked into source control? (ASP.NET Core 1.0)

Using ASP.NET Core 1.0, is it best practice to check in the project.lock.json file into source control?
Short answer: No, project.lock.file should not be checked into source control - you should configure the version control system to ignore it (i.e. add it to .gitignore if you're using git).
Long answer: The project.lock.json contains a snapshot of project's whole dependency tree - not just packages listed in "dependencies" sections, but also all resolved dependencies of those dependencies, and so on. But it is not like ruby's Gemfile.lock. Unlike Gemfile.lock, project.lock.json doesn't tell dotnet restore which exact versions of packages should be restored - it simply gets overwritten. As such, it should be treated like a cache file and never be checked into source control.
If you check it into version control, then most probably on other machine:
dotnet will think that all packages are restored, but in fact some packages might be missing and the build will fail, without hinting the developer to run dotnet restore
project.lock.json will be overwritten during dotnet restore and in most cases will be different than the version stored in source control. So it will be modified in almost every commit
project.lock.json will cause conflicts during merge
Actually you do want to commit your project.lock.json in git sometimes.
Checking your project json
For the exact reasons that, it shows you the dependencies you have used. Say:
Me as a developer works on an application, i hate every time updating packages so i add a package dependency to nuget package X = 1.*
I restore package i get version 1.2.4
The package maker just made a very stupid mistake, he broke something while just trying to make a fix and release 1.2.5
Person 2 checks out (or even worse release build kicks in).
Person 2 restores and gets version 1.2.5
Person 2 runs your application and find the application is broken.
Person 2 starts debugging and thinks there must be a bug in the software.
At this step 7 Person 2 could have seen in git that his lock file was changed and a newer version of a library has been downloaded, Which has not been tested by any of the other developers!
Downsides
Downsides of checking in this file is you might get allot of merge conflicts on continues updates of packages.
Alternative solution
Use only hard version dependencies (this is quite hard though for nuget). And only manually update to newer version once in a while.
Downsides
This doesn't work if you build a library for other people to use, since you pin them to a certain version of your dependencies.
Dependencies of dependencies still get resolved automatically so if you don't specify them yourself you can't guarantee there version on dotnet restore
Conclusion
If you want to avoid 'Works on my machine' quotes and the hell of constantly manually updating to newer version: Checking the project.lock.json.
And also build a CI/Release build check to test if this file wasn't changed compared to git, before you release (If your software is very critical)!
If this is not a problem and also automatically updating (to a potentially broken package) is not a big problem, you might not want to commit your project.lock.json.
No, it is just a lock file, really you should never check it in when a lock file exists (except if the program who locked it wants to check it into source control, in that case, exclude your lock file!).

Release Symfony2 project to the web

I have almost finished the development of a project developed with Symfony2, and wish to put the project online.
However, I suppose there are a lot of things that need to be done so that everything works ok. I suppose, the dev mode needs to be disabled etc....What needs to be done and how?
What are the most important things to do on a Symfony2 project that will be available to everyone on the web?
I suggest you to use Capifony for deployment. It does a lot of stuff out of the box and you can make it run any custom commands you need. See its documentation for details.
Regarding the dev mode, unless you've removed the IP checks from app_dev.php, you don't have to worry about deploying it. Of course, if you wish, you can tell Capifony to delete it on deployment.
The best way to handle deployment is to create "build" script, which will:
Remove all folders and files with tests from your bundles and vendors.
Remove app_dev.php file
Make sure that app/cache and app/logs are fully writable/readable.
Packs your project into archive (rpm f.e.)
Then, before deployment, you should create tag in your project - so it will mean, that certain version of your application is released (I recommend to follow this git branching model).
Create tag.
Run your build script
Upload archive to host
Unpack
Enjoy your project
Im currently researching the same thing.
The first thing you have to consider is "how professional" you want to deploy. There are a lot of tools you can use:
Continous Integration Server ( e.g. Hudson, Jenkins)
Build Tools (e.g. Phing, Capistrano --> Capifony, Shell scripts)
Versioning Tools (e.g. Git, SVN)
I think the simplest setup is using only a Build tool and i guess you are already using some kind of versioning.
Depending on which tool you use, the setup is different, but I think there are some things you should consider with your application (maybe not all are applicable to your application)
Creating a Tag in your Versioning
Copying the new Code in an folder on production
--> if you are in a new folder you dont need to clear the cache and logs, since these shouldnt be in your versioning the first time.
loading composer (if youre using it)
installing vendors
updating database schema
install assets from your bundles
move symlink from current version to the folder of the new site
These are the things I currently need for my application for production deployment, if you deploy to an test environment you should load fixtures and run your testscripts as well.
One other option that is very well described here is to deploy the Symfony2 application with Apache Ant. Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other.

Running Custom Deployer from Eclipse

I've gone through Jaime's deployer tutorial.
I've successfully created my deployer extension, which when integrating with SDL Tridion, the functionality works exactly as required.
But, what i can't get to work is the local debugging / running with the deployer inside eclipse (documented here)
The eclipse based deployer does run. If I drop my zip file into my test incoming folder the zip is picked up and processed. However, the customdeployer code I have written is never entered or executed.
I don't get any errors in the 'eclipse' deployer logs, but it always stops on the following line:
2012-04-13 20:24:51,642 DEBUG QueueLocationHandler - Removing exclusive lock on Deployment package: tcm:0-1026-66560 with type: CONTENT.
As we've three developers here also stuck on the same problem on all their machines I was wondering (hoping!) that this was a common problem and someone knew what we're doing wrong.
Thanks
Can you check which cd_deployer_conf.xml is it loaded by the Deployer? Just check the Deployer startup logs (in debug mode).
I suspect your Eclipse project at Debug/Run time doesn't load the the cd_*_config.xml files from the config folder in Eclipse. This will prevent your deployer module (which I supposed you configured in your cd_deployer_conf.xml) from being loaded and called.
What I normally do is to declare this config folder as an Eclipse Source Folder. Then at Debug/Run time, Eclipse will be included in the classpath automatically. This makes point #8 from http://www.sdltridionworld.com/articles/sdltridion2011/tutorials/Deployer_Extensions_With_Eclipse_3.aspx redundant.
I ran into exactly the same problem after following the same deployer extension tutorial.
I managed to solve it by changing the name of the package that my module was in to be com.tridion.deployer.extensions
Previously my module had been in a package I had named com.yourcompany.tridion.deployer.extensions and this appeared to have the affect of preventing the deployer from loading my extension module.
I had this issue, with a slight variation in that originally it worked, but then it stopped working.
Turns out the deployment package was somehow getting corrupted(locked?) in the process, as when i tried with a backup of the deployment package from the previous day it worked just fine.

Resources