Uh oh!
There was an error while loading. Please reload this page.
http: revert deprecation of client property - #1852
Conversation
There was a problem hiding this comment.
Why don't we define client in this instead of IncomingMessage.prototype and issue the deprecation warning as it is in the old code?
There was a problem hiding this comment.
Oh, but then we will be creating many functions, whenever we create a new object. It might impact the performance. Not sure if it is okay.
There was a problem hiding this comment.
Wouldn't something like this work ?
// define it once somewherevarclientProperty={configurable: true,enumerable: true,get: util.deprecate(function(){returnthis._client;},'client is deprecated, use socket or connection instead'),set: util.deprecate(function(val){this._client=val;},'client is deprecated, use socket or connection instead')});// IncomingMessage constructorObject.defineProperty(this,'client',clientProperty)There was a problem hiding this comment.
Ya. That should work. Are you going to change it or wait for TSC guys?
Edit: I think you have an extra paren at the end.
There was a problem hiding this comment.
A quick question: why suggest using «socket or connection» instead of just one of those? «Use socket instead» would be more straightforward.
.connection is from the first version of the http module, .socket got there when the http module was replaced with the second version. Then .connection got back in for compatibility. Both of those go as far as node 0.1.90 (node 0.2.0).
There is no actual need for keeping both of them, except for backwards compatibility. If one of those would be deprecated in further versions, the current message would add more inconvenience to the migration process:
— «client is deprecated, use socket or connection instead»
— ok, connection
— «connection is deprecated, use socket instead»
— …
Why not choose one of them now and recommend it? socket is used internally atm.
I do not agitate for immediate .connection deprecation, I just wanted to say that altering the message a bit would make further deprecation of one of those in some later version (if that happens) more convenient. Also it would not raise an extra question «should I use socket or connection here instead of client?».
There was a problem hiding this comment.
I'd say that socket and connection are used far more than client, so I would hold off on making deprecation messages for them.
Regarding Object.defineProperty() in the constructor, did you try this change with the request module to make sure it is ok?
There was a problem hiding this comment.
@mscdex Would make test-npm cover testing with request module?
There was a problem hiding this comment.
@mscdex
Your comment looks like you thought that I suggested deprecating one of those.
I just suggested to change the deprecation message for .client to mention just one of those.
targos
commented
May 31, 2015
moved the Object.defineProperty call inside the constructor. Deprecation message is now "client is deprecated, use socket instead". |
targos
commented
May 31, 2015
make test passes, running make test-npm |
targos
commented
May 31, 2015
make test-npm fails, but it seems to be unrelated to the ssl issue (first time I am running this task): |
Fishrock123
commented
May 31, 2015
@targos See #1850 (comment) -- it appears there is a 2nd error. Edit: wait that looks different, can you try it again? |
ChALkeR
commented
May 31, 2015
The commit message is wrong atm. |
silverwind
commented
May 31, 2015
LGTM regarding fixing the issue. I can't get |
silverwind
commented
May 31, 2015
Suggesting |
There was a problem hiding this comment.
Shouldn't this be http.IncomingMessage?
There was a problem hiding this comment.
Yep, thanks for catching that.
d3f52bb to
f2ad68fCompareFishrock123
commented
May 31, 2015
LGTM. If people would rather just revert this deprecation altogether that also LGTM. |
bnoordhuis
commented
May 31, 2015
Let's just revert the deprecation warning. We know now that people use the property so let's keep it around for now. |
Reason: breaks a feature in the request module used by the bundled npm
othiym23
commented
May 31, 2015
I think it would be a good idea to recognize (or even make policy) that the determining factor for whether an object property on something created by Node is "used" shouldn't be whether that property is documented or used within the Node code base itself. Node has been around long enough that it shouldn't be a surprise to people that the ecosystem may be relying on attributes or behavior that Node itself isn't. |
targos
commented
May 31, 2015
moved again to a revert of the deprecation |
bnoordhuis
commented
May 31, 2015
LGTM. Next one to LGTM should land it. (See what I did there?) CI: https://jenkins-iojs.nodesource.com/view/iojs/job/iojs+any-pr+multi/738/ |
thefourtheye
commented
May 31, 2015
@bnoordhuis LGTM, and I cannot land it :D |
silverwind
commented
May 31, 2015
If it matters, it was |
ChALkeR
commented
May 31, 2015
@silverwind No, it shouldn't matter. |
silverwind
commented
May 31, 2015
Okay, landing |
The improper deprecation of the property broke a feature in the request module used by the bundled npm. This reverts the deprecation part of this change. PR-URL: #1852Fixes: #1850 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Roman Reiss <me@silverwind.io>
silverwind
commented
May 31, 2015
Landed in 4d6b768 |
ChALkeR
commented
May 31, 2015
Yay. Could we have a 2.2.1 now? |
Fishrock123
commented
Jun 1, 2015
@othiym23 Yeah, but only a couple of us have access to an npm clone to statically analyze with @chrisdickinson 's |
Notable Changes: * http: reverts the removal of an undocumented `client` property on client connections, this property is being used in the wild, most notably by https://github.com/request/request which is used by npm. (Michaël Zasso) [nodejs#1852](nodejs#1852).
PR-URL: nodejs#1856 Notable Changes: * http: reverts the removal of an undocumented `client` property on client connections, this property is being used in the wild, most notably by https://github.com/request/request which is used by npm. (Michaël Zasso) [nodejs#1852](nodejs#1852).
PR-URL: nodejs#1856 Notable Changes: * http: reverts the removal of an undocumented `client` property on client connections, this property is being used in the wild, most notably by https://github.com/request/request which is used by npm. (Michaël Zasso) [nodejs#1852](nodejs#1852).
othiym23
commented
Jun 1, 2015
@Fishrock123 I didn't mean that we should assay the corpus or use fancy static analysis tools, although those are other potential solutions. That is always going to be at least partially heuristic. I meant that the project as a whole should be conservative about removing or deprecating things, because we can't know what's being relied upon by third parties. Node is a semi-mature product, and should act like it. |
The improper deprecation of the property broke a feature in the request module used by the bundled npm. This reverts the deprecation part of this change. PR-URL: nodejs/node#1852Fixes: nodejs/node#1850 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Roman Reiss <me@silverwind.io>
Reason: breaks a feature in the request module
See #1850
Replaces #1851
/cc @mscdex